[jboss-cvs] JBossAS SVN: r106616 - in trunk/resteasy-int: jar/src/main/java/org/jboss/resteasy/integration/deployers and 1 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Jul 12 18:12:06 EDT 2010


Author: bill.burke at jboss.com
Date: 2010-07-12 18:12:05 -0400 (Mon, 12 Jul 2010)
New Revision: 106616

Modified:
   trunk/resteasy-int/jar/pom.xml
   trunk/resteasy-int/jar/src/main/java/org/jboss/resteasy/integration/deployers/ResteasyDeploymentScanningData.java
   trunk/resteasy-int/jar/src/main/java/org/jboss/resteasy/integration/deployers/ResteasyEjbDeployer.java
   trunk/resteasy-int/jar/src/main/java/org/jboss/resteasy/integration/deployers/ResteasyIntegrationDeployer.java
   trunk/resteasy-int/jar/src/main/java/org/jboss/resteasy/integration/deployers/ResteasyScannerDeployer.java
   trunk/resteasy-int/zip/assembly.xml
   trunk/resteasy-int/zip/pom.xml
Log:


Modified: trunk/resteasy-int/jar/pom.xml
===================================================================
--- trunk/resteasy-int/jar/pom.xml	2010-07-12 21:23:14 UTC (rev 106615)
+++ trunk/resteasy-int/jar/pom.xml	2010-07-12 22:12:05 UTC (rev 106616)
@@ -62,6 +62,21 @@
         </dependency>
 
         <dependency>
+            <groupId>org.jboss.resteasy</groupId>
+            <artifactId>async-http-servlet-3.0</artifactId>
+            <version>${version.org.jboss.resteasy}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>javax.xml.bind</groupId>
+                    <artifactId>jaxb-api</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>javax.xml.stream</groupId>
+                    <artifactId>stax-api</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
             <groupId>org.jboss.jbossas</groupId>
             <artifactId>jboss-as-server</artifactId>
             <scope>provided</scope>

Modified: trunk/resteasy-int/jar/src/main/java/org/jboss/resteasy/integration/deployers/ResteasyDeploymentScanningData.java
===================================================================
--- trunk/resteasy-int/jar/src/main/java/org/jboss/resteasy/integration/deployers/ResteasyDeploymentScanningData.java	2010-07-12 21:23:14 UTC (rev 106615)
+++ trunk/resteasy-int/jar/src/main/java/org/jboss/resteasy/integration/deployers/ResteasyDeploymentScanningData.java	2010-07-12 22:12:05 UTC (rev 106616)
@@ -1,5 +1,6 @@
 package org.jboss.resteasy.integration.deployers;
 
+import javax.ws.rs.core.Application;
 import java.util.LinkedHashSet;
 import java.util.Set;
 
@@ -15,8 +16,19 @@
    private boolean createDispatcher;
    private Set<String> resources = new LinkedHashSet<String>();
    private Set<String> providers = new LinkedHashSet<String>();
+   private Class<? extends Application> applicationClass;
    private boolean bootClasses;
 
+   public Class<? extends Application> getApplicationClass()
+   {
+      return applicationClass;
+   }
+
+   public void setApplicationClass(Class<? extends Application> applicationClass)
+   {
+      this.applicationClass = applicationClass;
+   }
+
    public boolean hasBootClasses()
    {
       return bootClasses;

Modified: trunk/resteasy-int/jar/src/main/java/org/jboss/resteasy/integration/deployers/ResteasyEjbDeployer.java
===================================================================
--- trunk/resteasy-int/jar/src/main/java/org/jboss/resteasy/integration/deployers/ResteasyEjbDeployer.java	2010-07-12 21:23:14 UTC (rev 106615)
+++ trunk/resteasy-int/jar/src/main/java/org/jboss/resteasy/integration/deployers/ResteasyEjbDeployer.java	2010-07-12 22:12:05 UTC (rev 106616)
@@ -10,18 +10,14 @@
 import org.jboss.logging.Logger;
 import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeanMetaData;
 import org.jboss.metadata.ejb.jboss.JBossMetaData;
-import org.jboss.metadata.javaee.spec.ParamValueMetaData;
 import org.jboss.metadata.web.jboss.JBossWebMetaData;
 import org.jboss.resteasy.plugins.server.servlet.ResteasyContextParameters;
 import org.jboss.resteasy.util.GetRestful;
 
-import javax.ejb.EJBException;
 import javax.ejb.Local;
 import javax.ejb.LocalHome;
 import javax.ejb.Remote;
-import java.util.ArrayList;
 import java.util.HashSet;
-import java.util.List;
 import java.util.Set;
 
 /**
@@ -61,7 +57,7 @@
 
       // right now I only support resources
       if (!resteasy.isScanResources()) return;
-      if (((VFSDeploymentUnit)du).getMetaDataFile("beans.xml") != null) return;
+      if (((VFSDeploymentUnit) du).getMetaDataFile("beans.xml") != null) return;
 
       JBossWebMetaData webdata = du.getAttachment(JBossWebMetaData.class);
       JBossMetaData ejbs = (JBossMetaData) du
@@ -99,20 +95,8 @@
       {
          resteasy.createDispatcher();
          String paramValue = buf.toString();
-         ParamValueMetaData param = new ParamValueMetaData();
-         param.setParamName(ResteasyContextParameters.RESTEASY_JNDI_COMPONENT_RESOURCES);
-         param.setParamValue(paramValue);
-         List<ParamValueMetaData> params = webdata.getContextParams();
-         if (params == null)
-         {
-            params = new ArrayList<ParamValueMetaData>();
-            webdata.setContextParams(params);
-         }
-         params.add(param);
-         param = new ParamValueMetaData();
-         param.setParamName(ResteasyContextParameters.RESTEASY_UNWRAPPED_EXCEPTIONS);
-         param.setParamValue(EJBException.class.getName());
-         params.add(param);
+         log.info("*** Adding RESTEasy JNDi Component Resources: " + paramValue);
+         ResteasyIntegrationDeployer.setContextParameter(webdata, ResteasyContextParameters.RESTEASY_JNDI_COMPONENT_RESOURCES, paramValue);
       }
    }
 

Modified: trunk/resteasy-int/jar/src/main/java/org/jboss/resteasy/integration/deployers/ResteasyIntegrationDeployer.java
===================================================================
--- trunk/resteasy-int/jar/src/main/java/org/jboss/resteasy/integration/deployers/ResteasyIntegrationDeployer.java	2010-07-12 21:23:14 UTC (rev 106615)
+++ trunk/resteasy-int/jar/src/main/java/org/jboss/resteasy/integration/deployers/ResteasyIntegrationDeployer.java	2010-07-12 22:12:05 UTC (rev 106616)
@@ -11,9 +11,10 @@
 import org.jboss.metadata.web.spec.FilterMappingMetaData;
 import org.jboss.metadata.web.spec.FilterMetaData;
 import org.jboss.metadata.web.spec.FiltersMetaData;
-import org.jboss.resteasy.plugins.server.servlet.FilterDispatcher;
+import org.jboss.resteasy.plugins.server.servlet.Filter30Dispatcher;
 import org.jboss.resteasy.plugins.server.servlet.ResteasyContextParameters;
 
+import javax.ws.rs.ApplicationPath;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -56,6 +57,21 @@
 
    }
 
+   public static ParamValueMetaData findContextParam(JBossWebMetaData webdata, String name)
+   {
+      List<ParamValueMetaData> params = webdata.getContextParams();
+      if (params == null) return null;
+      for (ParamValueMetaData param : params)
+      {
+         if (param.getParamName().equals(name))
+         {
+            return param;
+         }
+      }
+      return null;
+   }
+
+
    public static void setContextParameter(JBossWebMetaData webdata, String name, String value)
    {
       ParamValueMetaData param = new ParamValueMetaData();
@@ -75,7 +91,6 @@
    {
       JBossWebMetaData webdata = du.getAttachment(JBossWebMetaData.class);
       ResteasyDeploymentScanningData resteasy = du.getAttachment(ResteasyDeploymentScanningData.class);
-      if (!resteasy.shouldCreateDispatcher()) return;
 
       if (!resteasy.getResources().isEmpty())
       {
@@ -93,6 +108,7 @@
             }
          }
          String resources = buf.toString();
+         log.info("*** Adding JAX-RS resource classes: " + resources);
          setContextParameter(webdata, ResteasyContextParameters.RESTEASY_RESOURCES, resources);
       }
       if (!resteasy.getProviders().isEmpty())
@@ -110,15 +126,29 @@
                buf.append(",").append(provider);
             }
          }
-         setContextParameter(webdata, ResteasyContextParameters.RESTEASY_PROVIDERS, buf.toString());
+         String providers = buf.toString();
+         log.info("*** Adding JAX-RS provider classes: " + providers);
+         setContextParameter(webdata, ResteasyContextParameters.RESTEASY_PROVIDERS, providers);
       }
 
+      boolean useScannedApplicationClass = false;
+
+      if (resteasy.getApplicationClass() != null)
+      {
+         if (findContextParam(webdata, "javax.ws.rs.Application") == null)
+         {
+            useScannedApplicationClass = true;
+            setContextParameter(webdata, "javax.ws.rs.Application", resteasy.getApplicationClass().getName());
+         }
+      }
+
       try
       {
          Thread.currentThread().getContextClassLoader().loadClass(CDI_INJECTOR_FACTORY_CLASS);
          // don't set this param if CDI    is not in classpath
-         if (((VFSDeploymentUnit)du).getMetaDataFile("beans.xml") != null)
+         if (((VFSDeploymentUnit) du).getMetaDataFile("beans.xml") != null)
          {
+            log.info("***** Found CDI, adding injector factory class");
             setContextParameter(webdata, "resteasy.injector.factory", CDI_INJECTOR_FACTORY_CLASS);
          }
       }
@@ -126,16 +156,29 @@
       {
       }
 
+      ResteasyIntegrationDeployer.setContextParameter(webdata, ResteasyContextParameters.RESTEASY_UNWRAPPED_EXCEPTIONS, "javax.ejb.EJBException");
+
       if (resteasy.hasBootClasses()) return;
 
       FilterMetaData filter = new FilterMetaData();
-      filter.setFilterClass(FilterDispatcher.class.getName());
+      filter.setFilterClass(Filter30Dispatcher.class.getName());
       filter.setName("Resteasy");
+      filter.setAsyncSupported(true);
 
       FilterMappingMetaData mapping = new FilterMappingMetaData();
       mapping.setFilterName("Resteasy");
       List<String> patterns = new ArrayList<String>();
-      patterns.add("/*");
+      if (useScannedApplicationClass && resteasy.getApplicationClass().isAnnotationPresent(ApplicationPath.class))
+      {
+         ApplicationPath path = resteasy.getApplicationClass().getAnnotation(ApplicationPath.class);
+         String pathValue = path.value();
+         patterns.add(pathValue + "/*");
+         setContextParameter(webdata, "resteasy.servlet.mapping.prefix", pathValue);
+      }
+      else
+      {
+         patterns.add("/*");
+      }
       mapping.setUrlPatterns(patterns);
 
       if (webdata.getFilters() == null)

Modified: trunk/resteasy-int/jar/src/main/java/org/jboss/resteasy/integration/deployers/ResteasyScannerDeployer.java
===================================================================
--- trunk/resteasy-int/jar/src/main/java/org/jboss/resteasy/integration/deployers/ResteasyScannerDeployer.java	2010-07-12 21:23:14 UTC (rev 106615)
+++ trunk/resteasy-int/jar/src/main/java/org/jboss/resteasy/integration/deployers/ResteasyScannerDeployer.java	2010-07-12 22:12:05 UTC (rev 106616)
@@ -10,7 +10,7 @@
 import org.jboss.metadata.web.jboss.JBossWebMetaData;
 import org.jboss.metadata.web.spec.FilterMetaData;
 import org.jboss.metadata.web.spec.ServletMetaData;
-import org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher;
+import org.jboss.resteasy.plugins.server.servlet.HttpServlet30Dispatcher;
 import org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrapClasses;
 import org.jboss.resteasy.plugins.server.servlet.ResteasyContextParameters;
 import org.jboss.scanning.annotations.spi.AnnotationIndex;
@@ -118,7 +118,8 @@
          }
          if (Application.class.isAssignableFrom(clazz))
          {
-            servlet.setServletClass(HttpServletDispatcher.class.getName());
+            servlet.setServletClass(HttpServlet30Dispatcher.class.getName());
+            servlet.setAsyncSupported(true);
             ParamValueMetaData param = new ParamValueMetaData();
             param.setParamName("javax.ws.rs.Application");
             param.setParamValue(servletClass);
@@ -129,11 +130,12 @@
                servlet.setInitParam(params);
             }
             params.add(param);
+            ResteasyIntegrationDeployer.setContextParameter(webdata, ResteasyContextParameters.RESTEASY_UNWRAPPED_EXCEPTIONS, "javax.ejb.EJBException");
             try
             {
                Thread.currentThread().getContextClassLoader().loadClass(ResteasyIntegrationDeployer.CDI_INJECTOR_FACTORY_CLASS);
                // don't set this param if it is not in classpath
-               if (((VFSDeploymentUnit)du).getMetaDataFile("beans.xml") != null)
+               if (((VFSDeploymentUnit) du).getMetaDataFile("beans.xml") != null)
                {
                   ResteasyIntegrationDeployer.setContextParameter(webdata, "resteasy.injector.factory", ResteasyIntegrationDeployer.CDI_INJECTOR_FACTORY_CLASS);
                }
@@ -148,12 +150,17 @@
 
    }
 
+   protected void addApplicationClass(Class<? extends Application> applicationClass, DeploymentUnit du, JBossWebMetaData webdata)
+   {
+
+   }
+
    protected void scan(DeploymentUnit du, JBossWebMetaData webdata)
            throws DeploymentException
    {
       ResteasyDeploymentScanningData scanningData = new ResteasyDeploymentScanningData();
 
-      // If there is a resteasy boot class in web.xml, then the default should not be to scan
+      // If there is a resteasy boot class in web.xml, then the default should be to not scan
       boolean hasBoot = hasBootClasses(du, webdata);
       scanningData.setBootClasses(hasBoot);
 
@@ -227,9 +234,45 @@
          }
          return;
       }
+      else
+      {
+      }
 
       du.addAttachment(ResteasyDeploymentScanningData.class, scanningData);
 
+      // look for Application class, return if there is one
+
+      HierarchyIndex hier = du.getAttachment(HierarchyIndex.class);
+      if (hier != null)
+      {
+         Set<Class<? extends Application>> applicationClass = hier.getSubClassesOf(null, Application.class);
+         if (applicationClass != null)
+         {
+            if (applicationClass.size() > 1)
+            {
+               StringBuilder builder = new StringBuilder("Only one JAX-RS Application Class allowed.");
+               for (Class c : applicationClass)
+               {
+                  builder.append(" ").append(c.getName());
+               }
+               throw new DeploymentException(builder.toString());
+            }
+            else if (applicationClass.size() == 1)
+            {
+               Class<? extends Application> aClass = applicationClass.iterator().next();
+               scanningData.setApplicationClass(aClass);
+
+               // don't scan for anything else
+               return;
+            }
+         }
+      }
+      else
+      {
+         LOGGER.debug("Expecting HierarchyIndex class for scanning WAR for JAX-RS Application class");
+      }
+
+      // Looked for annotated resources and providers
       AnnotationIndex env = du.getAttachment(AnnotationIndex.class);
       if (env == null)
       {
@@ -237,6 +280,7 @@
          return;
       }
 
+
       Set<Element<Path, Class<?>>> resources = null;
       Set<Element<Provider, Class<?>>> providers = null;
       if (scanningData.isScanResources())

Modified: trunk/resteasy-int/zip/assembly.xml
===================================================================
--- trunk/resteasy-int/zip/assembly.xml	2010-07-12 21:23:14 UTC (rev 106615)
+++ trunk/resteasy-int/zip/assembly.xml	2010-07-12 22:12:05 UTC (rev 106616)
@@ -31,6 +31,7 @@
                 <include>org.jboss.resteasy:resteasy-jackson-provider</include>
                 <include>org.jboss.resteasy:resteasy-yaml-provider</include>
                 <include>org.jboss.resteasy:resteasy-cdi</include>
+                <include>org.jboss.resteasy:async-http-servlet-3.0</include>
             </includes>
             <outputDirectory>resteasy.deployer</outputDirectory>
         </dependencySet>

Modified: trunk/resteasy-int/zip/pom.xml
===================================================================
--- trunk/resteasy-int/zip/pom.xml	2010-07-12 21:23:14 UTC (rev 106615)
+++ trunk/resteasy-int/zip/pom.xml	2010-07-12 22:12:05 UTC (rev 106616)
@@ -114,6 +114,11 @@
             <artifactId>resteasy-cdi</artifactId>
             <version>${version.org.jboss.resteasy}</version>
         </dependency>
+        <dependency>
+            <groupId>org.jboss.resteasy</groupId>
+            <artifactId>async-http-servlet-3.0</artifactId>
+            <version>${version.org.jboss.resteasy}</version>
+        </dependency>
     </dependencies>
 
     <build>



More information about the jboss-cvs-commits mailing list