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;
