Estigmatizados

La informática profesional no es un juego de políticos

Matriz de compatibilidad JSF / Java Enterprise Edition

Aprovechando este periodo de vacaciones, intentaré retomar el trabajo en el blog.

En este primer artículo, que en principio tenía pensado llamar “JSF 1.2 y Tomcat 6: ¡Vaya infierno!”, quiero definir una matriz de compatibilidad entre las versiones de Java Enterprise y servidores de aplicaciones. Para muchos será algo obvio, pero yo siempre tengo que bucear en la documentación para buscar las cosas.

JSF JSR Java JSP JSTL Servlet Tomcat GlassFish
JSF 1.1 JSR 127 J2SE 1.3 JSP 1.2 JSTL 1.0 Servlet 2.3 4.1.x
5.5.x
 
JSF 1.2 JSR 252 Java SE 5 JSP 2.1 JSTL 1.2 Servlet 2.5 6.0.x v2.x
JSF 2.0 JSR 314 Java SE 5
Java SE 6
JSP 2.1
JSP 2.2
JSTL 1.2 Servlet 2.5
Servlet 3.0
6.0.x v2.x
v3.x

 JSF 1.2 RI: Mojarra JSF 1.2_12

JSF 2.0 RI: Morraja JSF 2.0.2

Java EE JSR Servlet/JSP Tomcat GlassFish
Java EE 6
(Java SE 6)
JSR 315 3.0/2.2   v3.x
Java EE 5
(Java SE 5)
JSR 154 2.5/2.1 6.0.x v2.x
J2EE 1.4
(J2SE 1.3)
  2.4/2.0 5.5.x  
J2EE 1.3
(J2SE 1.2)
JSR 53 2.3/1.2 4.1.x
(archivada)
 
J2EE 1.2
(J2SE 1.2)
N/A 2.2/1.1 3.3.x
(archivada)
 
Anuncios

diciembre 29, 2009 Posted by | Tecnología | Deja un comentario

Netbeans Visual JSF Portlet en Tomcat 6 – Logging needed

TomcatSigo con problemas a la hora de iniciar la aplicación web que contiene el portlet JSF desarrollado conportal-pack-site-logo-medium Netbeans. En el catalina_xxx.log de Tomcat tan sólo aparecen unas escuetas líneas de error que poca luz aportan al problema.

08-sep-2009 17:27:31 org.apache.catalina.core.StandardContext start
GRAVE: Error listenerStart
08-sep-2009 17:27:31 org.apache.catalina.core.StandardContext start
GRAVE: Falló en arranque del Contexto [/AlfrescoPortlets] debido a errores previos

Accediendo a la consola de Tomcat Manager compruebo que la aplicación en el contexto Alfrescoportlets (mi aplicación con los portlets) no puede arrancar. Sé que debe estar relacionado con el JAR Hell o alguna dependencia que me falta, pero en el puñetero (con perdón) Tomcat 6 las cosas no están tan claras como en mi “amado” Tomcat 5.x. ¿Dónde demonios salen los ClassNotFoundException? ¿Por qué todo el mundo se empeña en complicar las cosas?

No me ha quedado otro remedio que definir una configuración un poco más coherente:
Sigue leyendo

septiembre 8, 2009 Posted by | Portales | , , | Deja un comentario

JSP para localizar el archivo JAR que contiene una clase Java

Estoy intentando desplegar un portlet JSF, desarrollado con Netbeans Portal Pack 3.0.x Como podéis observar por la conjugación del verbo intentar, no he tenido éxito todavía.

La primera prueba, con un portlet básico JSR-286, fue de maravilla. Dos clicks de ratón un deploy y ya tenía el portlet en Liferay. Los problemas vienen con el portlet visual JSF.

Comentaré en breve algunos de los problemas que he ido resolviendo a trancas y a barrancas. Ahora lo dejo en que tengo problemas de dependencias JAR en la aplicación web del portlet. Para ir resolviéndolas he creado una cutre JSP para intentar localizar las clases en el entorno de las aplicaciones web. Copiando la JSP en un contexto nos puede dar una idea aproximada de qué ClassLoader ha cargado la clase y de qué archivo Jar.

Un ejemplo de uso: http://localhost:8080/test.jsp?classname=com.liferay.portlet.PortletFilterFactory

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">
   
<%
        if (request.getParameter("classname") == null) {
            out.println("Introduce el nombre de clase.");
        } else {
			String className = request.getParameter("classname");
			String normClassName = className.replace(".", "/").concat(".class");
			java.net.URL url = this.getClass().getClassLoader().getResource(normClassName);

			if (url != null)
				out.println("<b>"+url.getFile()+"</b>");
			else
				out.println("Lo siento <b>no encontrado</b>");
        }
    %>

septiembre 8, 2009 Posted by | Portales | , , , | Deja un comentario

Desarrollo de portlets JSR-286 – Netbeans Portal Pack 3.0

Vamos a comenzar el desarrollo de portlets que sigan la especificación JSR-286 (portlet 2.0). Para ello necesitamos, en primer lugar, decidir qué herramienta vamos a utilizar para construir y probar los portlets generados. Mi preferencia es utilizar algún plugin para Eclipse, dado que es el IDE que me parece más robusto y cómodo.

Buscando por la Web he encontrado dos alternativas: un pack para Eclipse y uno para Netbeans

portal-pack-site-logo-mediumPortal Pack 3.0.2 para Netbeans IDE 6.5+

http://portalpack.netbeans.org/

Entre sus características incluye:

  • Soporte para despliegue en: Sun WebSpace Server 10.0, Liferay 5.1/5.2, OpenPortal Container 2.x
  • Soporte para todas las características definidas en JSR-286
  • Soporte visual para incorporar gestión de eventos en portlets JSR-286
  • Editor WYSIWYG para generación de portlets JSF
  • Soporte de Spring MVC

eclipse-portalpack-mediumEclipse Portal Pack 2.0.1 para Eclipse Europa+

https://eclipse-portalpack.dev.java.net/

En este caso la documentación no es tan completa, a pesar de que ambos proyectos dependen de un mismo proyecto padre: OpenPortal http://wiki.java.net/bin/view/OpenPortal/
Dentro del Eclipse Portal Pack se incluyen tres plugins para el IDE: uno con asistentes para crear una aplicación portlet y otros dos que facilitan trabajar con los entornos de ejecución OpenPortal Portlet Container y WebSpace Server. Este último es un desarrollo fruto de la colaboración entre Sun Microsystems y las comunidades de Liferay y OpenPortal; anteriormente Webspace era conocido como proyecto WebSynergy

  • JSR-286/168 Portlet Builder Plugin
  • WebSpace Plugin
  • OpenPortal Portlet Container Plugin

Sin entrar a valorar cada una de las alternativas, vamos a decantarnos por probar en primer lugar la opción de Netbeans, dado que parece una versión más actual, que ofrece más funcionalidad y parece estar mejor documentada.

septiembre 5, 2009 Posted by | Portales - EAP | , , , , , , | 1 comentario

Configuración de Alfresco Community 3.2 con CAS

alfresco-dashboardTenemos Alfresco y Liferay autenticando con LDAP. Vamos a ir un paso más buscando el Single Sign On -SSO-. Para ello vamos a utilizar el “Central Authentication System”.
Sitio web: Jasig CAS
Información sobre la instalación en: Alfresco Wiki

Prerrequisitos

  • Servidor CAS instalado
  • Certificado SSL para el servidor CAS instalado

Sigue leyendo

agosto 18, 2009 Posted by | CMS, Infraestructura, Portales, Uncategorized | , , , | 7 comentarios

The Big Picture: Liferay + Alfresco + Jasig CAS + OpenLDAP

The Big Picture

The Big Picture

Nos vamos acercando al entorno deseado. Tenemos Liferay y Alfresco autenticando con OpenLDAP. Es hora de añadir el Single Sign On (SSO), utilizando una solución desarrollada por la universidad de Yale: Central Authentication System (CAS).

En primer lugar vamos a configurar el servidor CAS:
  1. Deberemos configurar un “LDAP Authentication Handler”
  2. Deberemos configurar el servidor para SSL.
  3. Deberemos configurar los clientes para que confíen en el certificado del servidor generado en el punto (2) -esto es necesario porque vamos a trabajar con certificados de prueba (self-signed)

Sigue leyendo

agosto 13, 2009 Posted by | Portales | , , , , , | 5 comentarios

Configuración de Tomcat 5.5 para SSL

Dado que tengo CAS en un Tomcat 5.5 voy a configurar el conector SSL. Ésta es una tarea muy sencilla pero he tenido un problema y quiero resaltarlo en este post por si otro pringao como yo cae en el mismo agujero.
Más información en Apache.org

Asunciones

  • En este ejemplo voy a utilizar certificados self-signed; con esto quiero decir que van a ser certificados de prueba que no van a ser validados por ninguna entidad certificadora como VeriSign, Thawte, etc.
  • Utilizaré como servidor Tomcat 5.5
  • Utilizaré la herramienta keytool JDK keytool para generar los certificados

  Sigue leyendo

agosto 12, 2009 Posted by | Portales | , , | 2 comentarios

An unexpected system error occurred

La cagamos (con perdón)

An unexpected system error occurred.

java.lang.NullPointerException

He configurado usuarios y grupos en el LDAP y cuando entro con un usuario LDAP me aparece este bendito mensaje. Buscando por los foros he encontrado un BUG http://www.liferay.com/web/guest/community/forums/-/message_boards/message/3739179, pero parece arreglado en la versión en la que estoy trabajando. El caso es que deshabilitando la opción de exportar a LDAP todo funciona.

En portal-ext.properties he definido las siguientes propiedades:

#ldap.import.method=user
ldap.import.method=group
ldap.export.enabled=false
ldap.users.dn=ou=people,dc=uniovi,dc=es
ldap.groups.dn=ou=groups,dc=uniovi,dc=es
ldap.auth.password.encryption.algorithm.types=SHA,MD5

Datos de configuración de grupos en el LDAP

Datos de configuración de grupos en el LDAP

La más importante es el método de importación. He indicado group dado que es en los grupos donde defino la pertenencia. Otra opción sería user; en ese caso el usuario tendría que indicar a qué grupos pertenece con algún atributo LDAP como memberOf, groupMembership -no he encontrado estos atributos en el estándar-

agosto 6, 2009 Posted by | Portales | , , | 2 comentarios

Autenticación LDAP en Liferay

Usuarios erróneos en el LDAP
Usuarios erróneos en el LDAP

La configuración de LDAP en Liferay es bastante sencilla.

Tan sólo tenemos que especificar bien las queries de LDAP y prestar atención al detalle de que los usuarios estén bien formados -quiero decir, que tengan todos los datos obligatorios cumplimentados-
En mi caso he optado por autenticación en base al Screen Name, por lo que he tenido que modificar la query de LDAP Authentication Search Filter al valor: (uid=@screen_name@)
Por otro lado he cambiado la clase que utiliza para los usuarios por inetOrgPerson
Import Search Filter: (objectClass=inetOrgPerson)
Con esto y siguiendo el manual de administración de la versión 5.2 todo iba como la seda hasta que Liferay me dió el típico error de que no podía autenticar a los usuarios de mi Apache Directory.
Después de mucho probar con las propiedades que especifican el algoritmo de encriptación, etc, etc. Me di cuenta de que el error estaba en los atributos de los usuarios. Cuando pruebas TEST LDAP USERS en Liferay si te da un aviso como el mostrado en la imagen que encabeza este post, este aviso indica que algún usuario no se puede importar, luego no te puedes autenticar con él.
No os olvidéis de incluir los correspondientes mapeos para:
  • screenName
  • password
  • emailAddress
  • firstName
  • lastName
  •  

agosto 5, 2009 Posted by | Portales | 1 comentario

Servicio de directorio

La solución de portal va a utilizar una solución SSO basada en CAS. Como mecanismo de autenticación utilizaremos un directorio que implementa el protocolo LDAP; utilizaré Apache Directory Server 1.0 http://directory.apache.org/apacheds/1.0/ ya que es muy fácil de instalar en Windows.

Además bajaré el Apache Directory Studio http://directory.apache.org/studio/ un cliente LDAP que tiene muy buena pinta -está basado en eclipse RCP o sea que da confianza-

La instalación es bastante sencilla y rápidamente tengo un Tomcat sirviendo en el puerto 10389.

Sigue leyendo

agosto 3, 2009 Posted by | Portales | Deja un comentario