Instalación de Liferay en un servidor GlassFish v3 para producción
En un anterior post mencioné los Portales en Java, y la facilidad que nos da el utilizar una plataforma con muchas funcionalidades, y nosotros simplemente deberíamos hacer los componentes que faltan. Estos componentes se llaman Portlets.
Ahora mencionaré uno de los gestores de Portlets en Java que, según mi opinión, es bastante útil. Su nombre LIFERAY. Pero no hablaré de sus cualidades, ni todo lo que puede hacer.. eso ya lo hizo Pedro Edison en su blog
Esto no lo he inventado, sino lo tomé del tutorial mismo de Liferay... pero como está en inglés, y el lector promedio de este blog busca más información en castellano, quiero hacer un aporte a la comunidad con este post.
Para esta tarea necesitamos lo siguiente:
A partir de este momento, cada vez que mencione
Ahora, extraemos el contenido del archivo liferay-portal-dependencies-5.2.3.zip en cualquier carpeta, luego tomamos los archivos .jar que se obtuvieron y los pondremos dentro de
Después de esto, iniciamos el GlassFish v3...
... para continuar con el siguiente paso.
Debemos modificar las propiedades de la máquina virtual donde se ejecutará el Liferay. Para ello seleccionamos del menú de la izquierda: Configuration > JVM Settings.
Y cambiamos los valores de MaxPermSize y Xmx a los siguientes:
Clic en "Save". Detenemos el GlassFish, y lo volvemos a iniciar.
Hacemos clic en el botón "New..." para crear una nuevo Pool de Conexiones. Escribimos:
Clic en Next.
Ahora, se mostrarán todas las propiedades de la conexión a la base de datos. Activamos el primer check llamado Ping: Enabled. Esto nos permitirá verificar si la conexión fue correcta después de crear el pool de conexiones. Luego buscamos las siguientes propiedades, y ponemos los valores que se muestran a continuación:
Hacemos clic en el botón "Save", y si todo está correcto, se creará sin problema.
Con esto solo hemos creado un Pool de Conexión, ahora necesitamos registrarlo en el JNDI del Servidor. Para ello, seleccionamos la opción Resources > JDBC > JDBC Resources
Hacemos clic en "New..." y escribimos los siguientes valores en los campos:
JNDI Name: jdbc/LiferayPool
Pool Name: LiferayPool
... y luego ponerlo dentro del .war (en el directorio WEB-INF/classes dentro del .war) antes de desplegarlo.
Notar que el nombre del JNDI (jdbc/LiferayPool) debe ser exacto cómo se configuró en GlassFish en el paso anterior.
Si te es complicado crear el archivo, aquí puedes descargarlo: http://java.net/downloads/apuntes/resources/liferay/portal-ext.properties
Y si te es complicado poner el .properties dentro del .war, aquí ya tengo un .war preparado (que es el que uso en las instalaciones de Liferay)
http://java.net/downloads/apuntes/resources/liferay/liferay-portal-5.2.3.war
Ahora sí, tomar mucho cuidado con lo siguiente que se va a explicar respecto al despliegue del .war
En la consola del GlassFish, ir a la opción "Applications" del menú izquierdo, y hacemos clic en el botón "Deploy...". En la opción "Location", seleccionamos el archivo .war que de liferay. Al hacer esto, se mostrarán más opciones que corresponden a la configuración del despliegue del .war.
En la casilla llamada "Context Root:" aparecerá el nombre del archivo .war. Borrar este nombre y poner el signo "/".
Ahora, clic en "OK".
Esto tomará un tiempo procesar. Aún cuando ya se haya mostrado el mensaje en GlassFish que fue desplegado correctamente, no necesariamente habrá terminado, porque estará configurando archivos, bibliotecas, creando las tablas de la base de datos, preparando otros recurso, etc etc etc. Así que en esta parte tener paciencia. Se puede revisar el log para ver en qué está.
La Ruta del contexto (Context Root) es importante porque la aplicación se mostrará en la raiz del host, y varios componentes de la aplicación se ubicarán en la misma ubicación, como "/c" y "/widgets".
El usuario creado por omisión para administrar este Portal es test@liferay.com y su contraseña es test.
En un siguiente Post veremos (ahora sí) cómo configurar NetBeans 6.9 con un servidor liferay y haremos nuestro primer portlet.
Hasta el siguiente post!
Ahora mencionaré uno de los gestores de Portlets en Java que, según mi opinión, es bastante útil. Su nombre LIFERAY. Pero no hablaré de sus cualidades, ni todo lo que puede hacer.. eso ya lo hizo Pedro Edison en su blog
:)
, y como no hay que amontonar la red con lo mismo, esta vez mostraré cómo instalar el LIFERAY desde cero. No desde la instalación de un .exe, sino desde un archivo .war y sobre GlassFish v3 usando MySQL como gestor de base de datos.Esto no lo he inventado, sino lo tomé del tutorial mismo de Liferay... pero como está en inglés, y el lector promedio de este blog busca más información en castellano, quiero hacer un aporte a la comunidad con este post.
Recursos
Para esta tarea necesitamos lo siguiente:
- Sistema operativo, cualquiera compatible con Java. Aunque estos pasos funcionan en todos los sistemas operativos con Java SE 6, en este post lo orientaré más a Windows... porque el lector promedio de este blog busca más información en Windows... etc etc etc.
- JDK 6. El cual lo puedes descargar desde aquí: http://java.sun.com/javase/downloads/widget/jdk6.jsp
- GlassFish v3. Si no lo has instalado, aquí lo mostraremos de la manera más fácil. Puedes descargar la versión .zip desde aquí: http://download.java.net/glassfish/3.0.1/release/glassfish-3.0.1-ml.zip. Esta es la versión multilingual, es decir, nos aparecerá en castellano los textos para entendernos mejor.
- El .war de Liferay: http://downloads.sourceforge.net/lportal/liferay-portal-5.2.3.war
- Archivos adicionales para preconfigurar el Contenedor Web: http://downloads.sourceforge.net/lportal/liferay-portal-dependencies-5.2.3.zip
- MySQL instalado ya sea localmente o en otro host, pero que tengamos acceso a ese computador. Pude haber hecho con PostgreSQL, pero tengo un par de inconvenientes: me han bloqueado todo tipo de instalación en el computador de donde trabajo, y... conozco casi nada sobre PostgreSQL.. así que mis disculpas a los amigos del elefantito. Pero si sois curiosos, sabréis como acomodar esto.
OJO: que sea el MySQL puro, no uno de esos que vienen enlatados con Apache + PHP + PHPMyAdmin. Ya hablaré de este paquetito *AMP en otro post, que para unos es un alivio, pero puede ser un dolor de cabeza si no se usa con prudencia. El MySQL se puede descargar desde aquí: http://dev.mysql.com/downloads/mysql/ - El JDBC de la base de datos que vamos a utilizar. Cómo estamos en MySQL, este se puede descargar desde aquí: http://dev.mysql.com/downloads/connector/j/ Si decides usar otro motor de base de datos, pues no te olvides de conseguir el JDBC correspondiente.
- Usar el JDK de Sun. Toda esta instalación funciona bien con OpenJDK sobre un Ubuntu, CentOS, etc... pero el Captcha para autenticación no funciona correctamente sobre OpenJDK, por tanto usar el JDK de Sun.
- Descargar el Xerces-J. La instalación descrita aquí funciona correctamente, pero cuando se agregan nuevos portlets, el Contenedor Web no es capaz de interpretar los archivos de despliegue de ellos. Para este ejemplo usaremos la versión 2.9.0: http://archive.apache.org/dist/xml/xerces-j/Xerces-J-bin.2.9.0.zip
Instalación y preconfiguración de GlassFish v3
La instalación de GlassFish v3 es bastante simple, más aún si es un .zip como el que sugerí para descargar: Solo hay que descomprimirlo. Por ejemplo, lo descomprimiremos en la raíz de C: Y tendrá una estructura como esta.A partir de este momento, cada vez que mencione
%GLASSFISH_HOME%
se entenderá al directorio del GlassFish que se descomprimió. Es decir c:\glassfishv3
Importante: Mucho se acostumbra crear una carpeta con el mismo nombre del archivo comprimido, lo cual es una práctica no recomendada aquí, ya que el comprimido ya tiene una carpeta. Si se hace eso, se tendría una carpeta llamada glassfishv3, y dentro otra vez glassfishv3, y ocasionará confusión. Por tanto, no usar la opción "crear una carpeta con el nombre del archivo .zip". Simplemente descomprimirlo directamente a la raíz de "C:". Ojo que ya lo advertí
:P
.Ahora, extraemos el contenido del archivo liferay-portal-dependencies-5.2.3.zip en cualquier carpeta, luego tomamos los archivos .jar que se obtuvieron y los pondremos dentro de
%GLASSFISH%\glassfish\domains\domain1\lib
. En esta misma carpeta ponemos el .jar del JDBC de MySQL, y los archivos xercesImpl.jar
y xml-apis.jar
de XercesDespués de esto, iniciamos el GlassFish v3...
%GLASSFISH_HOME%\bin\asadmin start-domain
... para continuar con el siguiente paso.
Debemos modificar las propiedades de la máquina virtual donde se ejecutará el Liferay. Para ello seleccionamos del menú de la izquierda: Configuration > JVM Settings.
Y cambiamos los valores de MaxPermSize y Xmx a los siguientes:
- -XX:MaxPermSize=256m
- -Xmx1024m
Clic en "Save". Detenemos el GlassFish, y lo volvemos a iniciar.
%GLASSFISH_HOME%\bin\asadmin stop-domain%GLASSFISH_HOME%\bin\asadmin start-domain
Preparación de la base de datos
El Liferay utiliza una base de datos por omisión llamada HSQLDB, pero podemos configurarlo para que funcione con cualquier otra base de datos. En este caso veremos con MySQL. En sí, se necesita crear una base de datos en MySQL, configurar un Pool de Conexiones, y ajustar un poco el .war para que utilice este Pool.Sugerencia: Antes de hacer esto, recomiendo siempre crear un usuario que acceda a esta base de datos, y no usar el root para tal fin. ¿Cómo crear ese usuario?.
Desde una ventana del símbolo del sistema, ejecutar
Escribimos lo siguiente para crear la base de datos
y luego escribimos lo siguiente para el usuario
Más sobre los permisos en MySQL, aquí: http://dev.mysql.com/doc/refman/5.1/en/grant.html
Ahora sí, seguimos...Desde una ventana del símbolo del sistema, ejecutar
mysql -u root -p
Con esto se ejecutará el cliente de MySQL con el usuario root y pedirá la contraseña. Bueno, le ponemos y nos mostrará el prompt mysql>
.Escribimos lo siguiente para crear la base de datos
lportal
:create database lportal;
y luego escribimos lo siguiente para el usuario
lportal
que accederá a esa base de datos:grant all on lportal.* to lportal@localhost identified by "lportal";
Más sobre los permisos en MySQL, aquí: http://dev.mysql.com/doc/refman/5.1/en/grant.html
Configuración del pool de conexiones en GFv3 para Liferay
Entramos a la consola web de GFv3 (http://localhost:4848) y seleccionamos del árbol de la izquierda Resources > JDBC > Connections PoolHacemos clic en el botón "New..." para crear una nuevo Pool de Conexiones. Escribimos:
- Name: LiferayPool
- Resource Type: javax.sql.ConnectionPoolDataSource
- Database vendor: MySQL
Clic en Next.
Ahora, se mostrarán todas las propiedades de la conexión a la base de datos. Activamos el primer check llamado Ping: Enabled. Esto nos permitirá verificar si la conexión fue correcta después de crear el pool de conexiones. Luego buscamos las siguientes propiedades, y ponemos los valores que se muestran a continuación:
- URL:jdbc:mysql://localhost/lportal
- User: lportal
- Password: lportal
- UseUnicode: true
- CharacterEncoding:UTF-8
- EmulateLocators: true
Hacemos clic en el botón "Save", y si todo está correcto, se creará sin problema.
Con esto solo hemos creado un Pool de Conexión, ahora necesitamos registrarlo en el JNDI del Servidor. Para ello, seleccionamos la opción Resources > JDBC > JDBC Resources
Hacemos clic en "New..." y escribimos los siguientes valores en los campos:
JNDI Name: jdbc/LiferayPool
Pool Name: LiferayPool
¡¡El nombre del recurso es importante!! Debe estar en mayúsculas y minúsculas.
Clic en OK y listo. Seguimos con el siguiente paso.
Despliegue del .war
Como comenté hace un momento, el .war de liferay está preparado para funcionar con una base de datos incrustada llamada HSQLDB. Lo que necesitamos es que se conecte a nuestro MySQL. Por algo hemos preparado el Pool de conexiones. Así que necesitamos editar un archivo llamadoportal-ext.properties
, adjuntarle el atributo:jdbc.default.jndi.name=jdbc/LiferayPool
... y luego ponerlo dentro del .war (en el directorio WEB-INF/classes dentro del .war) antes de desplegarlo.
Notar que el nombre del JNDI (jdbc/LiferayPool) debe ser exacto cómo se configuró en GlassFish en el paso anterior.
Si te es complicado crear el archivo, aquí puedes descargarlo: http://java.net/downloads/apuntes/resources/liferay/portal-ext.properties
Y si te es complicado poner el .properties dentro del .war, aquí ya tengo un .war preparado (que es el que uso en las instalaciones de Liferay)
http://java.net/downloads/apuntes/resources/liferay/liferay-portal-5.2.3.war
Ahora sí, tomar mucho cuidado con lo siguiente que se va a explicar respecto al despliegue del .war
En la consola del GlassFish, ir a la opción "Applications" del menú izquierdo, y hacemos clic en el botón "Deploy...". En la opción "Location", seleccionamos el archivo .war que de liferay. Al hacer esto, se mostrarán más opciones que corresponden a la configuración del despliegue del .war.
En la casilla llamada "Context Root:" aparecerá el nombre del archivo .war. Borrar este nombre y poner el signo "/".
Ahora, clic en "OK".
Esto tomará un tiempo procesar. Aún cuando ya se haya mostrado el mensaje en GlassFish que fue desplegado correctamente, no necesariamente habrá terminado, porque estará configurando archivos, bibliotecas, creando las tablas de la base de datos, preparando otros recurso, etc etc etc. Así que en esta parte tener paciencia. Se puede revisar el log para ver en qué está.
%GLASSFISH_HOME%\glassfish\domains\domain1\logs\server.log
.La Ruta del contexto (Context Root) es importante porque la aplicación se mostrará en la raiz del host, y varios componentes de la aplicación se ubicarán en la misma ubicación, como "/c" y "/widgets".
Ejecutando el Liferay
Después del despliegue, ya podemos verlo en funcionamiento abriendo la siguiente dirección: http://localhost:8080 Sin ruta de contexto, ya que (como acabo de mencionar) está en la raíz del host.El usuario creado por omisión para administrar este Portal es test@liferay.com y su contraseña es test.
Conclusión
Y esto sería todo para tener en producción un Contenedor de Portlets sobre GlassFish v3. De por sí el GFv3 es pesado para manejar en desarrollo, más aún si se utiliza con Liferay, así que hay que considerarlo si se utiliza en un computador de desarrollo con pocos recursos (entiéndase, no usar Pentium D.. sino algo muy superior, ni menos con 2GB de RAM).En un siguiente Post veremos (ahora sí) cómo configurar NetBeans 6.9 con un servidor liferay y haremos nuestro primer portlet.
Hasta el siguiente post!
Hola, muy bueno el post tal como el anterior, te felicito por el trabajo. una duda que me surje es si yo puedo desarrollar mis portlets usando JSF por ejemplo en la parte de la vista del portlet...me explico?? Saludos!!!
ResponderBorrarHola Sebastian
ResponderBorrargracias.. sí, se puede usar JSF, Struts, SpringMVC, ICEfaces y cualquier framework como si fuera una aplicación web.. pero considerando que no es web entera, sino una parte de la web.
Aquí hay unos portlets de ejemplo usando JSF http://tinyurl.com/24nokjx
Veremos un ejemplo de esto en el siguiente post.
saludos.
Hola, es facinante toda la informacion que otorgas, y veo que eres todo un experto en Java, yo apenas comienzo a conocer Java, pero de otros lenguajes ya he trabajado Bases de Datos en Visual y algunos otros mas pero todo en estacion de trabajo unica, ahora me interesa crear una base de datos que se maneje desde internet. Java me puede ayudar en esto?
ResponderBorrarTienes algun manual que me guie como hacerlo o que me aconsejas para resolver mi necesidad?
Excelente tutorial y te felicito por lo bien explicado que esta talve una ayuda para integrar portal-ext.properties a un war gracias
ResponderBorrar@Anomino: Te doy un tip: un .war es un .zip con otra extensión :) (O sea, renombra el .war a .zip, abrelo con un manejador de archivos .zip, comprime el archivo .properties dentro de WEB-INF/classes y luego lo renombras el .zip a .war y listo.. eso fue lo que hice) Saludos!
ResponderBorrar------------------
Para @Intel CUCSUR, aqui está la documentación de NetBeans para hacer aplicaciónes web con Java EE. http://netbeans.org/kb/trails/java-ee.html
Muchas gracias por tu respuesta Diego.
ResponderBorrarMe sirvio mucho
Hola, una duda, porque solamente lo pude implementar con la version del glassfish que diste, descargue de la pagina oficial varios instaladores de la misma versión 3.0.1 y con ninguno me funciono, y cuando probe con el que inviaste, no hubieron inconvenientes
ResponderBorrarHola chicos!
ResponderBorrarUna consultilla a un problema que tengo al intentar levantar el Glassfish ya que cuando hago el star-domain me sale el siguiente mensaje:
Remote server does not listen for requests on [localhost:4848].
Is the server up?
Unables to get remote commands.
Si alguien tiene idea de que sucede se lo agradeceria!!!
Hola Chari
ResponderBorrarveamos.. con qué versión de Glassfish te sucede esto, v2 o v3? y.. es después de haber instalado el Liferay ahí o antes?
Excelentisimo tutorial, lo probe todo pero al final al darle localhost:8080 se queda cargando :(
ResponderBorrarOtra cosiiita puedo implementar todo esto utilizando el servidor Tomcat?
Corrijo: Si me corrio :)
ResponderBorrarIgual espero la ayudita de como configurar esto con el Tomcat!
hola una pregunta a mi me queda en blanco el portal como hiciste para que te funcione
BorrarGracias
Esa version del War de Liferay es oficial o modificada
ResponderBorrarCordial saludo,
ResponderBorrarAl momento de desplegar el .war me sale el seguiente error:
Exception while loading the app : java.lang.Exception: java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: java.lang.IllegalArgumentException: java.lang.IllegalArgumentException: PWC1430: Unable to add listener of type: com.liferay.portal.kernel.servlet.PortletSessionListenerManager, because it does not implement any of the required ServletContextListener, ServletContextAttributeListener, ServletRequestListener, ServletRequestAttributeListener,...
Me gustaría que me ayudaras
Me ha parecido un gran tutorial, sin embargo cuando lo he terminado y he marcado para ver el portal no me sale nada...me sale en blanco...creo que no me he equivocado en nada. Si alguien me puede resolver el problema estaré agradecido. Saludos.
ResponderBorrarHola
ResponderBorrarsoy nuevo en esto del desarrollo de portlets ,me hacer el favor de ayudar con un ejemplo de portlets con icefaces para liferay algo sencillo que sirva para empezar
muchas graceas
Hola, Excelente tutotial.
ResponderBorrarRealice la instalación de Liferay 5.2.3 sobre Glassfish 3.1, todo parace bien. Al levantar el portal aparece la página de inicio, pero el Portlet de Login se muestra en blanco o vacío.
Al revizar el server.log me encuentro con el siguiente error:
[#|2011-04-19T13:40:12.165-0430|SEVERE|glassfish3.1|org.apache.jasper.compiler.Compiler|_ThreadID=17;_ThreadName=Thread-1;|Error compiling file: /usr/developer/servidores/glassfish3/glassfish/domains/domain1/generated/jsp/liferay-portal-5.2.3/org/apache/jsp/html/portlet/login/login_jsp.java|#]
[#|2011-04-19T13:40:12.195-0430|WARNING|glassfish3.1|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=79;_ThreadName=Thread-1;|ApplicationDispatcher[] PWC1231: Servlet.service() for servlet jsp threw exception
org.apache.jasper.JasperException: PWC6033: Error in Javac compilation for JSP
PWC6197: An error occurred at line: 54 in the jsp file: /html/portlet/login/login.jsp
PWC6199: Generated servlet error:
string:///login_jsp.java:948: setSecure(java.lang.String) in com.sun.portal.portletcontainer.taglib.BaseURLTag cannot be applied to (boolean)
PWC6199: Generated servlet error:
Note: string:///login_jsp.java from uses unchecked or unsafe operations.
PWC6199: Generated servlet error:
Note: Recompile with -Xlint:unchecked for details.
at org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:129)
at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:299)
at org.apache.jasper.compiler.Compiler.generateClass(Compiler.java:392)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:453)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:625)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:492)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:378)...
¿Alguna pista sobre este error?
Apreciaría mucho cualquier ayuda.
Gracias de ante mano.
ola sho quiero poner una aplicacion javafx en glassfish alguien me podria dar los pasos que tengo que hacer les recuerdo que soy nuevo en esto para que sean lomas simples o especificos posibles mi correo es sigmund_bollas@hotmail.com de antemano gracias
ResponderBorrarMuy interesante el tutorial.
ResponderBorrarQuería compartir con vosotros otro website de interes con guías de Liferay en castellano:
http://www.coretec.es
Muchas gracias Juan
ResponderBorrarGracias Diego, muchas gracias. Algunos inconvenientes pero, ya está funcionando el portal.
ResponderBorrarTengo el mismo error:
ResponderBorrarException while loading the app : java.lang.Exception: java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: java.lang.IllegalArgumentException: java.lang.IllegalArgumentException: PWC1430: Unable to add listener of type: com.liferay.portal.kernel.servlet.PortletSessionListenerManager, because it does not implement any of the required ServletContextListener, ServletContextAttributeListener, ServletRequestListener, ServletRequestAttributeListener,...
alquien sabe como resolverslo
Este comentario ha sido eliminado por el autor.
ResponderBorrarEste comentario ha sido eliminado por el autor.
ResponderBorrarles afirmo para instalar liferay-portal-5.2.3 no lo intenten con glassfish-3.1.2.2 no se instala bien
ResponderBorrarpero si es compatible con el liferay-portal-6.0 y funciona en glassfish-3.1.2.2
para eso hagan los mismos pasos y sigan con el post http://www.apuntesdejava.com/2010/09/instalando-liferay-6-en-glassfish-v3.html
lo hice con 2 SO
Ubuntu 12 y Scientific Linux 5.5 y funciona Perfectamente cualquier duda pueden contactarme Gracias