Si hay algo que me gusta de los módulos OSGI es lo elegante que te queda todo, no hace falta configurar ficheros XML y prácticamente puedes tener la lógica de algo en una misma classe. Muy fácil de modularizar y distribuir.
En este artículo veremos la fácil que es crear un Servlet dentro de un módulo OSGI en Liferay 7. Simplemente declaramos una classe que extienda de ‘HttpServlet’ y la anotamos para que el Framework interprete que es un Servlet y como tiene que desplegarlo. Veamos un ejemplo:
@Component( immediate = true, property = { "osgi.http.whiteboard.context.path=/", "osgi.http.whiteboard.servlet.name=com.lostsys.formacion.MiServlet", "osgi.http.whiteboard.servlet.pattern=/miservlet", }, service = Servlet.class) public class MiServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { /* Aquí el código a ejecutar para peticiones tipo GET */ } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { /* Aquí el código a ejecutar para peticiones tipo Post */ } }
Básicamente la anotamos como componente OSGI(@Component), le configuramos un nombre de Servlet(osgi.http.whiteboard.servlet.name) y una URL donde se desplegará(osgi.http.whiteboard.servlet.pattern) y ya lo tendríamos. El resto es extender la classe de ‘HttpServlet’ y todo es como un Servlet de toda la vida, eso si, sin configurar ningún XML.
Atención, este servlet se desplegará en la URL ‘/o/miservlet’. El motivo es que Liferay 7 siempre pondrá el prefijo ‘/o’, es una de esas cosas que tiene Liferay 😀 .
En fin, espero que os sea de utilidad y que paséis unas felices fiestas y una buena entrada de año, con cariño.