You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by jl...@apache.org on 2011/01/11 15:37:02 UTC

svn commit: r1057664 - /openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatWebAppBuilder.java

Author: jlmonteiro
Date: Tue Jan 11 14:37:02 2011
New Revision: 1057664

URL: http://svn.apache.org/viewvc?rev=1057664&view=rev
Log:
Fix pojo web service deployment in TomcatWebAppBuilder

Modified:
    openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatWebAppBuilder.java

Modified: openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatWebAppBuilder.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatWebAppBuilder.java?rev=1057664&r1=1057663&r2=1057664&view=diff
==============================================================================
--- openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatWebAppBuilder.java (original)
+++ openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatWebAppBuilder.java Tue Jan 11 14:37:02 2011
@@ -34,7 +34,6 @@ import org.apache.catalina.startup.Conte
 import org.apache.catalina.startup.HostConfig;
 import org.apache.naming.ContextAccessController;
 import org.apache.naming.ContextBindings;
-import org.apache.openejb.ClassLoaderUtil;
 import org.apache.openejb.Injection;
 import org.apache.openejb.OpenEJBException;
 import org.apache.openejb.assembler.classic.AppInfo;
@@ -44,7 +43,6 @@ import org.apache.openejb.assembler.clas
 import org.apache.openejb.assembler.classic.InjectionBuilder;
 import org.apache.openejb.assembler.classic.WebAppBuilder;
 import org.apache.openejb.assembler.classic.WebAppInfo;
-import org.apache.openejb.config.AnnotationDeployer;
 import org.apache.openejb.config.AppModule;
 import org.apache.openejb.config.ConfigurationFactory;
 import org.apache.openejb.config.DeploymentLoader;
@@ -52,13 +50,10 @@ import org.apache.openejb.config.WebModu
 import org.apache.openejb.core.CoreContainerSystem;
 import org.apache.openejb.core.WebContext;
 import org.apache.openejb.core.ivm.naming.SystemComponentReference;
-import org.apache.openejb.core.webservices.JaxWsUtils;
 import org.apache.openejb.jee.EnvEntry;
 import org.apache.openejb.jee.WebApp;
 import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.server.webservices.WsService;
-import org.apache.openejb.server.webservices.WsServlet;
-import org.apache.openejb.spi.ContainerSystem;
 import org.apache.openejb.tomcat.common.LegacyAnnotationProcessor;
 import org.apache.openejb.tomcat.common.TomcatVersion;
 import org.apache.openejb.tomcat.loader.TomcatHelper;
@@ -83,7 +78,6 @@ import java.util.Map;
 import java.util.TreeMap;
 
 import static org.apache.openejb.tomcat.catalina.BackportUtil.getNamingContextListener;
-import static org.apache.openejb.tomcat.catalina.BackportUtil.getServlet;
 
 /**
  * Web application builder.
@@ -128,14 +122,21 @@ public class TomcatWebAppBuilder impleme
     private final DeploymentLoader deploymentLoader;
     /**
      * OpenEJB assembler instance
+     * TODO can we use the SPI interface instead?
      */
     private Assembler assembler;
     /**
      * OpenEJB container system
+     * TODO can we use the SPI interface instead?
      */
     private CoreContainerSystem containerSystem;
 
     /**
+     * WsService
+     */
+    private WsService wsService;
+
+    /**
      * Creates a new web application builder
      * instance.
      */
@@ -143,7 +144,7 @@ public class TomcatWebAppBuilder impleme
     	
     	// TODO: re-write this bit, so this becomes part of the listener, and we register this with the mbean server.
     	
-        StandardServer standardServer = (StandardServer) TomcatHelper.getServer();
+        StandardServer standardServer = TomcatHelper.getServer();
         globalListenerSupport = new GlobalListenerSupport(standardServer, this);
 
         // could search mbeans
@@ -168,8 +169,6 @@ public class TomcatWebAppBuilder impleme
 
         configurationFactory = new ConfigurationFactory();
         deploymentLoader = new DeploymentLoader();
-        assembler = (Assembler) SystemInstance.get().getComponent(org.apache.openejb.spi.Assembler.class);
-        containerSystem = (CoreContainerSystem) SystemInstance.get().getComponent(ContainerSystem.class);
     }
 
     /**
@@ -364,13 +363,24 @@ public class TomcatWebAppBuilder impleme
             return;
         }
 
+        // required for Pojo Web Services because when Assembler creates the application
+        // the CoreContainerSystem does not contain the WebContext
+        // see also the start method getContainerSystem().addWebDeployment(webContext);
+        WsService wsService = getWsService();
+        if (wsService != null) {
+            List<WebAppInfo> webApps = contextInfo.appInfo.webApps;
+            for (WebAppInfo webApp : webApps) {
+                wsService.afterApplicationCreated(webApp);
+            }
+        }
+
         // bind extra stuff at the java:comp level which can only be
         // bound after the context is created
         String listenerName = getNamingContextListener(standardContext).getName();
         ContextAccessController.setWritable(listenerName, standardContext);
         try {
 
-            Context openejbContext = SystemInstance.get().getComponent(ContainerSystem.class).getJNDIContext();
+            Context openejbContext = getContainerSystem().getJNDIContext();
             openejbContext = (Context) openejbContext.lookup("openejb");
 
             Context root = (Context) ContextBindings.getClassLoader().lookup("");
@@ -381,7 +391,7 @@ public class TomcatWebAppBuilder impleme
             // add context to WebDeploymentInfo
             for (WebAppInfo webAppInfo : contextInfo.appInfo.webApps) {
                 if (("/" + webAppInfo.contextRoot).equals(standardContext.getPath()) || isRootApplication(standardContext)) {
-                    WebContext webContext = (WebContext) getContainerSystem().getWebContext(webAppInfo.moduleId);
+                    WebContext webContext = getContainerSystem().getWebContext(webAppInfo.moduleId);
                     if (webContext != null) {
                         webContext.setJndiEnc(comp);
                     }
@@ -460,7 +470,7 @@ public class TomcatWebAppBuilder impleme
         ContextInfo contextInfo = getContextInfo(standardContext);
         if (contextInfo != null && contextInfo.appInfo != null && contextInfo.deployer == null) {
             try {
-                assembler.destroyApplication(contextInfo.appInfo.path);
+                getAssembler().destroyApplication(contextInfo.appInfo.path);
             } catch (Exception e) {
                 logger.error("Unable to stop web application " + standardContext.getPath() + ": Exception: " + e.getMessage(), e);
             }
@@ -507,7 +517,7 @@ public class TomcatWebAppBuilder impleme
                 DeployedApplication deployedApplication = entry.getValue();
                 if (deployedApplication.isModified()) {
                     try {
-                        assembler.destroyApplication(deployedApplication.appInfo.path);
+                        getAssembler().destroyApplication(deployedApplication.appInfo.path);
                     } catch (Exception e) {
                         logger.error("Unable to application " + deployedApplication.appInfo.path + ": Exception: " + e.getMessage(), e);
                     }
@@ -576,7 +586,7 @@ public class TomcatWebAppBuilder impleme
                     }
 
                     appInfo = configurationFactory.configureApplication(appModule);
-                    assembler.createApplication(appInfo);
+                    getAssembler().createApplication(appInfo);
                 } catch (Throwable e) {
                     logger.warning("Error deploying application " + file.getAbsolutePath(), e);
                 }
@@ -762,12 +772,24 @@ public class TomcatWebAppBuilder impleme
      */
     private CoreContainerSystem getContainerSystem() {
         if (containerSystem == null) {
-            containerSystem = (CoreContainerSystem) SystemInstance.get().getComponent(ContainerSystem.class);
+            containerSystem = (CoreContainerSystem) SystemInstance.get().getComponent(org.apache.openejb.spi.ContainerSystem.class);
         }
         return containerSystem;
     }
 
     /**
+     * Gets WsService implementation.
+     *
+     * @return wsService
+     */
+    private WsService getWsService() {
+        if (wsService == null) {
+            wsService = SystemInstance.get().getComponent(WsService.class);
+        }
+        return wsService;
+    }
+
+    /**
      * Gets id of the context. Context id
      * is host name + context root name.
      *