martes, septiembre 09, 2008

Notas sobre problemas con Weblogic y Hibernate

Para un proyecto en el que estoy, necesitamos instalar un módulo programado con Hibernate 3 en un servidor Weblogic 7 (¡en pleno 2008!). Afortunadamente el Weblogic utiliza JDK 1.4.1, con el que aparentemente es compatible todavía Hibernate. Sin embargo, al hacer deploy, me arroja un error:

ClassNotFoundException: org.hibernate.hql.ast.HqlToken

El error se debe a que Hibernate 3 utiliza una versión más nueva de ANTLR.jar (es un generador de parsers) que la que tiene Weblogic en su CLASSPATH, y la clase HqlToken no existía en esa versión.

Encontré en este sitio una solución aparentemente infalible, vía una modificación en el archivo weblogic.xml

<weblogic-web-app>
....
<container-descriptor>
<prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>
....
</weblogic-web-app>


Sin embargo, esta directiva existe sólo a partir de Weblogic 8.1 (Documentación para Weblogic 7). Bu. La sugerencia que dan en la página de Hibernate no es muy operante y sólo funciona a partir de la versión 9.2 de Weblogic, además. Finalmente, la solución, mucho más simple, fue extraer el archivo antlr.jar del .war al que quería hacer deploy, copiarlo en una ruta fija y modificar el CLASSPATH especificado en el archivo de inicio de weblogic:

CLASSPATH=/apps/portal7/bea/user_projects/myDomain/siscalLib/ExcelLoader.jar:/prod/portal7/bea/jdk131_06/lib/classes12_817.zip:/prod/portal7/bea/j2sdk1.4.1_03/lib/tools.jar:/prod/portal7/bea/weblogic700/server:/prod/portal7/bea/weblogic700/server/lib/weblogic_sp.jar:/prod/portal7/bea/weblogic700/server/lib/weblogic.jar:/prod/portal7/bea/jdk131_06/lib/xerces.jar

Esta modificación debe hacerse en el archivo startMyDomain.sh, en la sección donde se especifica el PRECLASSPATH.

¡Suerte!