Author: rmannibucau Date: Mon Nov 5 11:23:58 2012 New Revision: 1405748 URL: http://svn.apache.org/viewvc?rev=1405748&view=rev Log: allowing webapp from applicationcomposer and @Classes to create the finder on the fly
Added: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/Classes.java - copied, changed from r1405723, openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/Module.java Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/ApplicationComposer.java openejb/trunk/openejb/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/SimpleApplicationTest.java 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=1405748&r1=1405747&r2=1405748&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 11:23:58 2012 @@ -44,6 +44,7 @@ import org.apache.openejb.jee.Enterprise import org.apache.openejb.jee.ManagedBean; import org.apache.openejb.jee.NamedModule; import org.apache.openejb.jee.TransactionType; +import org.apache.openejb.jee.WebApp; import org.apache.openejb.jee.jpa.unit.Persistence; import org.apache.openejb.jee.jpa.unit.PersistenceUnit; import org.apache.openejb.jee.oejb3.EjbDeployment; @@ -140,6 +141,14 @@ public class ApplicationComposer extends } } + for (FrameworkMethod method : testClass.getAnnotatedMethods(Classes.class)) { + final Class<?> returnType = method.getMethod().getReturnType(); + if (!returnType.equals(WebModule.class) && !returnType.equals(EjbModule.class) + && !returnType.equals(WebApp.class) && !returnType.equals(EjbJar.class)) { + errors.add(new Exception("@Classes can't be used on a method returning " + returnType)); + } + } + int appModules = 0; int modules = 0; @@ -285,19 +294,43 @@ public class ApplicationComposer extends for (FrameworkMethod method : testClass.getAnnotatedMethods(Module.class)) { final Object obj = method.invokeExplosively(testInstance); + final Classes classesAnnotation = method.getAnnotation(Classes.class); - if (obj instanceof WebModule) { // will add the ejbmodule too - DeploymentLoader.addWebModule((WebModule) obj, appModule); + if (obj instanceof WebApp) { // will add the ejbmodule too + final WebApp webapp = (WebApp) obj; + String root = webapp.getContextRoot(); + if (root == null) { + root = "/openejb"; + } + + final WebModule webModule = new WebModule(webapp, root, Thread.currentThread().getContextClassLoader(), "", root); + if (classesAnnotation != null) { + webModule.setFinder(finderFromClasses(classesAnnotation.value())); + } + DeploymentLoader.addWebModule(webModule, appModule); + } else if (obj instanceof WebModule) { // will add the ejbmodule too + final WebModule webModule = (WebModule) obj; + if (classesAnnotation != null) { + webModule.setFinder(finderFromClasses(classesAnnotation.value())); + } + DeploymentLoader.addWebModule(webModule, appModule); } else if (obj instanceof EjbModule) { final EjbModule ejbModule = (EjbModule) obj; + if (classesAnnotation != null) { + ejbModule.setFinder(finderFromClasses(classesAnnotation.value())); + } ejbModule.initAppModule(appModule); appModule.getEjbModules().add(ejbModule); } else if (obj instanceof EjbJar) { final EjbJar ejbJar = (EjbJar) obj; setId(ejbJar, method); - appModule.getEjbModules().add(new EjbModule(ejbJar)); + final EjbModule ejbModule = new EjbModule(ejbJar); + appModule.getEjbModules().add(ejbModule); + if (classesAnnotation != null) { + ejbModule.setFinder(finderFromClasses(classesAnnotation.value())); + } } else if (obj instanceof EnterpriseBean) { final EnterpriseBean bean = (EnterpriseBean) obj; @@ -334,6 +367,9 @@ public class ApplicationComposer extends final Beans beans = (Beans) obj; final EjbModule ejbModule = new EjbModule(new EjbJar(method.getName())); ejbModule.setBeans(beans); + if (classesAnnotation != null) { + ejbModule.setFinder(finderFromClasses(classesAnnotation.value())); + } appModule.getEjbModules().add(ejbModule); } else if (obj instanceof Class[]) { @@ -509,4 +545,8 @@ public class ApplicationComposer extends return module; } } + + private static IAnnotationFinder finderFromClasses(final Class<?>[] value) { + return new AnnotationFinder(new ClassesArchive(value)).link(); + } } Copied: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/Classes.java (from r1405723, 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/Classes.java?p2=openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/Classes.java&p1=openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/Module.java&r1=1405723&r2=1405748&rev=1405748&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/Classes.java Mon Nov 5 11:23:58 2012 @@ -23,5 +23,6 @@ import java.lang.annotation.Target; @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) -public @interface Module { +public @interface Classes { + Class<?>[] value() default {}; } Modified: openejb/trunk/openejb/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/SimpleApplicationTest.java URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/SimpleApplicationTest.java?rev=1405748&r1=1405747&r2=1405748&view=diff ============================================================================== --- openejb/trunk/openejb/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/SimpleApplicationTest.java (original) +++ openejb/trunk/openejb/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/SimpleApplicationTest.java Mon Nov 5 11:23:58 2012 @@ -20,8 +20,11 @@ import org.apache.cxf.jaxrs.client.WebCl import org.apache.openejb.OpenEjbContainer; import org.apache.openejb.assembler.classic.WebAppBuilder; import org.apache.openejb.config.WebModule; +import org.apache.openejb.jee.ParamValue; +import org.apache.openejb.jee.Servlet; import org.apache.openejb.jee.WebApp; import org.apache.openejb.junit.ApplicationComposer; +import org.apache.openejb.junit.Classes; import org.apache.openejb.junit.Component; import org.apache.openejb.junit.Configuration; import org.apache.openejb.junit.Module; @@ -35,6 +38,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.core.Application; import javax.ws.rs.core.Response; import java.io.InputStream; import java.io.StringWriter; @@ -59,11 +63,22 @@ public class SimpleApplicationTest { } @Module - public WebModule war() { - final WebModule webModule = new WebModule(new WebApp(), "/foo", Thread.currentThread().getContextClassLoader(), "", "foo"); - webModule.getRestApplications().add(MyRESTApplication.class.getName()); - webModule.setFinder(new AnnotationFinder(new ClassesArchive(RestWithInjections.class, SimpleEJB.class))); - return webModule; + @Classes({ RestWithInjections.class, SimpleEJB.class }) + public WebApp war() { + final ParamValue config = new ParamValue(); + config.setParamName("javax.ws.rs.Application"); + config.setParamValue(MyRESTApplication.class.getName()); + + final Servlet servlet = new Servlet(); + servlet.setServletName("REST Application"); + servlet.setServletClass(Application.class.getName()); + servlet.getInitParam().add(config); + + final WebApp webApp = new WebApp(); + webApp.setContextRoot("foo"); + webApp.getServlet().add(servlet); + + return webApp; } @Test