{"id":68,"date":"2009-03-26T15:54:51","date_gmt":"2009-03-26T19:54:51","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/lespin\/?p=68"},"modified":"2009-03-26T15:54:51","modified_gmt":"2009-03-26T19:54:51","slug":"liferay-52-dwr","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/lespin\/2009\/03\/26\/liferay-52-dwr\/","title":{"rendered":"Liferay 5.2 + DWR"},"content":{"rendered":"<p>Continuando con el desarrollo de portlets en Liferay, me top\u00e9 con la necesidad de investigar sobre respuestas as\u00edncronas de parte del servidor a los clientes. Consultando con profesores y amigos, me sugirieron leer sobre COMET, una t\u00e9cnica muy similar a AJAX con la diferencia que envia respuestas sin que el cliente las solicite.<\/p>\n<p>As\u00ed encontr\u00e9 DWR (Direct Web Remoting: <cite>directwebremoting.org<\/cite>) una librer\u00eda de JAVA, que permite la interacci\u00f3n as\u00edncrona del servidor (Java) con los clientes (javascript). Aqu\u00ed m\u00e1s sobre DWR (http:\/\/directwebremoting.org\/dwr\/overview\/dwr)<\/p>\n<p>Busqu\u00e9 en el sitio de Liferay m\u00e1s informaci\u00f3n sobre DWR y portlets, pero no me ayud\u00f3 mucho, pues en la wiki dan una explicaci\u00f3n muy general y no est\u00e1 actualizado con la \u00faltima versi\u00f3n de liferay 5.2.x. Encontr\u00e9 un art\u00edculo muy bueno en la web (<a href=\"http:\/\/soaagenda.com\/journal\/articulos\/el-mejor-ejemplo-dwr-o-el-mejor-tutorial-dwr\/\" target=\"_blank\">link<\/a>) de como hacer una aplicaci\u00f3n web utilizando DWR, me ayud\u00f3 mucho pero no lo explicaba con liferay. As\u00ed que me toc\u00f3 hacer un h\u00edbrido entre este articulo, la wiki de liferay, el sitio de DWR y sobre todo mucha prueba y error.<\/p>\n<p>Aqu\u00ed los pasos a seguir:<\/p>\n<div id=\"attachment_71\" style=\"width: 207px\" class=\"wp-caption alignleft\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-71\" class=\"size-full wp-image-71\" src=\"http:\/\/blog.espol.edu.ec\/lespin\/files\/2009\/03\/liferay_webinf.jpg\" alt=\"WEB-INF Liferay\" width=\"197\" height=\"325\" srcset=\"https:\/\/blog.espol.edu.ec\/lespin\/files\/2009\/03\/liferay_webinf.jpg 197w, https:\/\/blog.espol.edu.ec\/lespin\/files\/2009\/03\/liferay_webinf-181x300.jpg 181w\" sizes=\"auto, (max-width: 197px) 100vw, 197px\" \/><p id=\"caption-attachment-71\" class=\"wp-caption-text\">WEB-INF Liferay<\/p><\/div>\n<ol>\n<li>Descargar la \u00faltima versi\u00f3n estable de DWR (dwr.jar) (<a title=\"DWR Official Site\" href=\"http:\/\/directwebremoting.org\/dwr\/download\" target=\"_blank\">link<\/a>)<\/li>\n<li>Copiar el jar en la carpeta WEB-INF-&gt;lib (ver Fig. 1)<\/li>\n<li>Configurar dwr en liferay<\/li>\n<li>Abrir el archivo web.xml que ets\u00e1 en la carpeta WEB-INF (ver Fig. 1)<\/li>\n<li>Agregar lo siguiente:<\/li>\n<p><span style=\"color: #800080\">&lt;servlet&gt;<br \/>\n&lt;servlet-name&gt;dwr-invoker&lt;\/servlet-name&gt;<br \/>\n&lt;display-name&gt;DWR Servlet&lt;\/display-name&gt;<br \/>\n&lt;servlet-class&gt;org.directwebremoting.servlet.DwrServlet&lt;\/servlet-class&gt;<br \/>\n&lt;init-param&gt;<br \/>\n&lt;param-name&gt;debug&lt;\/param-name&gt;<br \/>\n&lt;param-value&gt;true&lt;\/param-value&gt;<br \/>\n&lt;\/init-param&gt;<br \/>\n&lt;\/servlet&gt;<\/span><\/p>\n<p><span style=\"color: #800080\">&lt;servlet-mapping&gt;<br \/>\n&lt;servlet-name&gt;dwr-invoker&lt;\/servlet-name&gt;<br \/>\n&lt;url-pattern&gt;\/dwr\/*&lt;\/url-pattern&gt;<br \/>\n&lt;\/servlet-mapping&gt;<\/span><\/p>\n<li>En esa misma carpeta WEB-INF crear un archivo dwr.xml<\/li>\n<li>Copiar lo siguiente por el momento<span style=\"color: #800080\"><br \/>\n&lt;dwr&gt;<br \/>\n&lt;allow&gt;<br \/>\n<\/span><span style=\"color: #800080\"> <\/span><span style=\"color: #800080\"> <\/span><span style=\"color: #800080\"> <\/span><span style=\"color: #800080\"> <\/span><span style=\"color: #800080\">&lt;!-- define la clase de servicios que se va a publicar mediante DWR --&gt;<br \/>\n<\/span><span style=\"color: #800080\"> <\/span><span style=\"color: #800080\"> <\/span><span style=\"color: #800080\"> <\/span><span style=\"color: #800080\"> <\/span><span style=\"color: #800080\">&lt;!-- defines the service class to share across DWR --&gt;<br \/>\n<\/span><span style=\"color: #800080\"> <\/span><span style=\"color: #800080\"> <\/span><span style=\"color: #800080\"> <\/span><span style=\"color: #800080\"> &lt;create creator=\"new\" javascript=\"JDate\"&gt;<br \/>\n<\/span><span style=\"color: #800080\"> <\/span><span style=\"color: #800080\"> <\/span><span style=\"color: #800080\"> <\/span><span style=\"color: #800080\"> <\/span><span style=\"color: #800080\"> <\/span><span style=\"color: #800080\"> <\/span><span style=\"color: #800080\">&lt;param name=\"class\" value=\"java.util.Date\"\/&gt;<br \/>\n<\/span><span style=\"color: #800080\"> <\/span><span style=\"color: #800080\"> <\/span><span style=\"color: #800080\"> <\/span><span style=\"color: #800080\">&lt;\/create&gt;<br \/>\n<\/span><span style=\"color: #800080\"> <\/span><span style=\"color: #800080\"> <\/span><span style=\"color: #800080\">&lt;\/allow&gt;<br \/>\n&lt;\/dwr&gt;<\/span><\/li>\n<li>Probar el DWR en <span style=\"color: #ff0000\">http:\/\/localhost:&lt;puerto&gt;\/dwr<\/span><\/li>\n<li>Deber\u00eda salir una p\u00e1gina con el link de JDate, si es as\u00ed perfecto!<\/li>\n<li>Luego Creamos el portlet (yo utilizo netbeans, pero tambi\u00e9n se lo puede hacer con eclipse)<\/li>\n<li>Estos 2 IDEs crean todo lo necesario de un portlet, claro deben tener instalado el plugin de liferay para netbeans o eclipse, como sea el caso (Para eclipse existe Lomboz pero hasta la versi\u00f3n 4.0 de Liferay).<\/li>\n<li>Crear Clases necesarias (dependiendo de la necesidad u objetivo del portlet)<\/li>\n<li>Compilar las clases\n<p><div id=\"attachment_69\" style=\"width: 167px\" class=\"wp-caption alignleft\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-69\" class=\"size-full wp-image-69\" src=\"http:\/\/blog.espol.edu.ec\/lespin\/files\/2009\/03\/liferay_herarchy.jpg\" alt=\"Carpeta Liferay + tomcat\" width=\"157\" height=\"403\" \/><p id=\"caption-attachment-69\" class=\"wp-caption-text\">Carpeta Liferay + tomcat<\/p><\/div><\/li>\n<li>Copiar todo el paquete de clases generado en la compilaci\u00f3n y pegarlo en la carpeta shared--&gt;classes (ver Fig.2)<\/li>\n<li>Luego agregar dicha clase en el archivo DWR que creamos en el paso 7<br \/>\n<span style=\"color: #800080\">&lt;create creator=\"new\" javascript=\"&lt;nombre de la clase&gt;\"&gt;<br \/>\n&lt;param name=\"class\" value=\"&lt;paquete&gt;.&lt;nombre de la clase&gt;\"\/&gt;<br \/>\n&lt;\/create&gt;<br \/>\n&lt;convert converter=\"bean\" match=\"&lt;paquete&gt;.*\"\/&gt;<\/span><\/li>\n<li>El bean es solo si se necesita utilizarlo, sino no es necesario.<\/li>\n<li>Ejecutamos el paso 8<\/li>\n<li>Y si sale el link de nuestra clase, todo est\u00e1 perfecto.<\/li>\n<li>Ahora lo que resta es llamar desde javascript a nuestro codigo java.<br \/>\nEn mi caso:<br \/>\nSchedulerService.getSchedule(id,showScheduler);<\/p>\n<p>En donde SchedulerService es el nombre de la clase y getShedule es el m\u00e9todo declarado en la clase anteriormente mencionada. Este m\u00e9todo solo recibe un par\u00e1metro, pero al utilizar DWR se le debe pasar tambi\u00e9n una funci\u00f3n (callback), en este caso showScheduler. Esta funci\u00f3n callback recibe como par\u00e1metro la respuesta que retorna el metodo java, y es la que se encargar\u00e1 de manipular la informaci\u00f3n (parsear, mostrar, etc.)<\/li>\n<li>Desde view.jsp incluimos al js antes creado y listo.<\/li>\n<\/ol>\n<p>Un poco largo, pero si funciona \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Continuando con el desarrollo de portlets en Liferay, me top\u00e9 con la necesidad de investigar sobre respuestas as\u00edncronas de parte del servidor a los clientes. Consultando con profesores y amigos, me sugirieron leer sobre COMET, una t\u00e9cnica muy similar a AJAX con la diferencia que envia respuestas sin que el cliente las solicite. As\u00ed encontr\u00e9 [&hellip;]<\/p>\n","protected":false},"author":131,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[20009],"tags":[3338,5360,5362,5361,4434,5359,2282],"class_list":["post-68","post","type-post","status-publish","format-standard","hentry","category-none","tag-ajax","tag-dwr","tag-java","tag-jsp","tag-liferay","tag-liferay-52","tag-social-network"],"_links":{"self":[{"href":"https:\/\/blog.espol.edu.ec\/lespin\/wp-json\/wp\/v2\/posts\/68","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.espol.edu.ec\/lespin\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.espol.edu.ec\/lespin\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/lespin\/wp-json\/wp\/v2\/users\/131"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/lespin\/wp-json\/wp\/v2\/comments?post=68"}],"version-history":[{"count":2,"href":"https:\/\/blog.espol.edu.ec\/lespin\/wp-json\/wp\/v2\/posts\/68\/revisions"}],"predecessor-version":[{"id":75,"href":"https:\/\/blog.espol.edu.ec\/lespin\/wp-json\/wp\/v2\/posts\/68\/revisions\/75"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/lespin\/wp-json\/wp\/v2\/media?parent=68"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/lespin\/wp-json\/wp\/v2\/categories?post=68"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/lespin\/wp-json\/wp\/v2\/tags?post=68"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}