You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2014/10/02 21:24:54 UTC
svn commit: r1629050 - in /tomee/tomee/trunk:
container/openejb-core/src/main/java/org/apache/openejb/config/
examples/deltaspike-fullstack/
maven/tomee-embedded-maven-plugin/src/main/java/org/apache/openejb/maven/plugins/
maven/tomee-embedded-maven-pl...
Author: rmannibucau
Date: Thu Oct 2 19:24:53 2014
New Revision: 1629050
URL: http://svn.apache.org/r1629050
Log:
TOMEE-1375 mvn tomee-embedded:run as jetty:run
Added:
tomee/tomee/trunk/maven/tomee-embedded-maven-plugin/src/test/
tomee/tomee/trunk/maven/tomee-embedded-maven-plugin/src/test/java/
tomee/tomee/trunk/maven/tomee-embedded-maven-plugin/src/test/java/org/
tomee/tomee/trunk/maven/tomee-embedded-maven-plugin/src/test/java/org/apache/
tomee/tomee/trunk/maven/tomee-embedded-maven-plugin/src/test/java/org/apache/openejb/
tomee/tomee/trunk/maven/tomee-embedded-maven-plugin/src/test/java/org/apache/openejb/maven/
tomee/tomee/trunk/maven/tomee-embedded-maven-plugin/src/test/java/org/apache/openejb/maven/plugins/
tomee/tomee/trunk/maven/tomee-embedded-maven-plugin/src/test/java/org/apache/openejb/maven/plugins/TomEEEmbeddedMojoTest.java
tomee/tomee/trunk/maven/tomee-embedded-maven-plugin/src/test/java/org/superbiz/
tomee/tomee/trunk/maven/tomee-embedded-maven-plugin/src/test/java/org/superbiz/Endpoint.java
tomee/tomee/trunk/maven/tomee-embedded-maven-plugin/src/test/resources/
tomee/tomee/trunk/maven/tomee-embedded-maven-plugin/src/test/resources/META-INF/
tomee/tomee/trunk/maven/tomee-embedded-maven-plugin/src/test/resources/META-INF/beans.xml
Modified:
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentsResolver.java
tomee/tomee/trunk/examples/deltaspike-fullstack/pom.xml
tomee/tomee/trunk/maven/tomee-embedded-maven-plugin/src/main/java/org/apache/openejb/maven/plugins/TomEEEmbeddedMojo.java
tomee/tomee/trunk/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Container.java
tomee/tomee/trunk/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Main.java
tomee/tomee/trunk/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/internal/StandardContextCustomizer.java
tomee/tomee/trunk/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/ClasspathAsWebappTest.java
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java?rev=1629050&r1=1629049&r2=1629050&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java Thu Oct 2 19:24:53 2014
@@ -216,31 +216,8 @@ public class DeploymentLoader implements
final AppModule appModule = new AppModule(webModule.getClassLoader(), file.getAbsolutePath(), new Application(), true);
addWebModule(webModule, appModule);
- final Map<String, Object> otherDD = new HashMap<String, Object>();
- final List<URL> urls = webModule.getScannableUrls();
- final ResourceFinder finder = new ResourceFinder("", urls.toArray(new URL[urls.size()]));
- otherDD.putAll(getDescriptors(finder, false));
+ addWebModuleDescriptors(baseUrl, webModule, appModule);
- // "persistence.xml" is done separately since we manage a list of url and not s single url
- try {
- final List<URL> persistenceXmls = finder.findAll(ddDir + "persistence.xml");
- if (persistenceXmls.size() >= 1) {
- final URL old = (URL) otherDD.get("persistence.xml");
- if (old != null && !persistenceXmls.contains(old)) {
- persistenceXmls.add(old);
- }
- otherDD.put("persistence.xml", persistenceXmls);
- }
- } catch (final IOException e) {
- // ignored
- }
-
- addConnectorModules(appModule, webModule);
-
- addWebPersistenceDD("persistence.xml", otherDD, appModule);
- addWebPersistenceDD("persistence-fragment.xml", otherDD, appModule);
- addPersistenceUnits(appModule, baseUrl);
- addWebFragments(webModule, urls);
appModule.setStandloneWebModule();
appModule.setDelegateFirst(true); // force it for webapps
return appModule;
@@ -270,7 +247,35 @@ public class DeploymentLoader implements
}
}
- private void addConnectorModules(final AppModule appModule, final WebModule webModule) throws OpenEJBException {
+ public static void addWebModuleDescriptors(final URL baseUrl, final WebModule webModule, final AppModule appModule) throws OpenEJBException {
+ final Map<String, Object> otherDD = new HashMap<String, Object>();
+ final List<URL> urls = webModule.getScannableUrls();
+ final ResourceFinder finder = new ResourceFinder("", urls.toArray(new URL[urls.size()]));
+ otherDD.putAll(getDescriptors(finder, false));
+
+ // "persistence.xml" is done separately since we manage a list of url and not s single url
+ try {
+ final List<URL> persistenceXmls = finder.findAll(ddDir + "persistence.xml");
+ if (persistenceXmls.size() >= 1) {
+ final URL old = (URL) otherDD.get("persistence.xml");
+ if (old != null && !persistenceXmls.contains(old)) {
+ persistenceXmls.add(old);
+ }
+ otherDD.put("persistence.xml", persistenceXmls);
+ }
+ } catch (final IOException e) {
+ // ignored
+ }
+
+ addConnectorModules(appModule, webModule);
+
+ addWebPersistenceDD("persistence.xml", otherDD, appModule);
+ addWebPersistenceDD("persistence-fragment.xml", otherDD, appModule);
+ addPersistenceUnits(appModule, baseUrl);
+ addWebFragments(webModule, urls);
+ }
+
+ private static void addConnectorModules(final AppModule appModule, final WebModule webModule) throws OpenEJBException {
// WEB-INF
if (webModule.getAltDDs().containsKey("ra.xml")) {
final String jarLocation = new File(webModule.getJarLocation(), "/WEB-INF/classes").getAbsolutePath();
@@ -325,7 +330,7 @@ public class DeploymentLoader implements
}
@SuppressWarnings("unchecked")
- private void addWebPersistenceDD(final String name, final Map<String, Object> otherDD, final AppModule appModule) {
+ private static void addWebPersistenceDD(final String name, final Map<String, Object> otherDD, final AppModule appModule) {
if (otherDD.containsKey(name)) {
List<URL> persistenceUrls = (List<URL>) appModule.getAltDDs().get(name);
if (persistenceUrls == null) {
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentsResolver.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentsResolver.java?rev=1629050&r1=1629049&r2=1629050&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentsResolver.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentsResolver.java Thu Oct 2 19:24:53 2014
@@ -258,14 +258,18 @@ public class DeploymentsResolver impleme
}
}
- final List<URL> urls = new ArrayList<URL>();
final boolean isWindows = System.getProperty("os.name", "unknown").toLowerCase().startsWith("windows");
-
- for (final URL url : urlSet.getUrls()) {
- final String ef = isWindows ? url.toExternalForm().toLowerCase() : url.toExternalForm();
- final URL u = new URL(ef);
- if (!urls.contains(u)) {
- urls.add(u);
+ final List<URL> urls;
+ if (!isWindows) {
+ urls = urlSet.getUrls();
+ } else {
+ urls = new ArrayList<URL>();
+ for (final URL url : urlSet.getUrls()) {
+ final String ef = url.toExternalForm().toLowerCase();
+ final URL u = new URL(ef);
+ if (!urls.contains(u)) {
+ urls.add(u);
+ }
}
}
Modified: tomee/tomee/trunk/examples/deltaspike-fullstack/pom.xml
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/examples/deltaspike-fullstack/pom.xml?rev=1629050&r1=1629049&r2=1629050&view=diff
==============================================================================
--- tomee/tomee/trunk/examples/deltaspike-fullstack/pom.xml (original)
+++ tomee/tomee/trunk/examples/deltaspike-fullstack/pom.xml Thu Oct 2 19:24:53 2014
@@ -75,6 +75,14 @@
</configuration>
</plugin>
<plugin>
+ <groupId>org.apache.openejb.maven</groupId>
+ <artifactId>tomee-embedded-maven-plugin</artifactId>
+ <version>${version.tomee}</version>
+ <configuration>
+ <classpathAsWar>true</classpathAsWar>
+ </configuration>
+ </plugin>
+ <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.17</version>
Modified: tomee/tomee/trunk/maven/tomee-embedded-maven-plugin/src/main/java/org/apache/openejb/maven/plugins/TomEEEmbeddedMojo.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/maven/tomee-embedded-maven-plugin/src/main/java/org/apache/openejb/maven/plugins/TomEEEmbeddedMojo.java?rev=1629050&r1=1629049&r2=1629050&view=diff
==============================================================================
--- tomee/tomee/trunk/maven/tomee-embedded-maven-plugin/src/main/java/org/apache/openejb/maven/plugins/TomEEEmbeddedMojo.java (original)
+++ tomee/tomee/trunk/maven/tomee-embedded-maven-plugin/src/main/java/org/apache/openejb/maven/plugins/TomEEEmbeddedMojo.java Thu Oct 2 19:24:53 2014
@@ -16,18 +16,33 @@
*/
package org.apache.openejb.maven.plugins;
+import org.apache.catalina.LifecycleState;
+import org.apache.maven.artifact.Artifact;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.plugins.annotations.ResolutionScope;
+import org.apache.maven.project.MavenProject;
+import org.apache.openejb.core.ParentClassLoaderFinder;
+import org.apache.openejb.core.ProvidedClassLoaderFinder;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.maven.util.MavenLogStreamFactory;
import org.apache.tomee.embedded.Configuration;
import org.apache.tomee.embedded.Container;
import java.io.File;
import java.lang.reflect.Field;
-import java.util.concurrent.CountDownLatch;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Scanner;
+import java.util.Set;
/**
* Run an Embedded TomEE.
@@ -41,55 +56,124 @@ public class TomEEEmbeddedMojo extends A
protected File warFile;
@Parameter(property = "tomee-embedded-plugin.http", defaultValue = "8080")
- private int httpPort;
+ protected int httpPort;
+
+ @Parameter(property = "tomee-embedded-plugin.httpsPort", defaultValue = "8443")
+ protected int httpsPort;
@Parameter(property = "tomee-embedded-plugin.ajp", defaultValue = "8009")
- private int ajpPort = 8009;
+ protected int ajpPort = 8009;
@Parameter(property = "tomee-embedded-plugin.stop", defaultValue = "8005")
- private int stopPort;
+ protected int stopPort;
@Parameter(property = "tomee-embedded-plugin.host", defaultValue = "localhost")
- private String host;
+ protected String host;
@Parameter(property = "tomee-embedded-plugin.lib", defaultValue = "${project.build.directory}/apache-tomee-embedded")
protected String dir;
+ @Parameter(property = "tomee-embedded-plugin.keystoreFile")
+ protected String keystoreFile;
+
+ @Parameter(property = "tomee-embedded-plugin.keystorePass")
+ protected String keystorePass;
+
+ @Parameter(property = "tomee-embedded-plugin.keystoreType", defaultValue = "JKS")
+ protected String keystoreType;
+
+ @Parameter(property = "tomee-embedded-plugin.clientAuth")
+ protected String clientAuth;
+
+ @Parameter(property = "tomee-embedded-plugin.keyAlias")
+ protected String keyAlias;
+
+ @Parameter(property = "tomee-embedded-plugin.sslProtocol")
+ protected String sslProtocol;
+
@Parameter
- private File serverXml;
+ protected File serverXml;
+
+ @Parameter(property = "tomee-embedded-plugin.ssl", defaultValue = "false")
+ protected boolean ssl;
+
+ @Parameter(property = "tomee-embedded-plugin.quickSession", defaultValue = "true")
+ protected boolean quickSession;
+
+ @Parameter(property = "tomee-embedded-plugin.skipHttp", defaultValue = "false")
+ protected boolean skipHttp;
+
+ @Parameter(property = "tomee-embedded-plugin.classpathAsWar", defaultValue = "false")
+ protected boolean classpathAsWar;
+
+ @Parameter(property = "tomee-embedded-plugin.useProjectClasspath", defaultValue = "true")
+ protected boolean useProjectClasspath;
+
+ @Parameter(property = "tomee-embedded-plugin.modules", defaultValue = "${project.build.outputDirectory}")
+ protected List<File> modules;
+
+ @Parameter(property = "tomee-embedded-plugin.docBase", defaultValue = "${project.basedir}/src/main/webapp")
+ protected File docBase;
+
+ @Parameter(property = "tomee-embedded-plugin.context")
+ protected String context;
+
+ @Parameter // don't call it properties to avoid to break getConfig()
+ protected Map<String, String> containerProperties;
+
+ @Parameter(defaultValue = "${project}", readonly = true, required = true)
+ private MavenProject project;
@Override
public void execute() throws MojoExecutionException, MojoFailureException {
- if ("pom".equals(packaging)) {
+ if (!classpathAsWar && "pom".equals(packaging)) {
getLog().warn("this project is a pom, it is not deployable");
return;
}
- final CountDownLatch latch = new CountDownLatch(1);
+ final ClassLoader loader = Thread.currentThread().getContextClassLoader();
+ final String logFactory = System.getProperty("openejb.log.factory");
+ MavenLogStreamFactory.setLogger(getLog());
System.setProperty("openejb.log.factory", "org.apache.openejb.maven.util.MavenLogStreamFactory");
final Container container = new Container();
final Configuration config = getConfig();
container.setup(config);
- try {
- container.start();
- Runtime.getRuntime().addShutdownHook(new Thread() {
- @Override
- public void run() {
+ final Thread hook = new Thread() {
+ @Override
+ public void run() {
+ if (container.getTomcat() != null && container.getTomcat().getServer().getState() != LifecycleState.DESTROYED) {
try {
- container.undeploy(warFile.getAbsolutePath());
+ if (!classpathAsWar) {
+ container.undeploy(warFile.getAbsolutePath());
+ }
container.stop();
- } catch (Exception e) {
+ } catch (final Exception e) {
getLog().error("can't stop TomEE", e);
- } finally {
- latch.countDown();
}
}
- });
+ }
+ };
- container.deploy(warFile.getName(), warFile);
+ try {
+ container.start();
+ SystemInstance.get().setComponent(ParentClassLoaderFinder.class, new ProvidedClassLoaderFinder(loader));
+
+ Runtime.getRuntime().addShutdownHook(hook);
+
+ if (!classpathAsWar) {
+ if (context != null) {
+ getLog().warn("Context will be ignored since not using classpathAsWar");
+ }
+ container.deploy(warFile.getName(), warFile);
+ } else {
+ if (useProjectClasspath) {
+ Thread.currentThread().setContextClassLoader(createClassLoader(loader));
+ }
+ container.deployClasspathAsWebApp(context, docBase); // null is handled properly so no issue here
+ }
getLog().info("TomEE embedded started on " + config.getHost() + ":" + config.getHttpPort());
} catch (Exception e) {
@@ -97,17 +181,55 @@ public class TomEEEmbeddedMojo extends A
}
try {
- latch.await();
- } catch (Exception e) {
+ String line;
+ final Scanner scanner = new Scanner(System.in);
+ while ((line = scanner.nextLine()) != null) {
+ switch (line.trim()) {
+ case "exit":
+ case "quit":
+ Runtime.getRuntime().removeShutdownHook(hook);
+ container.close();
+ return;
+ }
+ }
+ } catch (final Exception e) {
Thread.interrupted();
} finally {
- System.clearProperty("openejb.log.factory");
+ if (logFactory == null) {
+ System.clearProperty("openejb.log.factory");
+ } else {
+ System.setProperty("openejb.log.factory", logFactory);
+ }
+ Thread.currentThread().setContextClassLoader(loader);
+ }
+ }
+
+ private ClassLoader createClassLoader(final ClassLoader parent) {
+ final List<URL> urls = new ArrayList<>();
+ for (final Artifact artifact : (Set<Artifact>) project.getArtifacts()) {
+ try {
+ urls.add(artifact.getFile().toURI().toURL());
+ } catch (final MalformedURLException e) {
+ getLog().warn("can't use artifact " + artifact.toString());
+ }
}
+ for (final File file : modules) {
+ if (file.exists()) {
+ try {
+ urls.add(file.toURI().toURL());
+ } catch (final MalformedURLException e) {
+ getLog().warn("can't use path " + file.getAbsolutePath());
+ }
+ } else {
+ getLog().warn("can't find " + file.getAbsolutePath());
+ }
+ }
+ return new URLClassLoader(urls.toArray(new URL[urls.size()]), parent);
}
private Configuration getConfig() { // lazy way but it works fine
final Configuration config = new Configuration();
- for (Field field : getClass().getDeclaredFields()) {
+ for (final Field field : getClass().getDeclaredFields()) {
try {
final Field configField = Configuration.class.getDeclaredField(field.getName());
field.setAccessible(true);
@@ -116,15 +238,20 @@ public class TomEEEmbeddedMojo extends A
final Object value = field.get(this);
if (value != null) {
configField.set(config, value);
- getLog().info("using " + field.getName() + " = " + value);
+ getLog().debug("using " + field.getName() + " = " + value);
}
- } catch (NoSuchFieldException nsfe) {
+ } catch (final NoSuchFieldException nsfe) {
// ignored
- } catch (Exception e) {
+ } catch (final Exception e) {
getLog().warn("can't initialize attribute " + field.getName());
}
}
+ if (containerProperties != null) {
+ final Properties props = new Properties();
+ props.putAll(containerProperties);
+ config.setProperties(props);
+ }
return config;
}
}
Added: tomee/tomee/trunk/maven/tomee-embedded-maven-plugin/src/test/java/org/apache/openejb/maven/plugins/TomEEEmbeddedMojoTest.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/maven/tomee-embedded-maven-plugin/src/test/java/org/apache/openejb/maven/plugins/TomEEEmbeddedMojoTest.java?rev=1629050&view=auto
==============================================================================
--- tomee/tomee/trunk/maven/tomee-embedded-maven-plugin/src/test/java/org/apache/openejb/maven/plugins/TomEEEmbeddedMojoTest.java (added)
+++ tomee/tomee/trunk/maven/tomee-embedded-maven-plugin/src/test/java/org/apache/openejb/maven/plugins/TomEEEmbeddedMojoTest.java Thu Oct 2 19:24:53 2014
@@ -0,0 +1,114 @@
+/*
+ * 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.maven.plugins;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugin.logging.SystemStreamLog;
+import org.apache.openejb.config.DeploymentFilterable;
+import org.apache.openejb.loader.IO;
+import org.apache.openejb.util.NetworkUtil;
+import org.junit.Test;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicReference;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+
+public class TomEEEmbeddedMojoTest {
+ @Test
+ public void run() throws MojoFailureException, MojoExecutionException, IOException {
+ final CountDownLatch started = new CountDownLatch(1);
+ final TomEEEmbeddedMojo mojo = new TomEEEmbeddedMojo();
+ mojo.classpathAsWar = true;
+ mojo.httpPort = NetworkUtil.getNextAvailablePort();
+ mojo.ssl = false;
+ mojo.containerProperties = new HashMap<>();
+ mojo.containerProperties.put(DeploymentFilterable.CLASSPATH_INCLUDE, ".*tomee-embedded-maven-plugin.*");
+ mojo.containerProperties.put("openejb.additional.include", "tomee-embedded-maven-plugin");
+ mojo.setLog(new SystemStreamLog() { // not the best solution...
+ @Override
+ public void info(final CharSequence charSequence) {
+ final String string = charSequence.toString();
+ if (string.startsWith("TomEE embedded started on") || string.equals("can't start TomEE")) {
+ started.countDown();
+ }
+ super.info(charSequence);
+ }
+ });
+
+ final InputStream originalIn = System.in;
+ final ByteArrayInputStream newIn = new ByteArrayInputStream("exit".getBytes());
+ final CountDownLatch sendExitLatch = new CountDownLatch(1);
+ final CountDownLatch stopped = new CountDownLatch(1);
+ System.setIn(new InputStream() {
+ @Override
+ public int read() throws IOException {
+ try {
+ sendExitLatch.await();
+ } catch (final InterruptedException e) {
+ Thread.interrupted();
+ }
+ return newIn.read();
+ }
+ });
+
+ final AtomicReference<Exception> error = new AtomicReference<>();
+ final Thread mojoThread = new Thread() {
+ {
+ setName("Mojo-Starter");
+ }
+
+ @Override
+ public void run() {
+ try {
+ mojo.execute();
+ } catch (final Exception e) {
+ error.set(e);
+ } finally {
+ stopped.countDown();
+ }
+ }
+ };
+ mojoThread.start();
+ try {
+ try {
+ started.await(10, TimeUnit.MINUTES);
+ } catch (final InterruptedException e) {
+ Thread.interrupted();
+ }
+ assertNull("all started fine", error.get());
+ assertEquals("ok", IO.slurp(new URL("http://localhost:" + mojo.httpPort + "/endpoint/")).trim());
+
+ sendExitLatch.countDown();
+ try {
+ stopped.await(5, TimeUnit.MINUTES);
+ } catch (final InterruptedException e) {
+ Thread.interrupted();
+ }
+ } finally {
+ System.setIn(originalIn);
+ }
+ }
+}
Added: tomee/tomee/trunk/maven/tomee-embedded-maven-plugin/src/test/java/org/superbiz/Endpoint.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/maven/tomee-embedded-maven-plugin/src/test/java/org/superbiz/Endpoint.java?rev=1629050&view=auto
==============================================================================
--- tomee/tomee/trunk/maven/tomee-embedded-maven-plugin/src/test/java/org/superbiz/Endpoint.java (added)
+++ tomee/tomee/trunk/maven/tomee-embedded-maven-plugin/src/test/java/org/superbiz/Endpoint.java Thu Oct 2 19:24:53 2014
@@ -0,0 +1,28 @@
+/*
+ * 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.superbiz;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+
+@Path("endpoint")
+public class Endpoint {
+ @GET
+ public String get() {
+ return "ok";
+ }
+}
Added: tomee/tomee/trunk/maven/tomee-embedded-maven-plugin/src/test/resources/META-INF/beans.xml
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/maven/tomee-embedded-maven-plugin/src/test/resources/META-INF/beans.xml?rev=1629050&view=auto
==============================================================================
--- tomee/tomee/trunk/maven/tomee-embedded-maven-plugin/src/test/resources/META-INF/beans.xml (added)
+++ tomee/tomee/trunk/maven/tomee-embedded-maven-plugin/src/test/resources/META-INF/beans.xml Thu Oct 2 19:24:53 2014
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<!--
+
+ 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.
+-->
+<beans />
Modified: tomee/tomee/trunk/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Container.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Container.java?rev=1629050&r1=1629049&r2=1629050&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Container.java (original)
+++ tomee/tomee/trunk/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Container.java Thu Oct 2 19:24:53 2014
@@ -127,10 +127,10 @@ public class Container implements AutoCl
}
public Container deployClasspathAsWebApp() {
- return deployClasspathAsWebApp("");
+ return deployClasspathAsWebApp("", null);
}
- public Container deployClasspathAsWebApp(final String context, final String... dependencies) {
+ public Container deployClasspathAsWebApp(final String context, final File docBase, final String... dependencies) {
final List<URL> jarList = DeploymentsResolver.loadFromClasspath(Thread.currentThread().getContextClassLoader());
if (dependencies != null) {
for (final String dep : dependencies) {
@@ -145,10 +145,10 @@ public class Container implements AutoCl
}
}
- return deployPathsAsWebapp(context, jarList);
+ return deployPathsAsWebapp(context, jarList, docBase);
}
- public Container deployPathsAsWebapp(final String context, final List<URL> jarList) {
+ public Container deployPathsAsWebapp(final String context, final List<URL> jarList, final File docBase) {
final ClassLoader loader = Thread.currentThread().getContextClassLoader();
final SystemInstance systemInstance = SystemInstance.get();
@@ -157,7 +157,10 @@ public class Container implements AutoCl
contextRoot = "/" + context;
}
- final WebModule webModule = new WebModule(new WebApp(), contextRoot, loader, fakeRootDir().getAbsolutePath(), contextRoot);
+ final WebModule webModule = new WebModule(new WebApp(), contextRoot, loader, docBase == null ? fakeRootDir().getAbsolutePath() : docBase.getAbsolutePath(), contextRoot);
+ if (docBase == null) {
+ webModule.getProperties().put("fakeJarLocation", "true");
+ }
webModule.setUrls(jarList);
webModule.setAddedUrls(Collections.<URL>emptyList());
webModule.setRarUrls(Collections.<URL>emptyList());
@@ -174,7 +177,8 @@ public class Container implements AutoCl
app.setStandloneWebModule();
try {
DeploymentLoader.addWebModule(webModule, app);
- } catch (final OpenEJBException e) {
+ DeploymentLoader.addWebModuleDescriptors(new File(webModule.getJarLocation()).toURI().toURL(), webModule, app);
+ } catch (final Exception e) {
throw new IllegalStateException(e);
}
@@ -184,7 +188,7 @@ public class Container implements AutoCl
try {
final AppInfo appInfo = configurationFactory.configureApplication(app);
- systemInstance.getComponent(Assembler.class).createApplication(appInfo);
+ systemInstance.getComponent(Assembler.class).createApplication(appInfo, loader /* don't recreate a classloader */);
} catch (final Exception e) {
throw new IllegalStateException(e);
}
@@ -193,7 +197,7 @@ public class Container implements AutoCl
}
private static void addCallersAsEjbModule(final ClassLoader loader, final AppModule app) {
- final Set<String> callers = NewLoaderLogic.callers(Filters.classes(Container.class.getName()));
+ final Set<String> callers = NewLoaderLogic.callers(Filters.classes(Container.class.getName(), "org.apache.openejb.maven.plugins.TomEEEmbeddedMojo"));
if (callers.isEmpty()) {
return;
}
Modified: tomee/tomee/trunk/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Main.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Main.java?rev=1629050&r1=1629049&r2=1629050&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Main.java (original)
+++ tomee/tomee/trunk/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Main.java Thu Oct 2 19:24:53 2014
@@ -33,6 +33,7 @@ public class Main {
public static final String PATH = "path";
public static final String CONTEXT = "context";
public static final String DIRECTORY = "directory";
+ public static final String DOC_BASE = "doc-base";
public static final String AS_WAR = "as-war";
public static void main(final String[] args) {
@@ -78,7 +79,8 @@ public class Main {
}
}
if (line.hasOption(AS_WAR)) {
- container.deployClasspathAsWebApp(contexts == null || i == contexts.length ? "" : contexts[i]);
+ container.deployClasspathAsWebApp(contexts == null || i == contexts.length ? "" : contexts[i],
+ line.hasOption(DOC_BASE) ? new File(line.getOptionValue(DOC_BASE)) : null);
}
Runtime.getRuntime().addShutdownHook(new Thread() {
Modified: tomee/tomee/trunk/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/internal/StandardContextCustomizer.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/internal/StandardContextCustomizer.java?rev=1629050&r1=1629049&r2=1629050&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/internal/StandardContextCustomizer.java (original)
+++ tomee/tomee/trunk/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/internal/StandardContextCustomizer.java Thu Oct 2 19:24:53 2014
@@ -56,6 +56,9 @@ public class StandardContextCustomizer {
case Lifecycle.BEFORE_START_EVENT:
final WebResourceRoot resources = new StandardRoot(context);
context.setResources(resources);
+ if (!module.getProperties().containsKey("fakeJarLocation")) {
+ context.setDocBase(module.getJarLocation());
+ }
// move last fake folder, tomcat is broken without it so we can't remove it
final List allResources = List.class.cast(Reflections.get(resources, "allResources"));
@@ -67,9 +70,11 @@ public class StandardContextCustomizer {
final String absolutePath = file.getAbsolutePath();
if (file.isDirectory()) {
resources.createWebResourceSet(WebResourceRoot.ResourceSetType.CLASSES_JAR, "/WEB-INF/classes", absolutePath, "", "/");
- resources.createWebResourceSet(WebResourceRoot.ResourceSetType.RESOURCE_JAR, "/", absolutePath, "", "/META-INF/resources");
+ if (new File(file, "META-INF/resources").exists()) {
+ resources.createWebResourceSet(WebResourceRoot.ResourceSetType.RESOURCE_JAR, "/", absolutePath, "", "/META-INF/resources");
+ }
} else {
- resources.createWebResourceSet(WebResourceRoot.ResourceSetType.CLASSES_JAR, "/WEB-INF/lib", absolutePath, "", "/");
+ resources.createWebResourceSet(WebResourceRoot.ResourceSetType.CLASSES_JAR, "/WEB-INF/lib", absolutePath, null, "/");
resources.createWebResourceSet(WebResourceRoot.ResourceSetType.RESOURCE_JAR, "/", url, "/META-INF/resources");
}
}
Modified: tomee/tomee/trunk/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/ClasspathAsWebappTest.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/ClasspathAsWebappTest.java?rev=1629050&r1=1629049&r2=1629050&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/ClasspathAsWebappTest.java (original)
+++ tomee/tomee/trunk/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/ClasspathAsWebappTest.java Thu Oct 2 19:24:53 2014
@@ -73,7 +73,7 @@ public class ClasspathAsWebappTest {
new Configuration()
.http(NetworkUtil.getNextAvailablePort())
.property("openejb.additional.include", "tomee-"))
- .deployPathsAsWebapp("", asList(JarLocation.jarLocation(MyInitializer.class).toURI().toURL()))
+ .deployPathsAsWebapp("", asList(JarLocation.jarLocation(MyInitializer.class).toURI().toURL()), null)
.inject(this)) {
// Servlet (initializer, servlet)