Author: dblevins
Date: Tue Jun 24 22:11:42 2008
New Revision: 671431

URL: http://svn.apache.org/viewvc?rev=671431&view=rev
Log:
Ability to shut off webservices support.  Eliminates all webservice related 
material from deployments

Added:
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/RemoveWebServices.java
Modified:
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java?rev=671431&r1=671430&r2=671431&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
 Tue Jun 24 22:11:42 2008
@@ -105,6 +105,7 @@
     private final DeploymentLoader deploymentLoader;
     private final boolean offline;
     private static final String CLASSPATH_AS_EAR = 
"openejb.deployments.classpath.ear";
+    static final String WEBSERVICES_ENABLED = "openejb.webservices.enabled";
 
     public ConfigurationFactory() {
         this(false);
@@ -140,7 +141,12 @@
             chain.add(new DebuggableVmHackery());
         }
 
-        chain.add(new WsDeployer());
+        String webservicesEnabled = 
SystemInstance.get().getProperty(WEBSERVICES_ENABLED, "true");
+        if (Boolean.parseBoolean(webservicesEnabled)){
+            chain.add(new WsDeployer());
+        } else {
+            chain.add(new RemoveWebServices());
+        }
 
         chain.add(new CmpJpaConversion());
         chain.add(new OpenEjb2Conversion());

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java?rev=671431&r1=671430&r2=671431&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
 Tue Jun 24 22:11:42 2008
@@ -46,6 +46,7 @@
 import org.apache.openejb.ClassLoaderUtil;
 import org.apache.openejb.OpenEJB;
 import org.apache.openejb.OpenEJBException;
+import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.jee.Application;
 import org.apache.openejb.jee.ApplicationClient;
 import org.apache.openejb.jee.Connector;
@@ -569,6 +570,13 @@
     }
 
     private static void addWebservices(WsModule wsModule) throws 
OpenEJBException {
+        String webservicesEnabled = 
SystemInstance.get().getProperty(ConfigurationFactory.WEBSERVICES_ENABLED, 
"true");
+        if (!Boolean.parseBoolean(webservicesEnabled)) {
+            wsModule.getAltDDs().remove("webservices.xml");
+            wsModule.setWebservices(null); // should be null already, but just 
for good measure
+            return;
+        }
+
         // get location of webservices.xml file
         Object webservicesObject = wsModule.getAltDDs().get("webservices.xml");
         if (webservicesObject == null || !(webservicesObject instanceof URL)) {

Added: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/RemoveWebServices.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/RemoveWebServices.java?rev=671431&view=auto
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/RemoveWebServices.java
 (added)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/RemoveWebServices.java
 Tue Jun 24 22:11:42 2008
@@ -0,0 +1,124 @@
+/**
+ * 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.openejb.config;
+
+import org.apache.openejb.OpenEJBException;
+import org.apache.openejb.jee.AssemblyDescriptor;
+import org.apache.openejb.jee.ContainerTransaction;
+import org.apache.openejb.jee.EjbJar;
+import org.apache.openejb.jee.EnterpriseBean;
+import org.apache.openejb.jee.Interceptor;
+import org.apache.openejb.jee.InterceptorBinding;
+import org.apache.openejb.jee.Method;
+import org.apache.openejb.jee.MethodPermission;
+import org.apache.openejb.jee.SessionBean;
+import org.apache.openejb.jee.oejb3.EjbDeployment;
+import org.apache.openejb.jee.oejb3.OpenejbJar;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @version $Rev: 607160 $ $Date: 2007-12-27 18:22:44 -0800 (Thu, 27 Dec 2007) 
$
+ */
+class RemoveWebServices implements DynamicDeployer {
+
+    public AppModule deploy(AppModule appModule) throws OpenEJBException {
+
+        for (EjbModule ejbModule : appModule.getEjbModules()) {
+            EjbJar ejbJar = ejbModule.getEjbJar();
+            OpenejbJar openejbJar = ejbModule.getOpenejbJar();
+            Map<String, EjbDeployment> deployments = 
openejbJar.getDeploymentsByEjbName();
+
+            for (EnterpriseBean bean : ejbJar.getEnterpriseBeans()) {
+
+                String ejbName = bean.getEjbName();
+                EjbDeployment ejbDeployment = deployments.get(ejbName);
+
+                // Clear any <service-ref> references from ejbs
+                bean.getServiceRef().clear();
+
+                if (!(bean instanceof SessionBean)) {
+                    continue;
+                }
+
+                SessionBean sessionBean = (SessionBean) bean;
+
+                if (sessionBean.getServiceEndpoint() == null) continue;
+
+                sessionBean.setServiceEndpoint(null);
+
+                // Now check if the bean has no other interfaces
+                // if not, then we should just delete it
+                if (sessionBean.getHome() != null) continue;
+                if (sessionBean.getLocalHome() != null) continue;
+                if (sessionBean.getBusinessLocal().size() > 0) continue;
+                if (sessionBean.getBusinessRemote().size() > 0) continue;
+
+                // Ok, delete away...
+                ejbJar.removeEnterpriseBean(ejbName);
+                openejbJar.removeEjbDeployment(ejbDeployment);
+
+                // As well, let's get rid of any transaction or security 
attributes
+                // associated with the bean we just deleted.
+                AssemblyDescriptor assemblyDescriptor = 
ejbJar.getAssemblyDescriptor();
+                if (assemblyDescriptor != null) {
+                    for (MethodPermission permission : 
copy(assemblyDescriptor.getMethodPermission())) {
+                        for (Method method : copy(permission.getMethod())) {
+                            if (method.getEjbName().equals(ejbName)) {
+                                permission.getMethod().remove(method);
+                            }
+                        }
+                        if (permission.getMethod().size() == 0) {
+                            
assemblyDescriptor.getMethodPermission().remove(permission);
+                        }
+                    }
+
+                    for (ContainerTransaction transaction : 
copy(assemblyDescriptor.getContainerTransaction())) {
+                        for (Method method : copy(transaction.getMethod())) {
+                            if (method.getEjbName().equals(ejbName)) {
+                                transaction.getMethod().remove(method);
+                            }
+                        }
+                        if (transaction.getMethod().size() == 0) {
+                            
assemblyDescriptor.getContainerTransaction().remove(transaction);
+                        }
+                    }
+
+                    for (InterceptorBinding binding : 
copy(assemblyDescriptor.getInterceptorBinding())) {
+                        if (binding.getEjbName().equals(ejbName)) {
+                            
assemblyDescriptor.getInterceptorBinding().remove(binding);
+                        }
+                    }
+                }
+            }
+
+            // Clear any <service-ref> references from interceptors
+            for (Interceptor interceptor : ejbJar.getInterceptors()) {
+                interceptor.getServiceRef().clear();
+            }
+
+        }
+        return appModule;
+    }
+
+    public <T> List<T> copy(Collection<T> list) {
+        return new ArrayList<T>(list);
+    }
+}


Reply via email to