Repository: tomee
Updated Branches:
  refs/heads/tomee-1.7.x 04421968a -> 6a3b67c42


TOMEE-1440 simpleDeployment for openejb embedded adapter as well


Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/6a3b67c4
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/6a3b67c4
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/6a3b67c4

Branch: refs/heads/tomee-1.7.x
Commit: 6a3b67c42a9169370d21ffd1c1f51fe05f5a6636
Parents: 0442196
Author: Romain Manni-Bucau <[email protected]>
Authored: Wed Nov 12 09:13:51 2014 +0100
Committer: Romain Manni-Bucau <[email protected]>
Committed: Wed Nov 12 09:13:51 2014 +0100

----------------------------------------------------------------------
 .../openejb/OpenEJBConfiguration.java           | 16 +++++++
 .../openejb/OpenEJBDeployableContainer.java     | 45 ++++++++++++++------
 2 files changed, 49 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/6a3b67c4/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBConfiguration.java
----------------------------------------------------------------------
diff --git 
a/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBConfiguration.java
 
b/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBConfiguration.java
index 9df5cb2..23cdb2f 100644
--- 
a/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBConfiguration.java
+++ 
b/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBConfiguration.java
@@ -20,9 +20,16 @@ import org.jboss.arquillian.config.descriptor.api.Multiline;
 import org.jboss.arquillian.container.spi.ConfigurationException;
 import 
org.jboss.arquillian.container.spi.client.container.ContainerConfiguration;
 
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+
+import static java.util.Arrays.asList;
+
 public class OpenEJBConfiguration implements ContainerConfiguration {
     private String properties = "";
     private String preloadClasses;
+    private Collection<String> singleDeploymentByArchiveName = 
Collections.emptyList();
 
     @Override
     public void validate() throws ConfigurationException {
@@ -45,4 +52,13 @@ public class OpenEJBConfiguration implements 
ContainerConfiguration {
     public void setPreloadClasses(final String preloadClasses) {
         this.preloadClasses = preloadClasses;
     }
+
+    public boolean isSingleDeploymentByArchiveName(final String name) {
+        return singleDeploymentByArchiveName.contains(name) || 
singleDeploymentByArchiveName.contains("*") || 
singleDeploymentByArchiveName.contains("true");
+    }
+
+    public void setSingleDeploymentByArchiveName(final String 
singleDeploymentByArchiveName) {
+        this.singleDeploymentByArchiveName = singleDeploymentByArchiveName == 
null || singleDeploymentByArchiveName.trim().isEmpty() ?
+                Collections.<String>emptyList() : new 
HashSet<String>(asList(singleDeploymentByArchiveName.split(" *, *")));
+    }
 }

http://git-wip-us.apache.org/repos/asf/tomee/blob/6a3b67c4/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBDeployableContainer.java
----------------------------------------------------------------------
diff --git 
a/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBDeployableContainer.java
 
b/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBDeployableContainer.java
index 6f2cd3e..8cbb8c7 100644
--- 
a/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBDeployableContainer.java
+++ 
b/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBDeployableContainer.java
@@ -60,6 +60,8 @@ import java.io.IOException;
 import java.util.Collection;
 import java.util.Map;
 import java.util.Properties;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -82,6 +84,8 @@ public class OpenEJBDeployableContainer implements 
DeployableContainer<OpenEJBCo
         }
     }
 
+    private static final ConcurrentMap<String, DeploymentInfo> DEPLOYMENT_INFO 
= new ConcurrentHashMap<String, DeploymentInfo>();
+
     // config
     private Properties properties;
 
@@ -131,6 +135,8 @@ public class OpenEJBDeployableContainer implements 
DeployableContainer<OpenEJBCo
     @Inject
     private Instance<TestClass> testClass;
 
+    private OpenEJBConfiguration configuration;
+
     @Override
     public Class<OpenEJBConfiguration> getConfigurationClass() {
         return OpenEJBConfiguration.class;
@@ -139,6 +145,7 @@ public class OpenEJBDeployableContainer implements 
DeployableContainer<OpenEJBCo
     @Override
     public void setup(final OpenEJBConfiguration openEJBConfiguration) {
         properties = new Properties();
+        configuration = openEJBConfiguration;
 
         final ByteArrayInputStream bais = new 
ByteArrayInputStream(openEJBConfiguration.getProperties().getBytes());
         try {
@@ -212,20 +219,28 @@ public class OpenEJBDeployableContainer implements 
DeployableContainer<OpenEJBCo
     }
 
     private DeploymentInfo quickDeploy(final Archive<?> archive, final 
TestClass testClass) throws DeploymentException {
-        try {
-            final AppModule module = 
OpenEJBArchiveProcessor.createModule(archive, testClass);
-            final AppInfo appInfo = 
configurationFactory.configureApplication(module);
-            final AppContext appCtx = assembler.createApplication(appInfo, 
module.getClassLoader());
+        final String name = archive.getName();
+        DeploymentInfo info = DEPLOYMENT_INFO.get(name);
+        if (info == null) {
+            try {
+                final AppModule module = 
OpenEJBArchiveProcessor.createModule(archive, testClass);
+                final AppInfo appInfo = 
configurationFactory.configureApplication(module);
+                final AppContext appCtx = assembler.createApplication(appInfo, 
module.getClassLoader());
 
-            final ServletContext appServletContext = new MockServletContext();
-            final HttpSession appSession = new MockHttpSession();
+                final ServletContext appServletContext = new 
MockServletContext();
+                final HttpSession appSession = new MockHttpSession();
 
-            startContexts(appCtx.getWebBeansContext().getContextsService(), 
appServletContext, appSession);
+                
startContexts(appCtx.getWebBeansContext().getContextsService(), 
appServletContext, appSession);
 
-            return new DeploymentInfo(appServletContext, appSession, appInfo, 
appCtx);
-        } catch (final Exception e) {
-            throw new DeploymentException("can't deploy " + archive.getName(), 
e);
+                info = new DeploymentInfo(appServletContext, appSession, 
appInfo, appCtx);
+                if (configuration.isSingleDeploymentByArchiveName(name)) {
+                    DEPLOYMENT_INFO.putIfAbsent(name, info);
+                }
+            } catch (final Exception e) {
+                throw new DeploymentException("can't deploy " + name, e);
+            }
         }
+        return info;
     }
 
     @Override
@@ -244,8 +259,10 @@ public class OpenEJBDeployableContainer implements 
DeployableContainer<OpenEJBCo
         }
 
         try {
-            assembler.destroyApplication(info.get().path);
-            
stopContexts(appContext.get().getWebBeansContext().getContextsService(), 
servletContext.get(), session.get());
+            if 
(!configuration.isSingleDeploymentByArchiveName(archive.getName())) {
+                assembler.destroyApplication(info.get().path);
+            }
+            stopCurrentContexts();
         } catch (final Exception e) {
             throw new DeploymentException("can't undeploy " + 
archive.getName(), e);
         }
@@ -281,6 +298,10 @@ public class OpenEJBDeployableContainer implements 
DeployableContainer<OpenEJBCo
         throw new UnsupportedOperationException();
     }
 
+    private void stopCurrentContexts() throws Exception {
+        
stopContexts(appContext.get().getWebBeansContext().getContextsService(), 
servletContext.get(), session.get());
+    }
+
     private static final class DeploymentInfo {
         public final ServletContext appServletContext;
         public final HttpSession appSession;

Reply via email to