Saturday July 7, 2007 20:47
Usar Spring e Hibernate con Axis web services
Posted by admin as Java, JDO/DAO, Programación, Spring framework
Necesitaba mejorar una aplicación de web services que había realizado tiempo atrás por lo que me puse manos a la obra para bsucar las herramientas mas convenientes.
Decidí usar Hibernate para la capa DAO pero embebido en Spring de forma tal de que este manejara el tema transaccional y asi tambien aprovechar las ventajas que me podría aportar este framework (configuración con xml, IoC, etc).
Al comenzar a preparar todo me choqué con el mayor problema: como hacer para que se definiera el contexto de Spring al arrancar y que luego mi aplicación lograra acceder a dicho contexto para obtener las instancias de los objetos que Spring había creado.
Luego de muchas vueltas encontré una solución.
Spring cuenta con una clase llamada ServletEndpointSupport que sirve para estos fines.
Por lo tanto, hice mi aplicación asi:
Primero en mi web.xml definí lo siguiente:
<web -app> <display -name>Apache-Axis</display> </web> <param -name>contextConfigLocation</param> <param -value>/WEB-INF/applicationContext.xml, /WEB-INF/applicationContext-service.xml, /WEB-INF/applicationContext-dao.xml</param> <listener> </listener><listener -class> org.apache.axis.transport.http.AxisHTTPSessionListener </listener> <listener> </listener><listener -class> org.springframework.web.context.ContextLoaderListener </listener>
Donde con los contextparameter definí las propiedades que quería pasarle a mi aplicación al momento de arrancar para luego definir el contextloaderlistener de Spring, el cual se encargará de iniciar el contexto del framework.
Teniendo esto definido, mi aplicación puede hacer lo siguiente:
public class NotificationsWSImpl extends ServletEndpointSupport implements NotificationsWS { private NotificationService notificationServiceImpl; protected final void onInit() { this.notificationServiceImpl = (NotificationService) getWebApplicationContext().getBean("notificationService"); } }
de esta forma, mi aplicación puede obtener los beans definidos por Spring y asi acceder a la capa services/dao de una forma elegante.