Páginas

domingo, 20 de mayo de 2012

Migración desde Jetty 6 a Jetty 8

Siempre suelo trabajar con Jetty como servidor local utilizando el plugin que éste proporciona para Maven. A pesar de que me gusta trabajar con las últimas versiones de las librerías con las que trabajo, hace poco me di cuenta de que no estaba trabajando con la última versión de Jetty, la 8. El error era debido a que desde su versión 7 Jetty pasó a formar parte de la fundación Eclipse y esto hizo que cambiaran de paquetes y que el plugin para Maven cambiara de nombre. Mientras que la versión 6 de Jetty y anteriores se encuentra bajo en artifact maven-jetty-plugin, la 7 y posteriores se encuentran bajo jetty-maven-plugin. Así, la configuración del Plugin de Maven para la nueva versión quedaría así:

<plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>8.1.3.v20120416</version> <configuration> <webAppConfig> <contextPath>/</contextPath> </webAppConfig> </configuration> </plugin>
Esta sería su configuración más sencilla, sin embargo, si estamos utilizando configuración más compleja directamente sobre el plugin o a través del archivo jetty.xml también debemos tener en cuenta la repaquetización que he comentado antes.

Digamos que queremos configurar un recurso JNDI como podría ser la conexión a la base de datos. Antes, esto se hacía sobre la configuración del servidor y la clase org.mortbay.jetty.Server en el archivo jetty.xml mientras que ahora el uso del archivo jetty.xml queda para la configuración del servidor y el archivo jetty-env.xml para la configuración de nuestra aplicación Web. Así, teniendo el cuenta los nuevos paquetes, la configuración del recurso JNDI en el fichero jetty-env.xml quedaría así:
<Configure class="org.eclipse.jetty.webapp.WebAppContext"> <New id="epago" class="org.eclipse.jetty.plus.jndi.Resource"> <Arg>jdbc/epago</Arg> <Arg> <New class="org.apache.commons.dbcp.BasicDataSource"> <Set name="driverClassName">oracle.jdbc.OracleDriver</Set> <Set name="url">jdbc:oracle:thin:@172.111.111.111:1521:XE</Set> <Set name="username">user</Set> <Set name="password">pass</Set> </New> </Arg> </New> </Configure>
¿Y si queremos hacer algún cambio en la confiugraicón del servidor, como podría ser el puerto de arranque? Como hemos dicho, esta configuración sí sería propia del archivo jetty.xml y seria algo así:
<Configure class="org.eclipse.jetty.server.Server"> <Call name="addConnector"> <Arg> <New class="org.eclipse.jetty.server.nio.SelectChannelConnector"> <Set name="port">8081</Set> <Set name="maxIdleTime">3000</Set> </New> </Arg> </Call> </Configure>
Finalmente, veamos cómo quedaría la configuración del plugin:
<plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>8.1.3.v20120416</version> <dependencies> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.2.2</version> </dependency> <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> <version>11.2.0.2.0</version> </dependency> </dependencies> <configuration> <webAppConfig> <contextPath>/myApp</contextPath> </webAppConfig> <systemProperties> <systemProperty> <name>javax.net.ssl.trustStore</name> <value>d:/Keystore</value> </systemProperty> </systemProperties> <jettyEnvXml>target/${project.build.finalName}/WEB-INF/jetty-env.xml</jettyEnvXml> <jettyXml>target/${project.build.finalName}/WEB-INF/jetty.xml</jettyXml> </configuration> </plugin>
En la última configuración se puede ver cómo se hacen referencia a los archivos jetty.xml y jetty-env.xml antes nombrados, cómo se añaden librerías necesarioas para el recurso JNDI definido y cómo, finalmente, se configura para que trabaje con un almecén de claves seguro y así poder acceder a recursos seguros como podría ser un servicio Web bajo HTTPS.

Algunos enlaces de interes:

No hay comentarios:

Publicar un comentario