Grails y weblogic 12c




Estos días he estado trabajando en un proyecto desarrollado en grails el cuál por ciertas razones será desplegado en oracle weblogic 12c.

Al momento de realizar el despliegue me encontré con algunos problemas los cuales explicaré como resolver:

weblogic.xml

Como menciona la documentación de grails, es necesario agregar un archivo llamado weblogic.xml dentro del directorio web-app/WEB-INF, en el cual se deben definir los siguientes atributos:


  • prefer-web-inf-classes: indica a weblogic que en caso debe darle preferencia a las clases encontradas en el paquete de despliegue.
  • cookie-name: establece el nombre de la cockie de sesión.
  • context-root: establece el contexto en el cual será desplegada la aplicación.

Sin embargo, en mi caso, al desplegar de este modo obtenía el siguiente error:



 java.lang.ClassCastException: weblogic.xml.jaxp.RegistryDocumentBuilderFactory cannot be cast to javax.xml.parsers.DocumentBuilderFactory  

Esto es debido a que dentro de las dependencias groovy de mi aplicación se encontraba el jar de xml-apis. Intenté eliminarlo del war, sin embargo, aunque el error anteriormente mencionado fue corregido, obtuve un class not found exception.

Leyendo mas a fondo sobre el formato de weblogic.xml encontré algunos atributos a actualizar contra el descriptor propuesto en la documentación de grails, además que al revisar nuevamente el error de parseo, me di cuenta que el problema era que weblogic debe usar las xml-apis de su propio classpath y no el del paquete de despliegue, así que intenté cambiando el atributo:  prefer-web-inf-classes a false, es decir, darle prioridad al classpath de weblogic y de este modo el despliegue funcionó correctamente.

De este modo mi xml quedó como se lista a continuación:



 <?xml version="1.0" encoding="UTF-8"?>  
   <wls:weblogic-web-app xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.4/weblogic-web-app.xsd">  
     <wls:weblogic-version>12.1.1</wls:weblogic-version>  
     <wls:context-root>CONTEXTO_DEL_PROYECTO</wls:context-root>  
     <wls:container-descriptor>  
      <wls:prefer-web-inf-classes>false</wls:prefer-web-inf-classes>   
     </wls:container-descriptor>  
     <wls:session-descriptor>  
      <wls:cookie-name>WSC2SESSIONID</wls:cookie-name>  
    </wls:session-descriptor>  
   </wls:weblogic-web-app>  

URLMappings

Otro problema que me encontré es que al abrir la aplicación usando la raíz del contexto, es decir, http://url:7001/CONTEXTO_DEL_PROYECTO mostraba el error index.gsp not found.

Para corregir esto solamente tuve que agregar en el archivo grails-app/conf/UrlMappings.groovy las siguientes lineas:


       "/" {  
         controller = "Controlador"  
       }  
       "/index.gsp" {  
          controller = "Controlador"  
        }  

Donde; Controlador es el controller principal de la aplicación.

Tuve algunos detalles mas en mi aplicación, sin embargo, los dejaremos para otro post.




Comentarios

Entradas populares de este blog

Odisea 3G Huawei E173

Nessus Arch Linux

De dados y cubos con puntos