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());
+ }};
+ }
+ }
}