Get it on Google Play
Mas de 21 años en el mundo del IT corporativo

Soporte desarrollo Liferay 7/DXP: Importar librerías no resueltas(Caso driver base de datos IBM DB2)

18-12-2018
Liferay Support

Liferay Support

Si hay algo tosco en el nuevo sistemas de módulos OSGI de Liferay 7.x es la resolución de dependencias. Si importamos en nuestro módulo una librería deberemos anotar específicamente todas sus dependencias en el fichero ‘bnd.bnd'(Punto a mejorar).

Pero el caso es grave cuando intentamos importar librerías que acceden a paquetes que no podemos importar. Es el caso del driver para la base de datos de IBM DB2. Este driver incluye classes(Que no vamos a usar) con referencias a classes que no existen(Si, el software privativo es lo que tiene).

En un primer momento el módulo va a compilar correctamente aunque en el momento del despliegue quedará en estado ‘Installed’ y no se va a arrancar solo. Si accedemos a la consola OSGI(Accediendo a la consola OSGI de Liferay 7) he intentamos arrancar manualmente el módulo mediante ‘start ‘ nos aparecerá un mensaje parecido a este:

g! start 558
org.osgi.framework.BundleException: Could not resolve module: com.lostsys.onda [558]
Unresolved requirement: Import-Package: COM.ibm.db2os390.sqlj.runtime

Donde ‘COM.ibm.db2os390.sqlj.runtime’ es un paquete al que se hace referencia dentro de la librería JAR importada pero que no se puede resolver.

Para resolver esto deberemos importar manualmente el paquete en el fichero ‘bnd.bnd’ de la siguiente manera:

Import-Package:\
COM.ibm.db2os390.sqlj.runtime;resolution:=optional

Donde especificamos que la resolución de este paquete es opcional añadiendo ‘;resolution:=optional’. Naturalmente, no encontraremos solo un paquete roto:

g! start 558
org.osgi.framework.BundleException: Could not resolve module: com.lostsys.onda [558]
Unresolved requirement: Import-Package: COM.ibm.db2os390.sqlj.runtime
Unresolved requirement: Import-Package: com.ibm.bidiTools.bdlayout; resolution:="optional"
Unresolved requirement: Import-Package: com.ibm.dataaccess; resolution:="optional"
Unresolved requirement: Import-Package: com.ibm.websphere.interrupt; resolution:="optional"
Unresolved requirement: Import-Package: com.ibm.zos.batch.container.support; resolution:="optional"
Unresolved requirement: Import-Package: com.ibm.zos.batch.container.support.transaction; resolution:="optional"
Unresolved requirement: Import-Package: sqlj.framework.error; resolution:="optional"
Unresolved requirement: Import-Package: sqlj.framework.ide; resolution:="optional"
Unresolved requirement: Import-Package: sqlj.framework.options; resolution:="optional"
Unresolved requirement: Import-Package: sqlj.mesg; resolution:="optional"
Unresolved requirement: Import-Package: sqlj.tools; resolution:="optional"
Unresolved requirement: Import-Package: sqlj.util.io; resolution:="optional"
Unresolved requirement: Import-Package: sun.security.action

En este caso, si queremos incluir el driver de la base de datos DB2 de IBM deberemos importar todos estos paquetes:

Import-Package:\
COM.ibm.db2os390.sqlj.runtime;resolution:=optional
com.ibm.bidiTools.bdlayout;resolution:=optional,\
com.ibm.dataaccess;resolution:=optional,\
com.ibm.websphere.interrupt;resolution:=optional,\
com.ibm.zos.batch.container.support;resolution:=optional,\
com.ibm.zos.batch.container.support.transaction;resolution:=optional,\
sqlj.framework.error;resolution:=optional,\
sqlj.framework.ide;resolution:=optional,\
sqlj.framework.options;resolution:=optional,\
sqlj.mesg;resolution:=optional,\
sqlj.tools;resolution:=optional,\
sqlj.util.io;resolution:=optional,\
sun.security.action;resolution:=optional,\
*

También tendremos que importar manualmente el recurso(Incluir dependencias en los módulos OSGI de LiferayDXP 7):

Include-Resource:\
@jsoup-1.11.2.jar,\
@db2jcc-db2jcc4.jar

Y, anterior a todo, incluir la dependencia en Gradle(fichero build.gradle):

repositories {
...
mavenCentral()
}

dependencies {
...

compile 'com.ibm.db2.jcc:db2jcc:db2jcc4'
}

Esto es todo. Espero que esto le pueda salvar la vida ha alguien(Con uno que se rompa la cabeza es bastante).

Si te ha servido, por favor comparte

Comments

One Response to “Soporte desarrollo Liferay 7/DXP: Importar librerías no resueltas(Caso driver base de datos IBM DB2)”
  1. Varaskkar says:

    Pues si, realmente con que se coma uno la cabeza es bastante pero aún así, el día perdido no lo quita nadie. Es que vaya tela la que hay que liar con las dichosas dependencias. Gracias por el post compañero, ha ayudado mucho.

Leave a Reply