Author: rmannibucau Date: Mon Nov 5 06:15:47 2012 New Revision: 1405701 URL: http://svn.apache.org/viewvc?rev=1405701&view=rev Log: OPENEJB-1929 initial version of openejb-lightweight-web
Added: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/Component.java - copied, changed from r1405634, openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/Module.java openejb/trunk/openejb/server/openejb-lightweight-web/ openejb/trunk/openejb/server/openejb-lightweight-web/pom.xml openejb/trunk/openejb/server/openejb-lightweight-web/src/ openejb/trunk/openejb/server/openejb-lightweight-web/src/main/ openejb/trunk/openejb/server/openejb-lightweight-web/src/main/java/ openejb/trunk/openejb/server/openejb-lightweight-web/src/main/java/org/ openejb/trunk/openejb/server/openejb-lightweight-web/src/main/java/org/apache/ openejb/trunk/openejb/server/openejb-lightweight-web/src/main/java/org/apache/openejb/ openejb/trunk/openejb/server/openejb-lightweight-web/src/main/java/org/apache/openejb/server/ openejb/trunk/openejb/server/openejb-lightweight-web/src/main/java/org/apache/openejb/server/web/ openejb/trunk/openejb/server/openejb-lightweight-web/src/main/java/org/apache/openejb/server/web/LightweightWebAppBuilder.java openejb/trunk/openejb/server/openejb-lightweight-web/src/test/ openejb/trunk/openejb/server/openejb-lightweight-web/src/test/java/ openejb/trunk/openejb/server/openejb-lightweight-web/src/test/java/org/ openejb/trunk/openejb/server/openejb-lightweight-web/src/test/java/org/apache/ openejb/trunk/openejb/server/openejb-lightweight-web/src/test/java/org/apache/openejb/ openejb/trunk/openejb/server/openejb-lightweight-web/src/test/java/org/apache/openejb/server/ openejb/trunk/openejb/server/openejb-lightweight-web/src/test/java/org/apache/openejb/server/web/ openejb/trunk/openejb/server/openejb-lightweight-web/src/test/java/org/apache/openejb/server/web/LightweightWebAppBuilderTest.java Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/WebModule.java openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/ApplicationComposer.java openejb/trunk/openejb/server/pom.xml Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/WebModule.java URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/WebModule.java?rev=1405701&r1=1405700&r2=1405701&view=diff ============================================================================== --- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/WebModule.java (original) +++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/WebModule.java Mon Nov 5 06:15:47 2012 @@ -20,6 +20,7 @@ import java.io.File; import java.net.URI; import java.net.URL; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -194,6 +195,9 @@ public class WebModule extends Module im } public List<URL> getScannableUrls() { + if (scannableUrls == null) { + return Collections.emptyList(); + } return scannableUrls; } Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/ApplicationComposer.java URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/ApplicationComposer.java?rev=1405701&r1=1405700&r2=1405701&view=diff ============================================================================== --- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/ApplicationComposer.java (original) +++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/ApplicationComposer.java Mon Nov 5 06:15:47 2012 @@ -133,6 +133,12 @@ public class ApplicationComposer extends } } + for (FrameworkMethod method : testClass.getAnnotatedMethods(Component.class)) { + if (method.getMethod().getParameterTypes().length > 0) { + errors.add(new Exception("@Component methods shouldn't take any parameters")); + } + } + int appModules = 0; int modules = 0; @@ -257,6 +263,17 @@ public class ApplicationComposer extends } } + for (FrameworkMethod method : testClass.getAnnotatedMethods(Component.class)) { + final Object value = method.invokeExplosively(testInstance); + Class<?> key = method.getMethod().getReturnType(); + + if (!key.isInstance(value)) { // we can't do it in validate to avoid to instantiate the value twice + throw new OpenEJBRuntimeException(value + " is not an instance of " + key.getName()); + } + + SystemInstance.get().setComponent((Class<Object>) key, value); + } + Application application = null; // Invoke the @Module producer methods to build out the AppModule Copied: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/Component.java (from r1405634, openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/Module.java) URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/Component.java?p2=openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/Component.java&p1=openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/Module.java&r1=1405634&r2=1405701&rev=1405701&view=diff ============================================================================== --- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/Module.java (original) +++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/Component.java Mon Nov 5 06:15:47 2012 @@ -23,5 +23,5 @@ import java.lang.annotation.Target; @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) -public @interface Module { +public @interface Component { } Added: openejb/trunk/openejb/server/openejb-lightweight-web/pom.xml URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-lightweight-web/pom.xml?rev=1405701&view=auto ============================================================================== --- openejb/trunk/openejb/server/openejb-lightweight-web/pom.xml (added) +++ openejb/trunk/openejb/server/openejb-lightweight-web/pom.xml Mon Nov 5 06:15:47 2012 @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + 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. +--> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <parent> + <artifactId>server</artifactId> + <groupId>org.apache.openejb</groupId> + <version>4.5.1-SNAPSHOT</version> + </parent> + <modelVersion>4.0.0</modelVersion> + + <artifactId>openejb-lightweight-web</artifactId> + <name>OpenEJB :: Server :: LightWeight Web</name> + + <dependencies> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>openejb-http</artifactId> + <version>${project.version}</version> + </dependency> + + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + </dependency> + </dependencies> +</project> Added: openejb/trunk/openejb/server/openejb-lightweight-web/src/main/java/org/apache/openejb/server/web/LightweightWebAppBuilder.java URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-lightweight-web/src/main/java/org/apache/openejb/server/web/LightweightWebAppBuilder.java?rev=1405701&view=auto ============================================================================== --- openejb/trunk/openejb/server/openejb-lightweight-web/src/main/java/org/apache/openejb/server/web/LightweightWebAppBuilder.java (added) +++ openejb/trunk/openejb/server/openejb-lightweight-web/src/main/java/org/apache/openejb/server/web/LightweightWebAppBuilder.java Mon Nov 5 06:15:47 2012 @@ -0,0 +1,75 @@ +/* + * 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.server.web; + +import org.apache.openejb.AppContext; +import org.apache.openejb.Injection; +import org.apache.openejb.OpenEJBRuntimeException; +import org.apache.openejb.assembler.classic.AppInfo; +import org.apache.openejb.assembler.classic.JndiEncBuilder; +import org.apache.openejb.assembler.classic.WebAppBuilder; +import org.apache.openejb.assembler.classic.WebAppInfo; +import org.apache.openejb.core.CoreContainerSystem; +import org.apache.openejb.core.WebContext; +import org.apache.openejb.loader.SystemInstance; +import org.apache.openejb.spi.ContainerSystem; + +import javax.naming.InitialContext; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +public class LightweightWebAppBuilder implements WebAppBuilder { + @Override + public void deployWebApps(final AppInfo appInfo, final ClassLoader classLoader) throws Exception { + final CoreContainerSystem cs = (CoreContainerSystem) SystemInstance.get().getComponent(ContainerSystem.class); + final AppContext appContext = cs.getAppContext(appInfo.appId); + if (appContext == null) { + throw new OpenEJBRuntimeException("Can't find app context for " + appInfo.appId); + } + + for (WebAppInfo webAppInfo : appInfo.webApps) { + final Collection<Injection> injections = appContext.getInjections(); + + final Map<String, Object> bindings = new HashMap<String, Object>(); + bindings.putAll(appContext.getBindings()); + bindings.putAll(new JndiEncBuilder(webAppInfo.jndiEnc, injections, webAppInfo.moduleId, "Bean", null, webAppInfo.uniqueId, classLoader).buildBindings(JndiEncBuilder.JndiScope.comp)); + + final WebContext webContext = new WebContext(appContext); + webContext.setJndiEnc(new InitialContext()); + webContext.setClassLoader(classLoader); + webContext.setId(webAppInfo.moduleId); + webContext.setContextRoot(webAppInfo.contextRoot); + webContext.setBindings(bindings); + webContext.getInjections().addAll(injections); + appContext.getWebContexts().add(webContext); + cs.addWebContext(webContext); + } + } + + @Override + public void undeployWebApps(final AppInfo appInfo) throws Exception { + // no-op + } + + @Override + public Map<ClassLoader, Map<String, Set<String>>> getJsfClasses() { + return Collections.emptyMap(); // while we don't manage servlet in embedded mode we don't need it + } +} Added: openejb/trunk/openejb/server/openejb-lightweight-web/src/test/java/org/apache/openejb/server/web/LightweightWebAppBuilderTest.java URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-lightweight-web/src/test/java/org/apache/openejb/server/web/LightweightWebAppBuilderTest.java?rev=1405701&view=auto ============================================================================== --- openejb/trunk/openejb/server/openejb-lightweight-web/src/test/java/org/apache/openejb/server/web/LightweightWebAppBuilderTest.java (added) +++ openejb/trunk/openejb/server/openejb-lightweight-web/src/test/java/org/apache/openejb/server/web/LightweightWebAppBuilderTest.java Mon Nov 5 06:15:47 2012 @@ -0,0 +1,52 @@ +/* + * 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.server.web; + +import org.apache.openejb.assembler.classic.WebAppBuilder; +import org.apache.openejb.config.WebModule; +import org.apache.openejb.core.WebContext; +import org.apache.openejb.jee.WebApp; +import org.apache.openejb.junit.ApplicationComposer; +import org.apache.openejb.junit.Component; +import org.apache.openejb.junit.Module; +import org.apache.openejb.loader.SystemInstance; +import org.apache.openejb.spi.ContainerSystem; +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +@RunWith(ApplicationComposer.class) +public class LightweightWebAppBuilderTest { + @Component + public WebAppBuilder webAppBuilder() { + return new LightweightWebAppBuilder(); + } + + @Module + public WebModule war() { + return new WebModule(new WebApp(), "/foo", Thread.currentThread().getContextClassLoader(), "", "web"); + } + + @Test + public void checkWebContextExists() { + final WebContext wc = SystemInstance.get().getComponent(ContainerSystem.class).getWebContext("web"); + assertNotNull(wc); + assertEquals("web", wc.getId()); + } +} Modified: openejb/trunk/openejb/server/pom.xml URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/pom.xml?rev=1405701&r1=1405700&r2=1405701&view=diff ============================================================================== --- openejb/trunk/openejb/server/pom.xml (original) +++ openejb/trunk/openejb/server/pom.xml Mon Nov 5 06:15:47 2012 @@ -45,6 +45,7 @@ <module>openejb-ssh</module> <module>openejb-common-cli</module> <module>openejb-bonecp</module> + <module>openejb-lightweight-web</module> </modules> </project>