Any objection to remove the check on ClassLoaderEnricher == null?
if it is null it would be great to crash the container since half of our features will be broken Romain Manni-Bucau Twitter: @rmannibucau Blog: http://rmannibucau.wordpress.com/ LinkedIn: http://fr.linkedin.com/in/rmannibucau Github: https://github.com/rmannibucau ---------- Forwarded message ---------- From: <[email protected]> Date: 2014-09-18 17:11 GMT+02:00 Subject: svn commit: r1626003 - in /tomee/tomee/trunk/tomee: tomee-catalina/src/main/java/org/apache/tomee/catalina/ tomee-embedded/ tomee-embedded/src/main/java/org/apache/tomee/embedded/ tomee-embedded/src/test/java/org/apache/tomee/embedded/ tomee-loader/ to... To: [email protected] Author: andygumbrecht Date: Thu Sep 18 15:11:51 2014 New Revision: 1626003 URL: http://svn.apache.org/r1626003 Log: Check for nulls. Start Container with configuration Use target directory if found. Fix race condition on Container stop. Close connector explicitly if available. Shutdown container with try Load tomcat-juli 'after' tomee-juli to preserve maven classloader Close Container in tests. Modified: tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEClassLoaderEnricher.java tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatLoader.java tomee/tomee/trunk/tomee/tomee-embedded/pom.xml 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/EmbeddedTomEEContainer.java tomee/tomee/trunk/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/EmbeddedTomEEContainerTest.java tomee/tomee/trunk/tomee/tomee-loader/pom.xml tomee/tomee/trunk/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/LoaderServlet.java Modified: tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEClassLoaderEnricher.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEClassLoaderEnricher.java?rev=1626003&r1=1626002&r2=1626003&view=diff ============================================================================== --- tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEClassLoaderEnricher.java (original) +++ tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEClassLoaderEnricher.java Thu Sep 18 15:11:51 2014 @@ -116,7 +116,13 @@ public final class TomEEClassLoaderEnric } // from config - urls.addAll(Arrays.asList(SystemInstance.get().getComponent(ClassLoaderEnricher.class).applicationEnrichment())); + final ClassLoaderEnricher classLoaderEnricher = SystemInstance.get().getComponent(ClassLoaderEnricher.class); + if (null != classLoaderEnricher) { + final URL[] enrichment = classLoaderEnricher.applicationEnrichment(); + if (null != enrichment && enrichment.length > 0) { + urls.addAll(Arrays.asList(enrichment)); + } + } return urls.toArray(new URL[urls.size()]); } Modified: tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatLoader.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatLoader.java?rev=1626003&r1=1626002&r2=1626003&view=diff ============================================================================== --- tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatLoader.java (original) +++ tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatLoader.java Thu Sep 18 15:11:51 2014 @@ -105,8 +105,10 @@ public class TomcatLoader implements Loa */ private static ServiceManager manager; - /** other services */ - private static final List<ServerService> services = new ArrayList<ServerService> (); + /** + * other services + */ + private static final List<ServerService> services = new ArrayList<ServerService>(); /** * this method will be split in two to be able to use SystemInstance in between both invocations @@ -236,8 +238,12 @@ public class TomcatLoader implements Loa SystemInstance.get().setComponent(WebAppEnricher.class, classLoaderEnricher); // add common lib even in ear "lib" part (if the ear provides myfaces for instance) - for (final URL url : classLoaderEnricher.enrichment(null)) { // we rely on the fact we know what the impl does with null but that's fine - SystemInstance.get().getComponent(ClassLoaderEnricher.class).addUrl(url); + + final ClassLoaderEnricher enricher = SystemInstance.get().getComponent(ClassLoaderEnricher.class); + if (null != enricher) { + for (final URL url : classLoaderEnricher.enrichment(null)) { // we rely on the fact we know what the impl does with null but that's fine + enricher.addUrl(url); + } } // optional services @@ -255,7 +261,7 @@ public class TomcatLoader implements Loa final Properties ejbServerProps = new Properties(); ejbServerProps.putAll(properties); - for (final String prop : new String[] { "serializer", "gzip" }) { // ensure -Dejbd.xxx are read + for (final String prop : new String[]{"serializer", "gzip"}) { // ensure -Dejbd.xxx are read final String value = SystemInstance.get().getProperty("ejbd." + prop); if (value != null) { ejbServerProps.put(prop, value); Modified: tomee/tomee/trunk/tomee/tomee-embedded/pom.xml URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-embedded/pom.xml?rev=1626003&r1=1626002&r2=1626003&view=diff ============================================================================== --- tomee/tomee/trunk/tomee/tomee-embedded/pom.xml (original) +++ tomee/tomee/trunk/tomee/tomee-embedded/pom.xml Thu Sep 18 15:11:51 2014 @@ -80,10 +80,6 @@ <version>${project.version}</version> <exclusions> <exclusion> - <artifactId>tomcat-juli</artifactId> - <groupId>org.apache.tomcat</groupId> - </exclusion> - <exclusion> <artifactId>javaee-api</artifactId> <groupId>org.apache.openejb</groupId> </exclusion> 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=1626003&r1=1626002&r2=1626003&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 Sep 18 15:11:51 2014 @@ -65,6 +65,7 @@ import java.io.Writer; import java.util.HashMap; import java.util.Map; import java.util.Properties; +import java.util.concurrent.CountDownLatch; /** * @version $Rev$ $Date$ @@ -146,7 +147,7 @@ public class Container implements AutoCl } public void start() throws Exception { - if (base == null) { + if (base == null || !base.exists()) { setup(configuration); } @@ -257,7 +258,7 @@ public class Container implements AutoCl if (configuration.getProperties() != null) { properties.putAll(configuration.getProperties()); } - if (properties.getProperty("openejb.system.apps") == null) { // will make startup faster and it is rarely useful for embedded case + if (properties.getProperty("openejb.system.apps") == null) { // will make startup faster and it is rarely useful for embedded case properties.setProperty("openejb.system.apps", "false"); } @@ -322,8 +323,9 @@ public class Container implements AutoCl } try { - file = File.createTempFile("apache-tomee", "-home"); - } catch (final Throwable e) { + final File target = new File("target"); + file = File.createTempFile("apache-tomee", "-home", target.exists() ? target : null); + } catch (final Exception e) { final File tmp = new File("tmp"); if (!tmp.exists() && !tmp.mkdirs()) { @@ -341,10 +343,28 @@ public class Container implements AutoCl } public void stop() throws Exception { - tomcat.stop(); - tomcat.destroy(); - deleteTree(base); - base = null; + + final Connector connector = tomcat.getConnector(); + if (null != connector) { + connector.stop(); + } + + try { + tomcat.stop(); + } catch (final LifecycleException e) { + e.printStackTrace(); + } + try { + tomcat.destroy(); + } catch (final LifecycleException e) { + e.printStackTrace(); + } + try { + deleteTree(base); + } catch (final Exception e) { + e.printStackTrace(); + } + OpenEJB.destroy(); // don't set base = null here to be able to use base after to clean up from outside of this class } @@ -509,8 +529,36 @@ public class Container implements AutoCl } @Override - public void close() throws Exception { - stop(); + public void close() throws IOException { + final CountDownLatch end = new CountDownLatch(1); + final Container container = Container.this; + new Thread() { + { + setName("tomee-embedded-await-" + hashCode()); + } + + @Override + public void run() { + try { + container.await(); + end.countDown(); + } catch (final Exception e) { + throw new IllegalStateException(e); + } + } + }.start(); + + try { + stop(); + } catch (final Exception e) { + throw new IOException("Failed to stop container", e); + } + + try { + end.await(); + } catch (final InterruptedException e) { + Thread.interrupted(); + } } public org.apache.catalina.Context addContext(final String context, final String path) { Modified: tomee/tomee/trunk/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/EmbeddedTomEEContainer.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/EmbeddedTomEEContainer.java?rev=1626003&r1=1626002&r2=1626003&view=diff ============================================================================== --- tomee/tomee/trunk/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/EmbeddedTomEEContainer.java (original) +++ tomee/tomee/trunk/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/EmbeddedTomEEContainer.java Thu Sep 18 15:11:51 2014 @@ -38,14 +38,15 @@ import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.Map; +import java.util.concurrent.atomic.AtomicReference; public final class EmbeddedTomEEContainer extends EJBContainer { public static final String TOMEE_EJBCONTAINER_HTTP_PORT = "tomee.ejbcontainer.http.port"; - private static EmbeddedTomEEContainer tomEEContainer; + private static final AtomicReference<EmbeddedTomEEContainer> tomEEContainer = new AtomicReference<EmbeddedTomEEContainer>(); private static final List<String> CONTAINER_NAMES = Arrays.asList(EmbeddedTomEEContainer.class.getName(), "tomee-embedded", "embedded-tomee"); - private Container container = new Container(); - private Collection<String> deployedIds = new ArrayList<String>(); + private final Container container = new Container(); + private final Collection<String> deployedIds = new ArrayList<String>(); private EmbeddedTomEEContainer() { // no-op @@ -58,25 +59,29 @@ public final class EmbeddedTomEEContaine @Override public void close() { final Collection<Exception> errors = new ArrayList<Exception>(); - for (final String id : deployedIds) { - if (tomEEContainer.container.getAppContexts(id) != null) { - try { - tomEEContainer.container.undeploy(id); - } catch (final Exception ex) { - Logger.getInstance(LogCategory.OPENEJB, EmbeddedTomEEContainer.class).error(ex.getMessage(), ex); - errors.add(ex); + final EmbeddedTomEEContainer etc = tomEEContainer.get(); + if (null != etc) { + for (final String id : deployedIds) { + if (etc.container.getAppContexts(id) != null) { + try { + etc.container.undeploy(id); + } catch (final Exception ex) { + Logger.getInstance(LogCategory.OPENEJB, EmbeddedTomEEContainer.class).error(ex.getMessage(), ex); + errors.add(ex); + } } } - } - deployedIds.clear(); - try { - tomEEContainer.container.close(); - } catch (final Exception ex) { - errors.add(ex); - Logger.getInstance(LogCategory.OPENEJB, EmbeddedTomEEContainer.class).error(ex.getMessage(), ex); + + try { + etc.container.close(); + } catch (final Exception ex) { + errors.add(ex); + Logger.getInstance(LogCategory.OPENEJB, EmbeddedTomEEContainer.class).error(ex.getMessage(), ex); + } } - tomEEContainer = null; + deployedIds.clear(); + tomEEContainer.set(null); if (!errors.isEmpty()) { throw Exceptions.newEJBException(new TomEERuntimeException(errors.toString())); @@ -85,7 +90,7 @@ public final class EmbeddedTomEEContaine @Override public Context getContext() { - return tomEEContainer.container.getJndiContext(); + return tomEEContainer.get().container.getJndiContext(); } public static class EmbeddedTomEEContainerProvider implements EJBContainerProvider { @@ -100,20 +105,22 @@ public final class EmbeddedTomEEContaine } if ((provider == null && ejbContainerProviders > 1) - || (!EmbeddedTomEEContainer.class.equals(provider) - && !CONTAINER_NAMES.contains(String.valueOf(provider)))) { + || (!EmbeddedTomEEContainer.class.equals(provider) + && !CONTAINER_NAMES.contains(String.valueOf(provider)))) { return null; } - if (tomEEContainer != null) { - return tomEEContainer; + EmbeddedTomEEContainer etc = tomEEContainer.get(); + if (etc != null) { + return etc; } final String appId = (String) properties.get(EJBContainer.APP_NAME); final Object modules = properties.get(EJBContainer.MODULES); - - tomEEContainer = new EmbeddedTomEEContainer(); + etc = new EmbeddedTomEEContainer(); + tomEEContainer.set(etc); final Configuration configuration = new Configuration(); + if (properties.containsKey(TOMEE_EJBCONTAINER_HTTP_PORT)) { int port; final Object portValue = properties.get(TOMEE_EJBCONTAINER_HTTP_PORT); @@ -130,51 +137,59 @@ public final class EmbeddedTomEEContaine configuration.setHttpPort(port); } System.setProperty(TOMEE_EJBCONTAINER_HTTP_PORT, Integer.toString(configuration.getHttpPort())); - tomEEContainer.container.setup(configuration); + etc.container.setup(configuration); try { - tomEEContainer.container.start(); + etc.container.start(); if (modules instanceof File) { - tomEEContainer.deployedIds.add(tomEEContainer.container.deploy(appId, ((File) modules), appId != null).getId()); + etc.deployedIds.add(etc.container.deploy(appId, ((File) modules), appId != null).getId()); } else if (modules instanceof String) { - tomEEContainer.deployedIds.add(tomEEContainer.container.deploy(appId, new File((String) modules), appId != null).getId()); + etc.deployedIds.add(etc.container.deploy(appId, new File((String) modules), appId != null).getId()); } else if (modules instanceof String[]) { for (final String path : (String[]) modules) { - tomEEContainer.deployedIds.add(tomEEContainer.container.deploy(appId, new File(path), appId != null).getId()); + etc.deployedIds.add(etc.container.deploy(appId, new File(path), appId != null).getId()); } } else if (modules instanceof File[]) { for (final File file : (File[]) modules) { - tomEEContainer.deployedIds.add(tomEEContainer.container.deploy(appId, file, appId != null).getId()); + etc.deployedIds.add(etc.container.deploy(appId, file, appId != null).getId()); } } else { SystemInstance.get().getProperties().putAll(properties); - final Collection<File> files = tomEEContainer.container.getConfigurationFactory().getModulesFromClassPath(null, Thread.currentThread().getContextClassLoader()); + final Collection<File> files = etc.container.getConfigurationFactory().getModulesFromClassPath(null, Thread.currentThread().getContextClassLoader()); if (files.size() == 0) { try { - tomEEContainer.close(); + etc.close(); } catch (final Exception e) { // no-op } - tomEEContainer = null; + tomEEContainer.set(null); throw Exceptions.newNoModulesFoundException(); } for (final File file : files) { - tomEEContainer.deployedIds.add(tomEEContainer.container.deploy(appId, file, appId != null).getId()); + etc.deployedIds.add(etc.container.deploy(appId, file, appId != null).getId()); } } - return tomEEContainer; + return etc; } catch (final OpenEJBException | MalformedURLException e) { - tomEEContainer.close(); + try { + etc.close(); + } catch (final Exception e1) { + //Ignore + } throw new EJBException(e); } catch (final ValidationException ve) { - if (tomEEContainer != null) { - tomEEContainer.close(); + try { + etc.close(); + } catch (final Exception e1) { + //Ignore } throw ve; } catch (final Exception e) { - if (tomEEContainer != null) { - tomEEContainer.close(); + try { + etc.close(); + } catch (final Exception e1) { + //Ignore } if (e instanceof EJBException) { throw (EJBException) e; Modified: tomee/tomee/trunk/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/EmbeddedTomEEContainerTest.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/EmbeddedTomEEContainerTest.java?rev=1626003&r1=1626002&r2=1626003&view=diff ============================================================================== --- tomee/tomee/trunk/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/EmbeddedTomEEContainerTest.java (original) +++ tomee/tomee/trunk/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/EmbeddedTomEEContainerTest.java Thu Sep 18 15:11:51 2014 @@ -20,8 +20,6 @@ package org.apache.tomee.embedded; import org.apache.commons.io.FileUtils; import org.apache.openejb.config.DeploymentsResolver; import org.apache.openejb.loader.IO; -import org.apache.openejb.loader.SystemInstance; -import org.apache.openejb.spi.ContainerSystem; import org.junit.Test; import javax.ejb.embeddable.EJBContainer; @@ -37,20 +35,28 @@ import static org.junit.Assert.assertNot public class EmbeddedTomEEContainerTest { @Test public void containerTest() throws Exception { + final File war = createWar(); final Properties p = new Properties(); p.setProperty(EJBContainer.APP_NAME, "test"); p.setProperty(EJBContainer.PROVIDER, EmbeddedTomEEContainer.class.getName()); p.put(EJBContainer.MODULES, war.getAbsolutePath()); p.setProperty(EmbeddedTomEEContainer.TOMEE_EJBCONTAINER_HTTP_PORT, "-1"); + + EJBContainer container = null; try { - final EJBContainer container = EJBContainer.createEJBContainer(p); + container = EJBContainer.createEJBContainer(p); assertNotNull(container); assertNotNull(container.getContext()); final URL url = new URL("http://127.0.0.1:" + System.getProperty(EmbeddedTomEEContainer.TOMEE_EJBCONTAINER_HTTP_PORT) + "/test/index.html"); - assertEquals("true", IO.readProperties(url).getProperty("ok")); - container.close(); + assertEquals("true", getOk(url, 2)); + } finally { + + if (container != null) { + container.close(); + } + try { FileUtils.forceDelete(war); } catch (final IOException e) { @@ -59,18 +65,40 @@ public class EmbeddedTomEEContainerTest } } + private String getOk(final URL url, final int tries) throws Exception { + try { + return IO.readProperties(url).getProperty("ok"); + } catch (final IOException e) { + if (tries > 0) { + Thread.sleep(1000); + return getOk(url, tries - 1); + } else { + throw e; + } + } + } + @Test public void classpath() throws Exception { + final Properties p = new Properties(); p.setProperty(EJBContainer.PROVIDER, EmbeddedTomEEContainer.class.getName()); p.setProperty(DeploymentsResolver.CLASSPATH_INCLUDE, ".*tomee-embedded.*"); p.setProperty(EmbeddedTomEEContainer.TOMEE_EJBCONTAINER_HTTP_PORT, "-1"); - final EJBContainer container = EJBContainer.createEJBContainer(p); - assertNotNull(container); - final ABean bean = ABean.class.cast(container.getContext().lookup("java:global/tomee-embedded/ABean")); - assertNotNull(bean); - assertEquals("ok", bean.embedded()); - container.close(); + + EJBContainer container = null; + try { + container = EJBContainer.createEJBContainer(p); + assertNotNull(container); + assertNotNull(container.getContext()); + final ABean bean = ABean.class.cast(container.getContext().lookup("java:global/tomee-embedded/ABean")); + assertNotNull(bean); + assertEquals("ok", bean.embedded()); + } finally { + if (container != null) { + container.close(); + } + } } private File createWar() throws IOException { Modified: tomee/tomee/trunk/tomee/tomee-loader/pom.xml URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-loader/pom.xml?rev=1626003&r1=1626002&r2=1626003&view=diff ============================================================================== --- tomee/tomee/trunk/tomee/tomee-loader/pom.xml (original) +++ tomee/tomee/trunk/tomee/tomee-loader/pom.xml Thu Sep 18 15:11:51 2014 @@ -42,6 +42,25 @@ <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-catalina</artifactId> <scope>provided</scope> + <exclusions> + <exclusion> + <groupId>org.apache.tomcat</groupId> + <artifactId>tomcat-juli</artifactId> + </exclusion> + </exclusions> + </dependency> + <!--The order of the next two deps is important--> + <dependency> + <groupId>org.apache.openejb</groupId> + <artifactId>tomee-juli</artifactId> + <version>${project.version}</version> + <scope>compile</scope> + </dependency> + <dependency> + <groupId>org.apache.tomcat</groupId> + <artifactId>tomcat-juli</artifactId> + <version>${tomcat.version}</version> + <scope>compile</scope> </dependency> <dependency> <groupId>org.apache.openejb</groupId> Modified: tomee/tomee/trunk/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/LoaderServlet.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/LoaderServlet.java?rev=1626003&r1=1626002&r2=1626003&view=diff ============================================================================== --- tomee/tomee/trunk/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/LoaderServlet.java (original) +++ tomee/tomee/trunk/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/LoaderServlet.java Thu Sep 18 15:11:51 2014 @@ -16,29 +16,31 @@ */ package org.apache.tomee.loader; -import java.util.Properties; -import java.util.Enumeration; -import java.io.File; import javax.servlet.ServletConfig; -import javax.servlet.ServletException; import javax.servlet.ServletContext; +import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; +import java.io.File; +import java.util.Enumeration; +import java.util.Properties; /** * The sole purpose of this class is to call the {@link TomcatEmbedder#embed} method - * + * <p/> * This class gets the location of this webapp and assumes that it is * the tomee.war file then calls the embedder. - * - * This method of bootstrapping is mutually exclussive to the {@link OpenEJBListener} approach + * <p/> + * This method of bootstrapping is mutually exclusive to the {@link OpenEJBListener} approach */ -@Deprecated // use tomee-overlay-runner or another way to ensure you deterministicly work +@Deprecated // use tomee-overlay-runner or another way to ensure you work deterministically public class LoaderServlet extends HttpServlet { - + //Default serial version id private static final long serialVersionUID = 1L; - - /**Flag for starting embedded*/ + + /** + * Flag for starting embedded + */ private static boolean embedded; /** @@ -59,22 +61,23 @@ public class LoaderServlet extends HttpS //Gets parameters from servlet initialization parameter final Properties properties = initParamsToProperties(config); - + //Web application directory final File webappDir = new File(getWebappPath(config)); - + //Sets tomee.war property properties.setProperty("tomee.war", webappDir.getAbsolutePath()); - + //Sets source of the embedder properties.setProperty("openejb.embedder.source", getClass().getSimpleName()); //@Tomcat TomcatEmbedder.embed(properties, config.getClass().getClassLoader()); } - + /** * Retrieves all intialization parameters for this servlet and stores them in a java.util.Properties object. + * * @param config javax.servlet.ServletConfig * @return java.util.Properties */ @@ -88,10 +91,10 @@ public class LoaderServlet extends HttpS // Load in each init-param as a property final Enumeration<?> enumeration = config.getInitParameterNames(); System.out.println("OpenEJB Loader init-params:"); - if(!enumeration.hasMoreElements()) { + if (!enumeration.hasMoreElements()) { System.out.println("\tThere are no initialization parameters."); } - + while (enumeration.hasMoreElements()) { final String name = (String) enumeration.nextElement(); final String value = config.getInitParameter(name); @@ -101,17 +104,17 @@ public class LoaderServlet extends HttpS return properties; } + /** * Retrieves the absolute path of where this web application is located. - * - * @param config + * + * @param config ServletConfig * @return absolute path of this webapp directory */ private String getWebappPath(final ServletConfig config) { final ServletContext ctx = config.getServletContext(); final File webInf = new File(ctx.getRealPath("/WEB-INF")); final File webapp = webInf.getParentFile(); - final String webappPath = webapp.getAbsolutePath(); - return webappPath; + return webapp.getAbsolutePath(); } }
