Spring Roo: Creando un Wrapper del driver JDBC DB2

Creo que esta vez puedo decir que he sido yo el que aporta una solución y no el que la copia 😉

http://forum.springsource.org/showthread.php?p=339664

http://forum.springframework.org/showthread.php?t=100990

Para crear un Driver de DB2 necesitaremos acceso a los siguientes jars de DB2:

· db2jcc.jar

· db2jcc_license_cu.jar

Además, como no están en ningún repositorio Maven público (al menos yo no los he encontrado) debéis colocarlos en una ruta de vuestro MavenRepo.

Yo los he dejado en:

%MAVEN_REPO%comibmdb2db2jcc1.3.1db2jcc-1.3.1.jar (lo he renombrado haciendo referencia al JDK con el que se compiló el jar)

%MAVEN_REPO%comibmdb2db2jcc_license_cu1.3.1db2jcc_license_cu-1.3.1.jar

En el reciente Spring Roo 1.1.1 se añade el comando addon create wrapper

Cuando lanzo el comando:

>addon create wrapper –topLevelPackage com.ibm.db2.roo.JDBC –groupId com.ibm.db2 –artifactId db2jcc –version 1.3.1 –vendorName IBM –licenseUrl http://www-01.ibm.com/software/data/db2/

me creará un pom.xml.

A este pom.xml le incluiré las dependencias de mi Driver:

<dependencies> 

<dependency>

<groupId>com.ibm.db2</groupId>

<artifactId>db2jcc</artifactId>

<version>1.3.1</version>

<optional>true</optional>

</dependency>

<dependency>

<groupId>com.ibm.db2</groupId>

<artifactId>db2jcc_license_cu</artifactId>

<version>1.3.1</version>

<optional>true</optional>

</dependency>

</dependencies>

Una vez hecho esto, si el Driver no tiene dependencias externas basta con hacer mvn bundle:bundle

En el caso que nos ocupa nos encontramos de nuevo con el “org.osgi.framework.BundleException: Unresolved constraint in bundle”.

Para solucionarlo no hay más opción que ir modificando los parámetros del plugin org.apache.felix añadiendo los paquetes que dan error al DynamicImport-Package

Tras un buen rato añade que te añade quedará algo como:

<instructions> 

<Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName>

<Export-Package>COM.*,com.*;version=${pom.version}</Export-Package>

<DynamicImport-Package>*,sqlj.framework.ide,com.ibm.jvm,sqlj.runtime.profile.ref,com.ibm.jvm.classloader,sqlj.runtime.profile.util,sqlj.runtime.ref,sun.tools.jar,sun.security.action,sqlj.runtime.profile,sqlj.runtime,sun.io,COM.ibm.db2os390.sqlj.custom,sqlj.runtime.error</DynamicImport-Package>

<Bundle-Vendor>${pkgVendor} (wrapped into an OSGi bundle by the Spring Roo project build system)</Bundle-Vendor>

<Bundle-DocURL>${pkgDocUrl}</Bundle-DocURL>

<Bundle-License>${pkgLicense}</Bundle-License>

</instructions>

Tras esto ya podemos ejecutar desde la consola Roo:

>perform package

>osgi uninstall –bundleSymbolicName com.ibm.db2.roo.jdbc.db2jcc

>osgi install –url file:///DESARROLLO/XXXX/XXXX-Wrapper-DB2/target/com.ibm.db2.roo.jdbc.db2jcc-1.3.1.0001.jar

>osgi start –url file:///DESARROLLO/XXXX/XXXX-Wrapper-DB2/target/com.ibm.db2.roo.jdbc.db2jcc-1.3.1.0001.jar

>osgi ps

Para ver que ahí lo tenemos 🙂

Respuestas

    1. Podéis copiarlo en el bundle de vuestro Roo y listo 🙂

Deja un comentario