1 17 package org.openejb.tomcat; 18 19 import org.openejb.OpenEJB; 20 import org.openejb.loader.Loader; 21 import org.openejb.loader.SystemInstance; 22 import org.openejb.server.ServerFederation; 23 import org.openejb.server.ServiceException; 24 import org.openejb.server.ejbd.EjbServer; 25 26 import javax.servlet.ServletConfig ; 27 import javax.servlet.ServletContext ; 28 import javax.servlet.ServletException ; 29 import javax.servlet.ServletInputStream ; 30 import javax.servlet.ServletOutputStream ; 31 import javax.servlet.http.HttpServletRequest ; 32 import javax.servlet.http.HttpServletResponse ; 33 import java.io.File ; 34 import java.io.IOException ; 35 import java.util.Enumeration ; 36 import java.util.Properties ; 37 38 41 public class TomcatLoader implements Loader { 42 43 private EjbServer ejbServer; 44 45 public void init(ServletConfig config) throws ServletException { 46 if (OpenEJB.isInitialized()) { 48 ejbServer = (EjbServer) SystemInstance.get().getObject(this.ejbServer.getClass().getName()); 49 return; 50 } 51 52 Properties p = new Properties (); 53 p.setProperty("openejb.loader", "tomcat"); 54 55 Enumeration enumeration = config.getInitParameterNames(); 56 System.out.println("OpenEJB init-params:"); 57 while (enumeration.hasMoreElements()) { 58 String name = (String ) enumeration.nextElement(); 59 String value = config.getInitParameter(name); 60 p.put(name, value); 61 System.out.println("\tparam-name: " + name + ", param-value: " + value); 62 } 63 64 String loader = p.getProperty("openejb.loader"); if (loader.endsWith("tomcat-webapp")) { 66 ServletContext ctx = config.getServletContext(); 67 File webInf = new File (ctx.getRealPath("WEB-INF")); 68 File webapp = webInf.getParentFile(); 69 String webappPath = webapp.getAbsolutePath(); 70 71 setPropertyIfNUll(p, "openejb.base", webappPath); 72 setPropertyIfNUll(p, "openejb.configuration", "META-INF/openejb.xml"); 73 setPropertyIfNUll(p, "openejb.container.decorators", TomcatJndiSupport.class.getName()); 74 setPropertyIfNUll(p, "log4j.configuration", "META-INF/log4j.properties"); 75 } 76 77 try { 78 init(p); 79 } catch (Exception e) { 80 e.printStackTrace(); 81 } 82 } 83 84 public void init(Properties props) throws Exception { 85 SystemInstance.init(props); 86 ejbServer = new EjbServer(); 87 SystemInstance.get().setObject(ejbServer.getClass().getName(), ejbServer); 88 OpenEJB.init(props, new ServerFederation()); 89 ejbServer.init(props); 90 } 91 92 private Object setPropertyIfNUll(Properties properties, String key, String value) { 93 String currentValue = properties.getProperty(key); 94 if (currentValue == null) { 95 properties.setProperty(key, value); 96 } 97 return currentValue; 98 } 99 100 public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException , IOException { 101 ServletInputStream in = request.getInputStream(); 102 ServletOutputStream out = response.getOutputStream(); 103 try { 104 ejbServer.service(in, out); 105 } catch (ServiceException e) { 106 throw new ServletException ("ServerService error: " + ejbServer.getClass().getName() + " -- " + e.getMessage(), e); 107 } 108 } 109 } 110 | Popular Tags |