Author: rmannibucau
Date: Mon Jun 27 19:19:27 2011
New Revision: 1140282

URL: http://svn.apache.org/viewvc?rev=1140282&view=rev
Log:
adding 'rest' applications to webmodule/webappinfo

Modified:
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppBuilder.java
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppInfo.java
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/WebModule.java
    
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/AnnotationDeployerTest.java

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppBuilder.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppBuilder.java?rev=1140282&r1=1140281&r2=1140282&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppBuilder.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppBuilder.java
 Mon Jun 27 19:19:27 2011
@@ -17,8 +17,6 @@
  */
 package org.apache.openejb.assembler.classic;
 
-import javax.persistence.EntityManagerFactory;
-
 public interface WebAppBuilder {
     void deployWebApps(AppInfo appInfo, ClassLoader classLoader) throws 
Exception;
     void undeployWebApps(AppInfo appInfo) throws Exception;

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppInfo.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppInfo.java?rev=1140282&r1=1140281&r2=1140282&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppInfo.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppInfo.java
 Mon Jun 27 19:19:27 2011
@@ -32,6 +32,8 @@ public class WebAppInfo extends Validati
     public String host;
     public String contextRoot;
     public final Set<String> watchedResources = new TreeSet<String>();
+    public final Set<String> restClass = new TreeSet<String>();
+    public final Set<String> restApplications = new TreeSet<String>();
     public final List<PortInfo> portInfos = new ArrayList<PortInfo>();
     public final JndiEncInfo jndiEnc = new JndiEncInfo();
     public final List<ServletInfo> servlets = new ArrayList<ServletInfo>();

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java?rev=1140282&r1=1140281&r2=1140282&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
 Mon Jun 27 19:19:27 2011
@@ -114,6 +114,7 @@ import javax.ws.rs.HEAD;
 import javax.ws.rs.POST;
 import javax.ws.rs.PUT;
 import javax.ws.rs.Path;
+import javax.ws.rs.core.Application;
 import javax.xml.ws.Service;
 import javax.xml.ws.WebServiceProvider;
 import javax.xml.ws.WebServiceRef;
@@ -974,7 +975,16 @@ public class AnnotationDeployer implemen
                 webApp.getServlet().add(servlet);
             }
 
+            /*
+             *REST
+             */
+            // get by annotations
             webModule.getRestClasses().addAll(findRestClasses(finder));
+            // Applications
+            List<Class<? extends Application>> applications = 
finder.findSubclasses(Application.class);
+            for (Class<? extends Application> app : applications) {
+                webModule.getRestApplications().add(app.getName());
+            }
 
             return webModule;
         }
@@ -4381,11 +4391,13 @@ public class AnnotationDeployer implemen
         // methods annotations
         List<Method> methods = new ArrayList<Method>();
         methods.addAll(finder.findAnnotatedMethods(Path.class));
+        /* should be useless...
         methods.addAll(finder.findAnnotatedMethods(HEAD.class));
         methods.addAll(finder.findAnnotatedMethods(PUT.class));
         methods.addAll(finder.findAnnotatedMethods(POST.class));
         methods.addAll(finder.findAnnotatedMethods(DELETE.class));
         methods.addAll(finder.findAnnotatedMethods(GET.class));
+        */
         for (Method method : methods) {
             classes.add(method.getDeclaringClass().getName());
         }

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java?rev=1140282&r1=1140281&r2=1140282&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java
 Mon Jun 27 19:19:27 2011
@@ -301,6 +301,8 @@ class AppInfoBuilder {
             
webAppInfo.watchedResources.addAll(webModule.getWatchedResources());
             webAppInfo.validationInfo = 
ValidatorBuilder.getInfo(webModule.getValidationConfig());
             webAppInfo.uniqueId = webModule.getUniqueId();
+            
webAppInfo.restApplications.addAll(webModule.getRestApplications());
+            webAppInfo.restClass.addAll(webModule.getRestClasses());
 
             webAppInfo.host = webModule.getHost();
             webAppInfo.contextRoot = webModule.getContextRoot();

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/WebModule.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/WebModule.java?rev=1140282&r1=1140281&r2=1140282&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/WebModule.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/WebModule.java
 Mon Jun 27 19:19:27 2011
@@ -49,6 +49,7 @@ public class WebModule extends Module im
     private final List<FacesConfig> facesConfigs = new 
ArrayList<FacesConfig>();
     private IAnnotationFinder finder;
     private final Set<String> restClasses = new TreeSet<String>();
+    private final Set<String> restApplications = new TreeSet<String>();
 
     private ID id;
     
@@ -180,4 +181,8 @@ public class WebModule extends Module im
     @Override public Set<String> getRestClasses() {
         return restClasses;
     }
+
+    public Set<String> getRestApplications() {
+        return restApplications;
+    }
 }

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/AnnotationDeployerTest.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/AnnotationDeployerTest.java?rev=1140282&r1=1140281&r2=1140282&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/AnnotationDeployerTest.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/AnnotationDeployerTest.java
 Mon Jun 27 19:19:27 2011
@@ -23,10 +23,16 @@ import static org.junit.Assert.assertEqu
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
 
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
 import java.io.PrintWriter;
 import java.io.Serializable;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Locale;
 import java.util.Set;
@@ -63,6 +69,8 @@ import javax.resource.spi.work.WorkConte
 import javax.security.auth.Subject;
 import javax.transaction.xa.XAResource;
 
+import javax.ws.rs.Path;
+import javax.ws.rs.core.Application;
 import org.apache.openejb.assembler.classic.AppInfo;
 import org.apache.openejb.assembler.classic.Assembler;
 import org.apache.openejb.assembler.classic.ClientInfo;
@@ -73,10 +81,13 @@ import org.apache.openejb.jee.EjbJar;
 import org.apache.openejb.jee.EnterpriseBean;
 import org.apache.openejb.jee.SessionBean;
 import org.apache.openejb.jee.TransactionSupportType;
+import org.apache.openejb.jee.WebApp;
 import org.apache.xbean.finder.Annotated;
 import org.apache.xbean.finder.AnnotationFinder;
 import org.apache.xbean.finder.ClassFinder;
+import org.apache.xbean.finder.archive.Archive;
 import org.apache.xbean.finder.archive.ClassesArchive;
+import org.apache.xbean.finder.archive.JarArchive;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -481,4 +492,52 @@ public class AnnotationDeployerTest {
                        this.myNumber = myNumber;
                }
     }
+
+    @Test
+    public void findRestClasses() throws Exception {
+        WebApp webApp = new WebApp();
+        webApp.setContextRoot("/");
+        webApp.setId("web");
+        webApp.setVersion("2.5");
+        WebModule webModule = new WebModule(webApp, webApp.getContextRoot(), 
Thread.currentThread().getContextClassLoader(), "myapp", webApp.getId());
+        webModule.setFinder(new AnnotationFinder(new 
ClassesArchive(RESTClass.class, RESTMethod.class, RESTApp.class)).link());
+
+        AnnotationDeployer annotationDeployer = new AnnotationDeployer();
+        webModule = annotationDeployer.deploy(webModule);
+
+        Set<String> classes = webModule.getRestClasses();
+        Set<String> applications = webModule.getRestApplications();
+
+        assertEquals(2, classes.size());
+        assertTrue(classes.contains(RESTClass.class.getName()));
+        assertTrue(classes.contains(RESTMethod.class.getName()));
+
+        assertEquals(1, applications.size());
+        assertEquals(RESTApp.class.getName(), applications.iterator().next());
+    }
+
+    @Path("/") public static class RESTClass {
+
+    }
+
+    public static class RESTMethod {
+        @Path("/method") public void noop() {
+            // no-op
+        }
+    }
+
+    public static class RESTApp extends Application {
+        public java.util.Set<java.lang.Class<?>> getClasses() {
+            return new HashSet<Class<?>>() {{
+                add(RESTClass.class);
+                add(RESTMethod.class);
+            }};
+        }
+        public java.util.Set<java.lang.Object> getSingletons() {
+            return new HashSet<Object>() {{
+                add(new RESTMethod());
+                add(new RESTMethod());
+            }};
+        }
+    }
  }


Reply via email to