Weld

Resteasy / Weld / Tomcat7

25 January 2015 08:56 root Java, Resteasy, Tomcat, Weld

Ajourd'hui, je vous propose un tous petit tuto pour se lancer sur les services Rest avec RestEasy sur Tomcat7 mais cette fois-ci avec de l'injection via Weld.

pom.xml

Commençons par le pom.xml. Voici les dépendances qu'il vous faut :

<dependency>
   <groupId>org.jboss.resteasy</groupId>
   <artifactId>resteasy-jaxrs</artifactId>
   <version>3.0.10.Final</version>
</dependency>
<dependency>
   <groupId>org.jboss.resteasy</groupId>
   <artifactId>resteasy-cdi</artifactId>
   <version>3.0.10.Final</version>
</dependency>
<dependency>
   <groupId>org.jboss.weld.servlet</groupId>
   <artifactId>weld-servlet</artifactId>
   <version>2.2.8.Final</version>
</dependency>

web.xml

Voici in exemple de configuration fonctionnel pour le web.xml. Je reviendrais plus tard sur la class shionn.tuto.Services.

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    version="2.5">
  <display-name>Tuto</display-name>

  <!-- déclaration de l'injection -->
  <listener>
    <listener-class>org.jboss.weld.environment.servlet.Listener</listener-class>
  </listener>
  <resource-env-ref>
    <resource-env-ref-name>BeanManager</resource-env-ref-name>
    <resource-env-ref-type>javax.enterprise.inject.spi.BeanManager</resource-env-ref-type>
  </resource-env-ref>
  <context-param>
    <param-name>resteasy.injector.factory</param-name>
    <param-value>org.jboss.resteasy.cdi.CdiInjectorFactory</param-value>
  </context-param>

  <!-- déclaration de RestEasy -->
  <servlet>
    <servlet-name>Resteasy</servlet-name>
    <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
    <init-param>
      <param-name>javax.ws.rs.Application</param-name>
      <param-value>shionn.tuto.Services</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Resteasy</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>
</web-app>

beans.xml

Pour que l'injection fonctionne, il faut définir un fichier beans.xml dans le dossier WEB-INF, sinon cela ne marche pas.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
      http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
</beans>

Code

La classe shionn.tuto.Services que nous avons définit dans le web.xml, doit hériter de javax.ws.rs.core.Application. On peu surcharger deux méthodes getClasses() et getSingletons(), revoyant les classes se chargeant des services webs. Voici un exemple avec un service HelloWorld.