Como algunos saben Jersey es una implementacion para construir web services, a mi parecer bastante util ya q contruye la estructuras de las salidas del webservice desde annotations agregadas a las clases que se van a utilizar para construir la salida. Jersey puede ser integrado con Spring de una manera bastante simple, lo unico tedioso va a ser la configuracion del descriptor de la aplicacion web.
Herramientas para apoyarse:
Eclipse Helios junto con el plugin de Maven para eclipse.
Asumase que los siguientes pasos son para montar una aplicacion sin involucrar la configuracion por ejemplo de la logica del negocio(conexion a base de datos, deploy, etc), para ello aqui queda el codigo fuente de toda la aplicacion.
1) Primero que todo para montar esta aplicacion se requiere utilizar el arquetipo de maven
maven-arquetype-webapp
2) Apartir de la creacion del proyecto de maven con eclipse se procede a modificar el archivo pom.xml generado por el wizard de la siguiente manera :
a) Agregar los repositorios para solicitar las librerias de spring :
<repositories>
<repository>
<id>com.springsource.repository.bundles.release</id>
<name>SpringSource Enterprise Bundle Repository - SpringSource Releases</name>
<url>http://repository.springsource.com/maven/bundles/release</url>
</repository>
<repository>
<id>com.springsource.repository.bundles.external</id>
<name>SpringSource Enterprise Bundle Repository - External Releases</name>
<url>http://repository.springsource.com/maven/bundles/external</url>
</repository>
<repository>
<id>com.springsource.repository.bundles.milestone</id>
<name>SpringSource Enterprise Bundle Repository - SpringSource Milestones</name>
<url>http://repository.springsource.com/maven/bundles/milestone</url>
</repository>
<repository>
<id>com.springsource.repository.bundles.snapshot</id>
<name>SpringSource Enterprise Bundle Repository - Snapshot Releases</name>
<url>http://repository.springsource.com/maven/bundles/snapshot</url>
</repository>
</repositories>
<repository>
<id>com.springsource.repository.bundles.release</id>
<name>SpringSource Enterprise Bundle Repository - SpringSource Releases</name>
<url>http://repository.springsource.com/maven/bundles/release</url>
</repository>
<repository>
<id>com.springsource.repository.bundles.external</id>
<name>SpringSource Enterprise Bundle Repository - External Releases</name>
<url>http://repository.springsource.com/maven/bundles/external</url>
</repository>
<repository>
<id>com.springsource.repository.bundles.milestone</id>
<name>SpringSource Enterprise Bundle Repository - SpringSource Milestones</name>
<url>http://repository.springsource.com/maven/bundles/milestone</url>
</repository>
<repository>
<id>com.springsource.repository.bundles.snapshot</id>
<name>SpringSource Enterprise Bundle Repository - Snapshot Releases</name>
<url>http://repository.springsource.com/maven/bundles/snapshot</url>
</repository>
</repositories>
b)Agregar las dependencias necesarias (Spring, Jersey, Integracion Spring-Jersey, etc...)
<!-- LOGICA DE NEGOCIO -->
<dependency>
<groupId>com.bookings</groupId>
<artifactId>events_bookings</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!-- SPRING -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>org.springframework.web.servlet</artifactId>
<version>3.0.5.RELEASE</version>
</dependency>
<!-- JERSEY WEB SERVICES -->
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.9</version>
</dependency>
<!-- JERSEY / SPRING INTEGRATION -->
<dependency>
<groupId>com.sun.jersey.contribs</groupId>
<artifactId>jersey-spring</artifactId>
<version>1.9</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-asm</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.bookings</groupId>
<artifactId>events_bookings</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!-- SPRING -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>org.springframework.web.servlet</artifactId>
<version>3.0.5.RELEASE</version>
</dependency>
<!-- JERSEY WEB SERVICES -->
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.9</version>
</dependency>
<!-- JERSEY / SPRING INTEGRATION -->
<dependency>
<groupId>com.sun.jersey.contribs</groupId>
<artifactId>jersey-spring</artifactId>
<version>1.9</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-asm</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
</exclusion>
</exclusions>
</dependency>
3) Ahora se procedera a configurar en archivo descriptor de la aplicacion web :
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Bookings WebServices</display-name>
<context-param>
<!-- Ruta en classpath para acceder al archivo de configuracion de Spring -->
<param-name>contextConfigLocation</param-name>
<param-value>classpath:configuration.xml</param-value>
</context-param>
<!-- Listener para inicializar spring -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Listener para ser utilizado junto a herramientas de terceros JSF, Jersey, etc... -->
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
<!-- Servlet para procesar los requests a los webservices Jersey, parte de la integracion Jersey-Spring -->
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
<init-param>
<!-- Se define el paquete en donde se encontraran las clases que reciben los requests -->
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.bookings.events_bookings.web.services</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<!-- Se define como se van a mapear las urls utilizadas para hacer requests a los webservices -->
<servlet-name>Jersey Web Application</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Bookings WebServices</display-name>
<context-param>
<!-- Ruta en classpath para acceder al archivo de configuracion de Spring -->
<param-name>contextConfigLocation</param-name>
<param-value>classpath:configuration.xml</param-value>
</context-param>
<!-- Listener para inicializar spring -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Listener para ser utilizado junto a herramientas de terceros JSF, Jersey, etc... -->
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
<!-- Servlet para procesar los requests a los webservices Jersey, parte de la integracion Jersey-Spring -->
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
<init-param>
<!-- Se define el paquete en donde se encontraran las clases que reciben los requests -->
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.bookings.events_bookings.web.services</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<!-- Se define como se van a mapear las urls utilizadas para hacer requests a los webservices -->
<servlet-name>Jersey Web Application</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
El proximo paso es modificar las configuraciones de Spring, que lo unico distinto que va a tener a una configuracion normal, es que se necesita utilizar el tag component scan para definir en que paquetes vamos a querer que se instancien y construyan las dependencias automaticamente, en este caso va a ser el paquete en donde se encuentran las clases a donde se mapearan los requests a los webservices.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:component-scan base-package="com.bookings.events_bookings.web.services" />
<!-- CONFIGURATION VALUES -->
<bean id="placeholderConfig"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:deployment.properties">
</property>
</bean>
<import resource="com/bookings/spring/aop-configuration.xml" />
<import resource="com/bookings/spring/data-configuration.xml" />
<import resource="com/bookings/spring/services-configuration.xml" />
</beans>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:component-scan base-package="com.bookings.events_bookings.web.services" />
<!-- CONFIGURATION VALUES -->
<bean id="placeholderConfig"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:deployment.properties">
</property>
</bean>
<import resource="com/bookings/spring/aop-configuration.xml" />
<import resource="com/bookings/spring/data-configuration.xml" />
<import resource="com/bookings/spring/services-configuration.xml" />
</beans>
Espero que este post sea de alguna utilidad...
0 comentarios:
Publicar un comentario en la entrada