Author: rmannibucau
Date: Tue Aug  6 07:53:28 2013
New Revision: 1510878

URL: http://svn.apache.org/r1510878
Log:
TOMEE-1014 making tomee webapp optional for ejbd

Added:
    
tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/remote/
    
tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/remote/TomEERemoteWebapp.java
Modified:
    
tomee/tomee/trunk/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java
    
tomee/tomee/trunk/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/UpdatableTomEEMojo.java
    
tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/GlobalListenerSupport.java
    
tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/IgnoredStandardContext.java

Modified: 
tomee/tomee/trunk/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java?rev=1510878&r1=1510877&r2=1510878&view=diff
==============================================================================
--- 
tomee/tomee/trunk/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java
 (original)
+++ 
tomee/tomee/trunk/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java
 Tue Aug  6 07:53:28 2013
@@ -208,9 +208,12 @@ public abstract class AbstractTomEEMojo 
     @Parameter(property = "tomee-plugin.deploy-openejb-internal-application", 
defaultValue = "false")
     protected boolean deployOpenEjbApplication;
 
-    @Parameter(property = "tomee-plugin.remove-tomee-webapps", defaultValue = 
"false")
+    @Parameter(property = "tomee-plugin.remove-tomee-webapps", defaultValue = 
"true")
     protected boolean removeTomeeWebapp;
 
+    @Parameter(property = "tomee-plugin.ejb-remote", defaultValue = "true")
+    protected boolean ejbRemote;
+
     @Parameter(defaultValue = "${project.packaging}", readonly = true)
     protected String packaging;
 
@@ -643,6 +646,9 @@ public abstract class AbstractTomEEMojo 
         if (quickSession) {
             
strings.add("-Dopenejb.session.manager=org.apache.tomee.catalina.session.QuickSessionManager");
         }
+        if (removeTomeeWebapp && ejbRemote) { // if we have tomee webapp no 
need to activate ejb remote support this way
+            strings.add("-Dtomee.remote.support=true");
+        }
         if (!deployOpenEjbApplication) { // true is the default so don't need 
to set the property
             if (args == null || !args.contains("-D" + deployOpenEjbAppKey)) {
                 strings.add("-D" + deployOpenEjbAppKey + "=false");

Modified: 
tomee/tomee/trunk/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/UpdatableTomEEMojo.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/UpdatableTomEEMojo.java?rev=1510878&r1=1510877&r2=1510878&view=diff
==============================================================================
--- 
tomee/tomee/trunk/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/UpdatableTomEEMojo.java
 (original)
+++ 
tomee/tomee/trunk/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/UpdatableTomEEMojo.java
 Tue Aug  6 07:53:28 2013
@@ -84,8 +84,8 @@ public abstract class UpdatableTomEEMojo
             forceReloadable = true;
         }
 
-        if (removeTomeeWebapp) {
-            getLog().warn("TomEE webapp is asked to be removed 
(<removeTomeeWebapp>true</removeTomeeWebapp>) so you can use reload feature");
+        if (removeTomeeWebapp && !ejbRemote) {
+            getLog().warn("TomEE webapp is asked to be removed 
(<ejbRemote>true> or <removeTomeeWebapp>true</removeTomeeWebapp>) so you can 
use reload feature");
         }
 
         super.run();
@@ -330,8 +330,8 @@ public abstract class UpdatableTomEEMojo
     }
 
     private Deployer deployer() {
-        if (removeTomeeWebapp) {
-            throw new OpenEJBRuntimeException("Can't use reload feature 
without TomEE Webapp, please set removeTomeeWebapp to false");
+        if (removeTomeeWebapp && !ejbRemote) {
+            throw new OpenEJBRuntimeException("Can't use reload feature 
without TomEE Webapp, please set removeTomeeWebapp to false or ejbRemote to 
true");
         }
 
         final Properties properties = new Properties();

Modified: 
tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/GlobalListenerSupport.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/GlobalListenerSupport.java?rev=1510878&r1=1510877&r2=1510878&view=diff
==============================================================================
--- 
tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/GlobalListenerSupport.java
 (original)
+++ 
tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/GlobalListenerSupport.java
 Tue Aug  6 07:53:28 2013
@@ -27,13 +27,14 @@ import org.apache.catalina.core.Standard
 import org.apache.catalina.core.StandardEngine;
 import org.apache.catalina.core.StandardHost;
 import org.apache.catalina.core.StandardServer;
+import org.apache.openejb.loader.SystemInstance;
 import org.apache.tomee.catalina.cluster.TomEEClusterListener;
+import org.apache.tomee.catalina.remote.TomEERemoteWebapp;
 import org.apache.tomee.loader.TomcatHelper;
 
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 import java.lang.reflect.Field;
-import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.Map;
 
@@ -44,6 +45,7 @@ import java.util.Map;
  * @version $Rev$ $Date$
  */
 public class GlobalListenerSupport implements PropertyChangeListener, 
LifecycleListener {
+    private static final boolean REMOTE_SUPPORT = 
SystemInstance.get().getOptions().get("tomee.remote.support", true);
 
     /**
      * The LifecycleEvent type for the "component init" event.
@@ -129,6 +131,8 @@ public class GlobalListenerSupport imple
             String type = event.getType();
             if (Lifecycle.PERIODIC_EVENT.equals(type)) {
                 contextListener.checkHost(standardHost);
+            } else if (Lifecycle.AFTER_START_EVENT.equals(type) && 
REMOTE_SUPPORT) {
+                standardHost.addChild(new TomEERemoteWebapp());
             }
         } else if (StandardServer.class.isInstance(source)) {
             StandardServer standardServer = (StandardServer) source;

Modified: 
tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/IgnoredStandardContext.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/IgnoredStandardContext.java?rev=1510878&r1=1510877&r2=1510878&view=diff
==============================================================================
--- 
tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/IgnoredStandardContext.java
 (original)
+++ 
tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/IgnoredStandardContext.java
 Tue Aug  6 07:53:28 2013
@@ -28,8 +28,8 @@ public class IgnoredStandardContext exte
         // Tomcat has a stupid rule where a life cycle listener must set
         // configured true, or it will treat it as a failed deployment
         addLifecycleListener(new LifecycleListener() {
-            public void lifecycleEvent(LifecycleEvent event) {
-                Context context = (Context) event.getLifecycle();
+            public void lifecycleEvent(final LifecycleEvent event) {
+                final Context context = 
Context.class.cast(event.getLifecycle());
                 if (event.getType().equals(Lifecycle.START_EVENT)
                         || event.getType().equals(Lifecycle.BEFORE_START_EVENT)
                         || 
event.getType().equals(Lifecycle.CONFIGURE_START_EVENT)) {

Added: 
tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/remote/TomEERemoteWebapp.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/remote/TomEERemoteWebapp.java?rev=1510878&view=auto
==============================================================================
--- 
tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/remote/TomEERemoteWebapp.java
 (added)
+++ 
tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/remote/TomEERemoteWebapp.java
 Tue Aug  6 07:53:28 2013
@@ -0,0 +1,132 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.tomee.catalina.remote;
+
+import org.apache.catalina.Container;
+import org.apache.catalina.LifecycleException;
+import org.apache.catalina.Loader;
+import org.apache.catalina.Wrapper;
+import org.apache.openejb.OpenEJB;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.server.httpd.ServerServlet;
+import org.apache.tomee.catalina.IgnoredStandardContext;
+
+import java.beans.PropertyChangeListener;
+
+public class TomEERemoteWebapp extends IgnoredStandardContext {
+    private static final String CONTEXT_NAME = 
SystemInstance.get().getProperty("tomee.remote.support.context", "tomee");
+    private static final String MAPPING = 
SystemInstance.get().getProperty("tomee.remote.support.mapping", "/ejb");
+
+    public TomEERemoteWebapp() {
+        setDocBase("");
+        setParentClassLoader(OpenEJB.class.getClassLoader());
+        setDelegate(true);
+        setName(CONTEXT_NAME);
+        setPath("/" + CONTEXT_NAME);
+        setLoader(new ServerClassLoaderLoader(this));
+    }
+
+    @Override
+    protected void initInternal() throws LifecycleException {
+        super.initInternal();
+        final Wrapper servlet = createWrapper();
+        servlet.setName(ServerServlet.class.getSimpleName());
+        servlet.setServletClass(ServerServlet.class.getName());
+        addChild(servlet);
+        addServletMapping(MAPPING, ServerServlet.class.getSimpleName());
+    }
+
+    private static class ServerClassLoaderLoader implements Loader {
+        private static final String[] EMPTY_ARRAY = new String[0];
+
+        private final TomEERemoteWebapp container;
+
+        public ServerClassLoaderLoader(final TomEERemoteWebapp 
tomEERemoteWebapp) {
+            container = tomEERemoteWebapp;
+        }
+
+        @Override
+        public void backgroundProcess() {
+            // no-op
+        }
+
+        @Override
+        public ClassLoader getClassLoader() {
+            return OpenEJB.class.getClassLoader();
+        }
+
+        @Override
+        public Container getContainer() {
+            return container;
+        }
+
+        @Override
+        public void setContainer(final Container container) {
+            // no-op
+        }
+
+        @Override
+        public boolean getDelegate() {
+            return true;
+        }
+
+        @Override
+        public void setDelegate(final boolean delegate) {
+            // no-op
+        }
+
+        @Override
+        public String getInfo() {
+            return ServerClassLoaderLoader.class.getName() + "/1.0";
+        }
+
+        @Override
+        public boolean getReloadable() {
+            return false;
+        }
+
+        @Override
+        public void setReloadable(final boolean reloadable) {
+            // no-op
+        }
+
+        @Override
+        public void addPropertyChangeListener(final PropertyChangeListener 
listener) {
+            // no-op
+        }
+
+        @Override
+        public void addRepository(final String repository) {
+            // no-op
+        }
+
+        @Override
+        public String[] findRepositories() {
+            return EMPTY_ARRAY;
+        }
+
+        @Override
+        public boolean modified() {
+            return false;
+        }
+
+        @Override
+        public void removePropertyChangeListener(final PropertyChangeListener 
listener) {
+            // no-op
+        }
+    }
+}


Reply via email to