[jboss-cvs] JBossAS SVN: r100153 - in trunk/resteasy-int: jar/src/main/java/org/jboss/resteasy/integration/deployers and 3 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Fri Jan 29 20:55:35 EST 2010
Author: bill.burke at jboss.com
Date: 2010-01-29 20:55:34 -0500 (Fri, 29 Jan 2010)
New Revision: 100153
Added:
trunk/resteasy-int/jar/src/main/java/org/jboss/resteasy/integration/deployers/ResteasyDeploymentData.java
trunk/resteasy-int/jar/src/main/java/org/jboss/resteasy/integration/deployers/ResteasyEjbDeployer.java
trunk/resteasy-int/zip/resteasy-ejb-jboss-beans.xml
Removed:
trunk/resteasy-int/test/scanned-war/scanned-test.iml
Modified:
trunk/resteasy-int/jar/pom.xml
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/test/pom.xml
trunk/resteasy-int/zip/assembly.xml
trunk/resteasy-int/zip/pom.xml
Log:
Resteasy integration
Modified: trunk/resteasy-int/jar/pom.xml
===================================================================
--- trunk/resteasy-int/jar/pom.xml 2010-01-30 00:21:40 UTC (rev 100152)
+++ trunk/resteasy-int/jar/pom.xml 2010-01-30 01:55:34 UTC (rev 100153)
@@ -1,144 +1,144 @@
<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/maven-v4_0_0.xsd">
-
- <parent>
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <parent>
+ <groupId>org.jboss.jbossas</groupId>
+ <artifactId>jboss-as-parent</artifactId>
+ <version>6.0.0-SNAPSHOT</version>
+ </parent>
+
+ <modelVersion>4.0.0</modelVersion>
<groupId>org.jboss.jbossas</groupId>
- <artifactId>jboss-as-parent</artifactId>
- <version>6.0.0-SNAPSHOT</version>
- </parent>
-
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.jboss.jbossas</groupId>
- <artifactId>jboss-as-resteasy</artifactId>
- <packaging>jar</packaging>
- <name>JBoss Application Server Resteasy</name>
- <url>http://www.jboss.org/jbossas</url>
- <description>JBoss Application Server (resteasy module)</description>
-
- <build>
- <plugins>
-<plugin>
- <artifactId>maven-jar-plugin</artifactId>
- <configuration>
- <archive>
- <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
- </archive>
- </configuration>
-</plugin>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- <version>2.0.1</version>
- <executions>
- <execution>
- <id>bundle-manifest</id>
- <phase>process-classes</phase>
- <goals>
- <goal>manifest</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
-
- <!-- Dependencies -->
- <dependencies>
- <dependency>
- <groupId>org.jboss.resteasy</groupId>
- <artifactId>resteasy-jaxrs</artifactId>
- <version>1.2.1.GA</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>
+ <artifactId>jboss-as-resteasy</artifactId>
+ <packaging>jar</packaging>
+ <name>JBoss Application Server Resteasy</name>
+ <url>http://www.jboss.org/jbossas</url>
+ <description>JBoss Application Server (resteasy module)</description>
- <dependency>
- <groupId>org.jboss.jbossas</groupId>
- <artifactId>jboss-as-server</artifactId>
- <scope>provided</scope>
- <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>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-jar-plugin</artifactId>
+ <configuration>
+ <archive>
+ <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
+ </archive>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <version>2.0.1</version>
+ <executions>
+ <execution>
+ <id>bundle-manifest</id>
+ <phase>process-classes</phase>
+ <goals>
+ <goal>manifest</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
- <dependency>
- <groupId>org.jboss.jbossas</groupId>
- <artifactId>jboss-as-system</artifactId>
- <scope>provided</scope>
- <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>
+ <!-- Dependencies -->
+ <dependencies>
+ <dependency>
+ <groupId>org.jboss.resteasy</groupId>
+ <artifactId>resteasy-jaxrs</artifactId>
+ <version>2.0-beta-1</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-system-jmx</artifactId>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.jboss.cl</groupId>
- <artifactId>jboss-classloading</artifactId>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.jboss</groupId>
- <artifactId>jboss-vfs</artifactId>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.jboss</groupId>
- <artifactId>jboss-reflect</artifactId>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.jboss.microcontainer</groupId>
- <artifactId>jboss-dependency</artifactId>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.jboss.microcontainer</groupId>
- <artifactId>jboss-kernel</artifactId>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.jboss.metadata</groupId>
- <artifactId>jboss-metadata-common</artifactId>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.jboss.deployers</groupId>
- <artifactId>jboss-deployers-vfs</artifactId>
+ <dependency>
+ <groupId>org.jboss.jbossas</groupId>
+ <artifactId>jboss-as-server</artifactId>
+ <scope>provided</scope>
+ <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-system</artifactId>
+ <scope>provided</scope>
+ <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-system-jmx</artifactId>
<scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.jboss.security</groupId>
- <artifactId>jboss-security-spi</artifactId>
- <scope>provided</scope>
- </dependency>
- -->
- </dependencies>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.cl</groupId>
+ <artifactId>jboss-classloading</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss</groupId>
+ <artifactId>jboss-vfs</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss</groupId>
+ <artifactId>jboss-reflect</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.microcontainer</groupId>
+ <artifactId>jboss-dependency</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.microcontainer</groupId>
+ <artifactId>jboss-kernel</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.metadata</groupId>
+ <artifactId>jboss-metadata-common</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.deployers</groupId>
+ <artifactId>jboss-deployers-vfs</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.security</groupId>
+ <artifactId>jboss-security-spi</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ -->
+ </dependencies>
</project>
Added: trunk/resteasy-int/jar/src/main/java/org/jboss/resteasy/integration/deployers/ResteasyDeploymentData.java
===================================================================
--- trunk/resteasy-int/jar/src/main/java/org/jboss/resteasy/integration/deployers/ResteasyDeploymentData.java (rev 0)
+++ trunk/resteasy-int/jar/src/main/java/org/jboss/resteasy/integration/deployers/ResteasyDeploymentData.java 2010-01-30 01:55:34 UTC (rev 100153)
@@ -0,0 +1,93 @@
+package org.jboss.resteasy.integration.deployers;
+
+import java.util.LinkedHashSet;
+import java.util.Set;
+
+/**
+ * @author <a href="mailto:bill at burkecentral.com">Bill Burke</a>
+ * @version $Revision: 1 $
+ */
+public class ResteasyDeploymentData
+{
+ private boolean scanAll;
+ private boolean scanResources;
+ private boolean scanProviders;
+ private boolean createDispatcher;
+ private Set<String> resources = new LinkedHashSet<String>();
+ private Set<String> providers = new LinkedHashSet<String>();
+
+ public boolean shouldScan()
+ {
+ return scanAll || scanResources || scanProviders;
+ }
+
+ public boolean isScanAll()
+ {
+ return scanAll;
+ }
+
+ public void setScanAll(boolean scanAll)
+ {
+ if (scanAll)
+ {
+ scanResources = true;
+ scanProviders = true;
+ }
+ this.scanAll = scanAll;
+ }
+
+ public boolean isScanResources()
+ {
+ return scanResources;
+ }
+
+ public void setScanResources(boolean scanResources)
+ {
+ this.scanResources = scanResources;
+ }
+
+ public boolean isScanProviders()
+ {
+ return scanProviders;
+ }
+
+ public void setScanProviders(boolean scanProviders)
+ {
+ this.scanProviders = scanProviders;
+ }
+
+ public Set<String> getResources()
+ {
+ return resources;
+ }
+
+ public void setResources(Set<String> resources)
+ {
+ this.resources = resources;
+ }
+
+ public Set<String> getProviders()
+ {
+ return providers;
+ }
+
+ public void setProviders(Set<String> providers)
+ {
+ this.providers = providers;
+ }
+
+ /**
+ * A component layer wants a dispatcher created
+ */
+ public void createDispatcher()
+ {
+ this.createDispatcher = true;
+ }
+
+ public boolean shouldCreateDispatcher()
+ {
+ return createDispatcher || !resources.isEmpty() || !providers.isEmpty();
+ }
+
+
+}
Copied: trunk/resteasy-int/jar/src/main/java/org/jboss/resteasy/integration/deployers/ResteasyEjbDeployer.java (from rev 99431, 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/ResteasyEjbDeployer.java (rev 0)
+++ trunk/resteasy-int/jar/src/main/java/org/jboss/resteasy/integration/deployers/ResteasyEjbDeployer.java 2010-01-30 01:55:34 UTC (rev 100153)
@@ -0,0 +1,332 @@
+package org.jboss.resteasy.integration.deployers;
+
+import org.jboss.deployers.spi.DeploymentException;
+import org.jboss.deployers.spi.deployer.DeploymentStages;
+import org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployer;
+import org.jboss.deployers.structure.spi.DeploymentUnit;
+import org.jboss.ejb.deployers.MergedJBossMetaDataDeployer;
+import org.jboss.ejb3.annotation.LocalBinding;
+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;
+
+/**
+ * @author <a href="mailto:bill at burkecentral.com">Bill Burke</a>
+ * @version $Revision: 1 $
+ */
+public class ResteasyEjbDeployer extends AbstractRealDeployer
+{
+ private static final Logger LOGGER = Logger.getLogger(ResteasyEjbDeployer.class);
+
+ public ResteasyEjbDeployer()
+ {
+ super();
+
+ addRequiredInput(JBossWebMetaData.class);
+ addRequiredInput(ResteasyDeploymentData.class);
+ addRequiredInput(MergedJBossMetaDataDeployer.EJB_MERGED_ATTACHMENT_NAME);
+ addOutput(JBossWebMetaData.class);
+ setStage(DeploymentStages.PRE_REAL); // TODO -- right stage?
+ }
+
+ protected void internalDeploy(DeploymentUnit du) throws DeploymentException
+ {
+ log.info("********************* IN EJB DEPLOYER!!!!!!");
+ ResteasyDeploymentData resteasy = du.getAttachment(ResteasyDeploymentData.class);
+
+ /*
+ log.info("*******************");
+ log.info("*** Attachments ***");
+ log.info("*******************");
+ for (String attachment : du.getAttachments().keySet())
+ {
+ log.info(">>> " + attachment);
+ }
+
+ if (true) return;
+ */
+
+ // right now I only support resources
+ if (!resteasy.isScanResources()) return;
+
+ JBossWebMetaData webdata = du.getAttachment(JBossWebMetaData.class);
+ JBossMetaData ejbs = (JBossMetaData) du
+ .getAttachment(MergedJBossMetaDataDeployer.EJB_MERGED_ATTACHMENT_NAME);
+ ClassLoader loader = du.getClassLoader();
+ StringBuffer buf = null;
+ for (final JBossEnterpriseBeanMetaData ejb : ejbs.getEnterpriseBeans())
+ {
+ Class ejbClass = null;
+ try
+ {
+ ejbClass = loader.loadClass(ejb.getEjbClass());
+ }
+ catch (ClassNotFoundException e)
+ {
+ throw new RuntimeException(e);
+ }
+ if (!GetRestful.isRootResource(ejbClass)) continue;
+ String jndiName = getLocalJndiName(ejb, ejbClass);
+ log.info("******* Found JAX-RS EJB: " + ejbClass.getName() + " local jndi name: " + jndiName);
+ if (buf == null)
+ {
+ buf = new StringBuffer();
+ }
+ else
+ {
+ buf.append(",");
+ }
+ buf.append(jndiName).append(";").append(ejbClass.getName()).append(";").append("true");
+
+ // make sure its removed from list
+ resteasy.getResources().remove(ejbClass.getName());
+ }
+ if (buf != null)
+ {
+ 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);
+ }
+ }
+
+ private static String getLocalJndiName(JBossEnterpriseBeanMetaData ejb, Class<?> ejbClass)
+ {
+ // See if local binding is explicitly-defined
+ LocalBinding localBinding = ejbClass.getAnnotation(LocalBinding.class);
+
+ // If none specified
+ if (localBinding == null || (localBinding.jndiBinding() != null && localBinding.jndiBinding().trim().length() == 0))
+ {
+ String name = ejb.getLocalJndiName();
+ return name;
+ }
+ // Local Binding was explicitly-specified, use it
+ else
+ {
+ return localBinding.jndiBinding();
+ }
+ }
+
+
+ public static Set<Class<?>> getBusinessInterfaces(Class<?> beanClass)
+ {
+ // Obtain all business interfaces implemented by this bean class and its superclasses
+ return getBusinessInterfaces(beanClass, new HashSet<Class<?>>());
+ }
+
+ /**
+ * Resolve the potential business interfaces on an enterprise bean.
+ * Returns all interfaces implemented by this class and, optionally, its supers which
+ * are potentially a business interface.
+ * <p/>
+ * Note: for normal operation call container.getBusinessInterfaces().
+ *
+ * @param beanClass the EJB implementation class
+ * @param includeSupers Whether or not to include superclasses of the specified beanClass in this check
+ * @return a list of potential business interfaces
+ * @see org.jboss.ejb3.EJBContainer#getBusinessInterfaces()
+ */
+ public static Set<Class<?>> getBusinessInterfaces(Class<?> beanClass, boolean includeSupers)
+ {
+ // Obtain all business interfaces implemented by this bean class and optionally, its superclass
+ return getBusinessInterfaces(beanClass, new HashSet<Class<?>>(), includeSupers);
+ }
+
+ private static Set<Class<?>> getBusinessInterfaces(Class<?> beanClass, Set<Class<?>> interfaces)
+ {
+ return getBusinessInterfaces(beanClass, interfaces, true);
+ }
+
+ private static Set<Class<?>> getBusinessInterfaces(Class<?> beanClass, Set<Class<?>> interfaces,
+ boolean includeSupers)
+ {
+ /*
+ * 4.6.6:
+ * The following interfaces are excluded when determining whether the bean class has
+ * more than one interface: java.io.Serializable; java.io.Externalizable;
+ * any of the interfaces defined by the javax.ejb package.
+ */
+ for (Class<?> intf : beanClass.getInterfaces())
+ {
+ if (intf.equals(java.io.Externalizable.class))
+ continue;
+ if (intf.equals(java.io.Serializable.class))
+ continue;
+ if (intf.getName().startsWith("javax.ejb"))
+ continue;
+
+ // FIXME Other aop frameworks might add other interfaces, this should really be configurable
+ if (intf.getName().startsWith("org.jboss.aop"))
+ continue;
+
+ interfaces.add(intf);
+ }
+
+ // If there's no superclass, or we shouldn't check the superclass, return
+ if (!includeSupers || beanClass.getSuperclass() == null)
+ {
+ return interfaces;
+ }
+ else
+ {
+ // Include any superclasses' interfaces
+ return getBusinessInterfaces(beanClass.getSuperclass(), interfaces);
+ }
+ }
+
+
+ public static Class<?>[] getLocalInterfaces(Class<?> beanClass)
+ {
+ // Initialize
+ Set<Class<?>> localAndBusinessLocalInterfaces = new HashSet<Class<?>>();
+
+ // Obtain @Local
+ Local localAnnotation = beanClass.getAnnotation(Local.class);
+
+ // Obtain @LocalHome
+ LocalHome localHomeAnnotation = beanClass.getAnnotation(LocalHome.class);
+
+ // Obtain @Remote
+ Remote remoteAnnotation = beanClass.getAnnotation(Remote.class);
+
+ // Obtain Remote and Business Remote interfaces
+ //Class<?>[] remoteAndBusinessRemoteInterfaces = ProxyFactoryHelper.getRemoteAndBusinessRemoteInterfaces(container);
+
+ // Obtain all business interfaces from the bean class
+ Set<Class<?>> businessInterfacesImplementedByBeanClass = getBusinessInterfaces(beanClass);
+
+ // Obtain all business interfaces directly implemented by the bean class (not including supers)
+ Set<Class<?>> businessInterfacesDirectlyImplementedByBeanClass = getBusinessInterfaces(
+ beanClass, false);
+
+ // For each of the business interfaces implemented by the bean class
+ for (Class<?> clazz : businessInterfacesImplementedByBeanClass)
+ {
+ // If @Local is on the interface
+ if (clazz.isAnnotationPresent(Local.class))
+ {
+ // Add to the list of locals
+ localAndBusinessLocalInterfaces.add(clazz);
+ }
+ }
+
+ // EJBTHREE-1062
+ // EJB 3 Core Specification 4.6.6
+ // If bean class implements a single interface, that interface is assumed to be the
+ // business interface of the bean. This business interface will be a local interface unless the
+ // interface is designated as a remote business interface by use of the Remote
+ // annotation on the bean class or interface or by means of the deployment descriptor.
+ if (businessInterfacesDirectlyImplementedByBeanClass.size() == 1 && localAndBusinessLocalInterfaces.size() == 0)
+ {
+ // Obtain the implemented interface
+ Class<?> singleInterface = businessInterfacesDirectlyImplementedByBeanClass.iterator().next();
+
+ // If not explicitly marked as @Remote, and is a valid business interface
+ if (remoteAnnotation == null && singleInterface.getAnnotation(Remote.class) == null)
+ {
+ // Return the implemented interface, adding to the container
+ Class<?>[] returnValue = new Class[]
+ {singleInterface};
+ return returnValue;
+ }
+ }
+
+ // @Local was defined
+ if (localAnnotation != null)
+ {
+ // If @Local has no value or empty value
+ if (localAnnotation.value() == null || localAnnotation.value().length == 0)
+ {
+ // If @Local is defined with no value and there are no business interfaces
+ if (businessInterfacesImplementedByBeanClass.size() == 0)
+ {
+ return new Class<?>[]
+ {};
+ }
+ // If more than one business interface is directly implemented by the bean class
+ else if (businessInterfacesImplementedByBeanClass.size() > 1)
+ {
+ return new Class<?>[]
+ {};
+ }
+ // JIRA EJBTHREE-1062
+ // EJB 3 4.6.6
+ // If the bean class implements only one business interface, that
+ //interface is exposed as local business if not denoted as @Remote
+ else
+ {
+ // If not explicitly marked as @Remote
+ if (remoteAnnotation == null)
+ {
+ // Return the implemented interface and add to container
+ Class<?>[] returnValue = businessInterfacesImplementedByBeanClass.toArray(new Class<?>[]
+ {});
+ return returnValue;
+ }
+ }
+ }
+ // @Local has value
+ else
+ {
+ // For each of the interfaces in @Local.value
+ for (Class<?> clazz : localAnnotation.value())
+ {
+ // Add to the list of locals
+ localAndBusinessLocalInterfaces.add(clazz);
+ }
+
+ // For each of the business interfaces implemented by the bean class
+ for (Class<?> clazz : businessInterfacesImplementedByBeanClass)
+ {
+ // If @Local is on the interface
+ if (clazz.isAnnotationPresent(Local.class))
+ {
+ // Add to the list of locals
+ localAndBusinessLocalInterfaces.add(clazz);
+ }
+ }
+ }
+ }
+
+ // If local interfaces have been defined/discovered
+ if (localAndBusinessLocalInterfaces.size() > 0)
+ {
+ // Return local interfaces, first adding to the container
+ Class<?>[] rtn = localAndBusinessLocalInterfaces.toArray(new Class<?>[]
+ {});
+ return rtn;
+ }
+
+ // No local or business local interfaces discovered
+ return new Class<?>[]
+ {};
+ }
+
+
+}
\ No newline at end of file
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-01-30 00:21:40 UTC (rev 100152)
+++ trunk/resteasy-int/jar/src/main/java/org/jboss/resteasy/integration/deployers/ResteasyIntegrationDeployer.java 2010-01-30 01:55:34 UTC (rev 100153)
@@ -6,13 +6,12 @@
import org.jboss.deployers.structure.spi.DeploymentUnit;
import org.jboss.logging.Logger;
import org.jboss.metadata.javaee.spec.ParamValueMetaData;
-import org.jboss.metadata.web.jboss.JBossServletMetaData;
import org.jboss.metadata.web.jboss.JBossWebMetaData;
-import org.jboss.metadata.web.spec.ServletMappingMetaData;
-import org.jboss.metadata.web.spec.ServletMetaData;
-import org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher;
+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.ResteasyContextParameters;
-import org.jboss.resteasy.spi.ResteasyDeployment;
import java.util.ArrayList;
import java.util.List;
@@ -30,7 +29,7 @@
super();
addRequiredInput(JBossWebMetaData.class);
- addRequiredInput(ResteasyDeployment.class);
+ addRequiredInput(ResteasyDeploymentData.class);
addOutput(JBossWebMetaData.class);
setStage(DeploymentStages.PRE_REAL); // TODO -- right stage?
}
@@ -40,16 +39,16 @@
}
- protected void setInitParam(ServletMetaData servlet, String name, String value)
+ protected void setInitParam(FilterMetaData filter, String name, String value)
{
ParamValueMetaData param = new ParamValueMetaData();
param.setParamName(name);
param.setParamValue(value);
- List<ParamValueMetaData> params = servlet.getInitParam();
+ List<ParamValueMetaData> params = filter.getInitParam();
if (params == null)
{
params = new ArrayList<ParamValueMetaData>();
- servlet.setInitParam(params);
+ filter.setInitParam(params);
}
params.add(param);
@@ -57,23 +56,18 @@
protected void internalDeploy(DeploymentUnit du) throws DeploymentException
{
- if (du.isAttachmentPresent(ResteasyScannerDeployer.JAXRS_APPLICATION_CLASS_DEPLOYMENT))
- {
- // do not do this deployer if there is an application class a previous deployer will handle it
- return;
- }
-
JBossWebMetaData webdata = du.getAttachment(JBossWebMetaData.class);
- ResteasyDeployment resteasy = du.getAttachment(ResteasyDeployment.class);
+ ResteasyDeploymentData resteasy = du.getAttachment(ResteasyDeploymentData.class);
+ if (!resteasy.shouldCreateDispatcher()) return;
- JBossServletMetaData servlet = new JBossServletMetaData();
- servlet.setServletClass(HttpServletDispatcher.class.getName());
- servlet.setName("Resteasy");
+ FilterMetaData filter = new FilterMetaData();
+ filter.setFilterClass(FilterDispatcher.class.getName());
+ filter.setName("Resteasy");
- if (!resteasy.getResourceClasses().isEmpty())
+ if (!resteasy.getResources().isEmpty())
{
StringBuffer buf = null;
- for (String resource : resteasy.getResourceClasses())
+ for (String resource : resteasy.getResources())
{
if (buf == null)
{
@@ -84,14 +78,15 @@
{
buf.append(",").append(resource);
}
+ log.info("******** Adding RESOURCE CLASS: " + resource);
}
String resources = buf.toString();
- setInitParam(servlet, ResteasyContextParameters.RESTEASY_RESOURCES, resources);
+ setInitParam(filter, ResteasyContextParameters.RESTEASY_RESOURCES, resources);
}
- if (!resteasy.getProviderClasses().isEmpty())
+ if (!resteasy.getProviders().isEmpty())
{
StringBuffer buf = null;
- for (String provider : resteasy.getProviderClasses())
+ for (String provider : resteasy.getProviders())
{
if (buf == null)
{
@@ -103,20 +98,24 @@
buf.append(",").append(provider);
}
}
- setInitParam(servlet, ResteasyContextParameters.RESTEASY_PROVIDERS, buf.toString());
+ setInitParam(filter, ResteasyContextParameters.RESTEASY_PROVIDERS, buf.toString());
}
- ServletMappingMetaData mapping = new ServletMappingMetaData();
- mapping.setServletName("Resteasy");
+ FilterMappingMetaData mapping = new FilterMappingMetaData();
+ mapping.setFilterName("Resteasy");
List<String> patterns = new ArrayList<String>();
patterns.add("/*");
mapping.setUrlPatterns(patterns);
- webdata.getServlets().add(servlet);
- List<ServletMappingMetaData> mappings = webdata.getServletMappings();
+ if (webdata.getFilters() == null)
+ {
+ webdata.setFilters(new FiltersMetaData());
+ }
+ webdata.getFilters().add(filter);
+ List<FilterMappingMetaData> mappings = webdata.getFilterMappings();
if (mappings == null)
{
- mappings = new ArrayList<ServletMappingMetaData>();
- webdata.setServletMappings(mappings);
+ mappings = new ArrayList<FilterMappingMetaData>();
+ webdata.setFilterMappings(mappings);
}
mappings.add(mapping);
}
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-01-30 00:21:40 UTC (rev 100152)
+++ trunk/resteasy-int/jar/src/main/java/org/jboss/resteasy/integration/deployers/ResteasyScannerDeployer.java 2010-01-30 01:55:34 UTC (rev 100153)
@@ -9,15 +9,17 @@
import org.jboss.mcann.Element;
import org.jboss.metadata.javaee.spec.ParamValueMetaData;
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.ResteasyBootstrapClasses;
import org.jboss.resteasy.plugins.server.servlet.ResteasyContextParameters;
-import org.jboss.resteasy.spi.ResteasyDeployment;
import javax.ws.rs.Path;
import javax.ws.rs.core.Application;
import javax.ws.rs.ext.Provider;
import java.util.ArrayList;
+import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -28,18 +30,24 @@
public class ResteasyScannerDeployer extends AbstractRealDeployer
{
private static final Logger LOGGER = Logger.getLogger(ResteasyScannerDeployer.class);
- public static final String JAXRS_APPLICATION_CLASS_DEPLOYMENT = ResteasyScannerDeployer.class.getName() + "-JAXRS_APPLICATION_CLASS_DEPLOYMENT";
+ public static final Set<String> BOOT_CLASSES = new HashSet<String>();
+ static
+ {
+ for (String clazz : ResteasyBootstrapClasses.BOOTSTRAP_CLASSES)
+ {
+ BOOT_CLASSES.add(clazz);
+ }
+ }
+
public ResteasyScannerDeployer()
{
super();
addRequiredInput(JBossWebMetaData.class);
addInput(AnnotationRepository.class);
- addInput(ResteasyDeployment.class);
addOutput(JBossWebMetaData.class);
- addOutput(JAXRS_APPLICATION_CLASS_DEPLOYMENT);
- addOutput(ResteasyDeployment.class);
+ addOutput(ResteasyDeploymentData.class);
setStage(DeploymentStages.PRE_REAL); // TODO -- right stage?
}
@@ -55,9 +63,41 @@
}
+ /**
+ * If any servlet/filter classes are declared, then we probably don't want to scan.
+ *
+ * @param du
+ * @param webdata
+ * @return
+ * @throws DeploymentException
+ */
+ protected boolean scannable(DeploymentUnit du, JBossWebMetaData webdata) throws DeploymentException
+ {
+ ClassLoader loader = du.getClassLoader();
+ if (webdata.getServlets() != null)
+ {
+ for (ServletMetaData servlet : webdata.getServlets())
+ {
+ String servletClass = servlet.getServletClass();
+ if (BOOT_CLASSES.contains(servletClass)) return false;
+ }
+ }
+ if (webdata.getFilters() != null)
+ {
+ for (FilterMetaData filter : webdata.getFilters())
+ {
+ if (BOOT_CLASSES.contains(filter.getFilterClass())) return false;
+ }
+ }
+ return true;
+
+ }
+
protected boolean deployApplicationClass(DeploymentUnit du, JBossWebMetaData webdata) throws DeploymentException
{
ClassLoader loader = du.getClassLoader();
+ if (webdata.getServlets() == null) return false;
+
for (ServletMetaData servlet : webdata.getServlets())
{
String servletClass = servlet.getServletClass();
@@ -73,7 +113,6 @@
}
if (Application.class.isAssignableFrom(clazz))
{
- du.addAttachment(JAXRS_APPLICATION_CLASS_DEPLOYMENT, servletClass);
servlet.setServletClass(HttpServletDispatcher.class.getName());
ParamValueMetaData param = new ParamValueMetaData();
param.setParamName("javax.ws.rs.Application");
@@ -95,34 +134,66 @@
protected void scan(DeploymentUnit du, JBossWebMetaData webdata)
throws DeploymentException
{
- boolean scanAll = true;
- boolean scanProviders = true;
- boolean scanResources = true;
+ ResteasyDeploymentData scanningData = new ResteasyDeploymentData();
+ // If there is a resteasy boot class in web.xml, then the default should not be to scan
+ if (scannable(du, webdata) && !webdata.isMetadataComplete())
+ {
+ scanningData.setScanAll(true);
+ scanningData.setScanProviders(true);
+ scanningData.setScanResources(true);
+ }
+
// check resteasy configuration flags
+
List<ParamValueMetaData> contextParams = webdata.getContextParams();
+ boolean hasResourceParam = false;
+ boolean hasProviderParam = false;
+ boolean hasJndiParam = false;
if (contextParams != null)
{
for (ParamValueMetaData param : contextParams)
{
if (param.getParamName().equals(ResteasyContextParameters.RESTEASY_SCAN))
{
- scanAll = Boolean.valueOf(param.getParamValue());
+ scanningData.setScanAll(Boolean.valueOf(param.getParamValue()));
}
else if (param.getParamName().equals(ResteasyContextParameters.RESTEASY_SCAN_PROVIDERS))
{
- scanProviders = Boolean.valueOf(param.getParamValue());
+ scanningData.setScanProviders(Boolean.valueOf(param.getParamValue()));
}
else if (param.getParamName().equals(ResteasyContextParameters.RESTEASY_SCAN_RESOURCES))
{
- scanResources = Boolean.valueOf(param.getParamValue());
+ scanningData.setScanResources(Boolean.valueOf(param.getParamValue()));
}
+ else if (param.getParamName().equals(ResteasyContextParameters.RESTEASY_RESOURCES))
+ {
+ hasResourceParam = true;
+ }
+ else if (param.getParamName().equals(ResteasyContextParameters.RESTEASY_PROVIDERS))
+ {
+ hasProviderParam = true;
+ }
+ else if (param.getParamName().equals(ResteasyContextParameters.RESTEASY_JNDI_RESOURCES))
+ {
+ hasJndiParam = true;
+ }
}
}
- if (scanAll == false) return;
+ if (!scanningData.shouldScan())
+ {
+ if (hasResourceParam || hasProviderParam || hasJndiParam)
+ {
+ scanningData.createDispatcher();
+ du.addAttachment(ResteasyDeploymentData.class, scanningData);
+ }
+ return;
+ }
+ du.addAttachment(ResteasyDeploymentData.class, scanningData);
+
AnnotationRepository env = du.getAttachment(AnnotationRepository.class);
if (env == null)
{
@@ -132,36 +203,31 @@
Set<Element<Path, Class<?>>> resources = null;
Set<Element<Provider, Class<?>>> providers = null;
- if (scanResources)
+ if (scanningData.isScanResources())
{
resources = env.classIsAnnotatedWith(Path.class);
}
- if (scanProviders)
+ if (scanningData.isScanProviders())
{
providers = env.classIsAnnotatedWith(Provider.class);
}
if ((resources == null || resources.isEmpty()) && (providers == null || providers.isEmpty())) return;
- ResteasyDeployment resteasy = du.getAttachment(ResteasyDeployment.class);
- if (resteasy == null)
- {
- resteasy = new ResteasyDeployment();
- du.addAttachment(ResteasyDeployment.class, resteasy);
- }
-
if (resources != null)
{
for (Element e : resources)
{
- resteasy.getResourceClasses().add(e.getOwnerClassName());
+ if (e.getOwner().isInterface()) continue;
+ scanningData.getResources().add(e.getOwnerClassName());
}
}
if (providers != null)
{
for (Element e : providers)
{
- resteasy.getProviderClasses().add(e.getOwnerClassName());
+ if (e.getOwner().isInterface()) continue;
+ scanningData.getResources().add(e.getOwnerClassName());
}
}
}
Modified: trunk/resteasy-int/test/pom.xml
===================================================================
--- trunk/resteasy-int/test/pom.xml 2010-01-30 00:21:40 UTC (rev 100152)
+++ trunk/resteasy-int/test/pom.xml 2010-01-30 01:55:34 UTC (rev 100153)
@@ -15,5 +15,6 @@
<modules>
<module>application-war</module>
<module>scanned-war</module>
+ <module>ejb-war</module>
</modules>
</project>
Deleted: trunk/resteasy-int/test/scanned-war/scanned-test.iml
===================================================================
--- trunk/resteasy-int/test/scanned-war/scanned-test.iml 2010-01-30 00:21:40 UTC (rev 100152)
+++ trunk/resteasy-int/test/scanned-war/scanned-test.iml 2010-01-30 01:55:34 UTC (rev 100153)
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module relativePaths="true" MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
- <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_5" inherit-compiler-output="false">
- <output url="file://$MODULE_DIR$/target/classes" />
- <output-test url="file://$MODULE_DIR$/target/test-classes" />
- <exclude-output />
- <content url="file://$MODULE_DIR$">
- <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
- <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
- <sourceFolder url="file://$MODULE_DIR$/src/test/resources" isTestSource="true" />
- <excludeFolder url="file://$MODULE_DIR$/target" />
- </content>
- <orderEntry type="inheritedJdk" />
- <orderEntry type="sourceFolder" forTests="false" />
- <orderEntry type="library" name="Maven: junit:junit:4.1" level="project" />
- <orderEntry type="library" name="Maven: org.jboss.test:jboss-test:1.1.4.GA" level="project" />
- <orderEntry type="library" name="Maven: org.apache.ant:ant:1.7.1" level="project" />
- <orderEntry type="library" name="Maven: org.apache.ant:ant-launcher:1.7.1" level="project" />
- <orderEntry type="library" name="Maven: org.apache.ant:ant-junit:1.7.0" level="project" />
- <orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging-spi:2.2.0.CR1" level="project" />
- <orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging-log4j:2.2.0.CR1" level="project" />
- <orderEntry type="library" name="Maven: log4j:log4j:1.2.14" level="project" />
- <orderEntry type="library" name="Maven: org.jboss:jboss-common-core:2.2.17.GA" level="project" />
- <orderEntry type="library" name="Maven: jboss.profiler.jvmti:jboss-profiler-jvmti:1.0.0.CR5" level="project" />
- <orderEntry type="library" name="Maven: org.jboss.jbossas:jboss-server-manager:1.0.2.GA" level="project" />
- <orderEntry type="library" name="Maven: org.jboss.naming:jnp-client:5.0.4.GA" level="project" />
- <orderEntry type="library" name="Maven: org.jboss.security:jbosssx-client:2.1.0.20091223" level="project" />
- <orderEntry type="library" name="Maven: org.jboss.security:jboss-security-spi:2.1.0.20091223" level="project" />
- <orderEntry type="library" name="Maven: org.jboss.resteasy:resteasy-jaxrs:1.2.1.GA" level="project" />
- <orderEntry type="library" name="Maven: org.jboss.resteasy:jaxrs-api:1.2.1.GA" level="project" />
- <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.5.6" level="project" />
- <orderEntry type="library" name="Maven: org.slf4j:slf4j-simple:1.5.8" level="project" />
- <orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.5.6" level="project" />
- <orderEntry type="library" name="Maven: org.scannotation:scannotation:1.0.2" level="project" />
- <orderEntry type="library" name="Maven: javassist:javassist:3.11.0.GA" level="project" />
- <orderEntry type="library" name="Maven: javax.annotation:jsr250-api:1.0" level="project" />
- <orderEntry type="library" name="Maven: javax.activation:activation:1.1" level="project" />
- <orderEntry type="library" name="Maven: commons-httpclient:commons-httpclient:3.1" level="project" />
- <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.3" level="project" />
- <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.0" level="project" />
- <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.0.1" level="project" />
- <orderEntry type="library" name="Maven: net.jcip:jcip-annotations:1.0" level="project" />
- </component>
-</module>
-
Modified: trunk/resteasy-int/zip/assembly.xml
===================================================================
--- trunk/resteasy-int/zip/assembly.xml 2010-01-30 00:21:40 UTC (rev 100152)
+++ trunk/resteasy-int/zip/assembly.xml 2010-01-30 01:55:34 UTC (rev 100153)
@@ -11,6 +11,7 @@
<directory></directory>
<includes>
<include>resteasy-jboss-beans.xml</include>
+ <include>resteasy-ejb-jboss-beans.xml</include>
</includes>
<outputDirectory>resteasy.deployer/META-INF</outputDirectory>
</fileSet>
@@ -21,6 +22,13 @@
<useTransitiveFiltering>true</useTransitiveFiltering>
<includes>
<include>org.jboss.jbossas:jboss-as-resteasy</include>
+ <include>org.jboss.resteasy:resteasy-jaxrs</include>
+ <include>org.jboss.resteasy:resteasy-jaxb-provider</include>
+ <include>org.jboss.resteasy:resteasy-jettison-provider</include>
+ <include>org.jboss.resteasy:resteasy-atom-provider</include>
+ <include>org.jboss.resteasy:resteasy-multipart-provider</include>
+ <include>org.jboss.resteasy:resteasy-jackson-provider</include>
+ <include>org.jboss.resteasy:resteasy-yaml-provider</include>
</includes>
<outputDirectory>resteasy.deployer</outputDirectory>
</dependencySet>
Modified: trunk/resteasy-int/zip/pom.xml
===================================================================
--- trunk/resteasy-int/zip/pom.xml 2010-01-30 00:21:40 UTC (rev 100152)
+++ trunk/resteasy-int/zip/pom.xml 2010-01-30 01:55:34 UTC (rev 100153)
@@ -42,7 +42,73 @@
</exclusions>
</dependency>
+ <dependency>
+ <groupId>org.jboss.resteasy</groupId>
+ <artifactId>jaxrs-api</artifactId>
+ <version>2.0-beta-1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.resteasy</groupId>
+ <artifactId>resteasy-atom-provider</artifactId>
+ <version>2.0-beta-1</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.resteasy</groupId>
+ <artifactId>resteasy-guice</artifactId>
+ <version>2.0-beta-1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.resteasy</groupId>
+ <artifactId>resteasy-jaxb-provider</artifactId>
+ <version>2.0-beta-1</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.resteasy</groupId>
+ <artifactId>resteasy-jettison-provider</artifactId>
+ <version>2.0-beta-1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.resteasy</groupId>
+ <artifactId>resteasy-jackson-provider</artifactId>
+ <version>2.0-beta-1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.resteasy</groupId>
+ <artifactId>resteasy-multipart-provider</artifactId>
+ <version>2.0-beta-1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.resteasy</groupId>
+ <artifactId>resteasy-spring</artifactId>
+ <version>2.0-beta-1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.resteasy</groupId>
+ <artifactId>resteasy-yaml-provider</artifactId>
+ <version>2.0-beta-1</version>
+ </dependency>
+
</dependencies>
<build>
Copied: trunk/resteasy-int/zip/resteasy-ejb-jboss-beans.xml (from rev 99996, trunk/resteasy-int/zip/resteasy-jboss-beans.xml)
===================================================================
--- trunk/resteasy-int/zip/resteasy-ejb-jboss-beans.xml (rev 0)
+++ trunk/resteasy-int/zip/resteasy-ejb-jboss-beans.xml 2010-01-30 01:55:34 UTC (rev 100153)
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns="urn:jboss:bean-deployer:2.0">
+ <bean name="ResteasyEjbDeployer" class="org.jboss.resteasy.integration.deployers.ResteasyEjbDeployer"/>
+</deployment>
\ No newline at end of file
More information about the jboss-cvs-commits
mailing list