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 2012/11/05 07:15:48 UTC

svn commit: r1405701 - in /openejb/trunk/openejb: container/openejb-core/src/main/java/org/apache/openejb/config/ container/openejb-core/src/main/java/org/apache/openejb/junit/ server/ server/openejb-lightweight-web/ server/openejb-lightweight-web/src/...

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>