Despliegue de aplicaciones SQLJ
Utilice Structured Query Language for Java™ Enterprise Edition (SQLJ) para desarrollar aplicaciones de acceso de datos que se conectan a bases de datos DB2®. SQLJ es un conjunto de extensiones de programación que le permite utilizar el lenguaje de programación Java para incorporar declaraciones que proporcionan solicitudes de base de datos SQL (Structured Query Language).
Acerca de esta tarea
El uso de SQLJ en la aplicación proporciona las ventajas
siguientes cuando se compara con la alternativa de JDBC:
- Puede mejorar el rendimiento si utiliza los pasos de personalización y enlace de DB2.
- Habilite aplicaciones para ejecutar el SQL estático, de forma que puede utilizar políticas de seguridad más precisas, como permisos de nivel PACKAGE, en lugar del SQL que ofrece JDBC.
Procedimiento
- Cree un archivo .sqlj para realizar
operaciones de base de datos para la aplicación.
import java.sql.*; import javax.sql.*; import java.util.*; import javax.naming.; import sqlj.runtime.*; #sql context MyCtx; #sql iterator MyIter(String name); public class MyDB2SQLJProcedure { public static void myProcedure() throws Exception { DataSource ds = (DataSource) new InitialContext().lookup("java:comp/env/jdbc/myDS"); Connection con = ds.getConnection(); con.setAutoCommit(false); MyCtx ctx = new MyCtx(con); try { // Insertar algunos datos en la tabla 'mytable'. // Tenga en cuenta que las variables java 'key' y 'val' se sustituyen. int key = 1; String val = "one"; #sql [ctx] { INSERT into mytable VALUES (:key, :val) }; #sql [ctx] { COMMIT }; MyIter iter; #sql [ctx] iter = { SELECT name FROM mytable WHERE id=1 }; iter.next(); System.out.println("Found value: " + iter.name()); iter.close(); #sql [ctx] { COMMIT }; } finally { con.setAutoCommit(true); // Cuando SQLJ realiza operaciones transaccionales durante el cierre del contexto, asume que la confirmación automática es verdadera ctx.close(); } } }
- Adquiera los controladores necesarios para transformar archivos
SQLJ y transforme los archivos .sqlj a archivos
.java. Puede especificar un parámetro adicional,
-db2optimize, para realizar transformaciones
específicas de DB2, lo que
podría aumentar el rendimiento.
java -cp .:/sqlj/sqlj4.zip:/sqlj/db2jcc4.jar sqlj.tools.Sqlj -C-classpath=/sqlj/sqlj4.zip:/sqlj/db2jcc4.jar -db2optimize MyDB2SQLJProcedure.sqlj
Cuando se ejecuta este mandato, se recibe los archivos de salida siguientes:- MyDB2SQLJProcedure.class
- MyDB2SQLJProcedure.java
- MyDB2SQLJProcedure_SJProfile0.ser
- MyDB2SQLJProcedure_SJProfileKeys.class
- MyCtx.class
- MyIter.class
- Opcional: Ejecute la herramienta DB2
SQLJ Customizer para personalizar y enlazar en los archivos
.ser generados previamente y cree un SQL
estático en la base de datos que utiliza
DB2 durante la ejecución. La
fase de personalización crea cuatro paquete de base de datos que
contienen un SQL-- estático para cada nivel de
aislamiento.
java com.ibm.db2.jcc.sqlj.Customizer -url JDBC_URL -user USER_NAME -password PASSWORD [-rootpkgname PACKAGE_NAME] SERIALIZED_PROFILE1 SERIALIZED_PROFILE2...
Donde:Ejemplo de uso:- JDBC_URL es el URL JDBC que se utiliza para acceder al sistema DB2 donde residen las tablas, con la sintaxis siguiente: jdbc:db2://host-name:port/database-name
- USER_NAME es un nombre de usuario válido para el sistema DB2 donde residen las tablas.
- PASSWORD es la contraseña para el USER_NAME especificado
- PACKAGE_NAME es un nombre de miembro del conjunto de datos particionados (PDS) válido, con una longitud máxima de siete caracteres. Cada uno de los cuatros paquetes creados por el personalizador de perfiles empieza con este nombre y se añaden con un número de 1 a 4. Si solo personaliza un perfil serializado, este valor toma como valor predeterminado una versión abreviada del nombre del perfil serializado y el parámetro -rootpkgname no es necesario. Si personaliza más de un perfil serializado con el mismo mandato, no hay ningún valor predeterminado y el parámetro -rootpkgname es necesario.
- SERIALIZED_PROFILE# es el nombre del perfil serializado que está personalizando.
- Para personalizar más de un perfil serializado con el mismo mandato, liste varios archivos separados por espacios.
- Como alternativa, puede especificar el parámetro -rootpkgname para personalizar más de un perfil serializado con el mismo mandato.
java -cp .:/sqlj/sqlj4.zip:/sqlj/db2jcc4.jar com.ibm.db2.jcc.sqlj.Customizer -url jdbc:db2://localhost:50000/mydb -user dbuser1 -passworddbpass1 MyDB2SQLJProcedure_SJProfile0.ser
Salida de ejemplo:[jcc][sqlj] Iniciar personalización [jcc][sqlj] Cargando perfil: MyDB2SQLJProcedure_SJProfile0 [jcc][sqlj] Personalización completa para el perfil MyDB2SQLJProcedure_SJProfile0.ser [jcc][sqlj] Empezar enlace [jcc][sqlj] Cargando perfil:MyDB2SQLJProcedure_SJProfile0 [jcc][sqlj] Valores predeterminados de controlador (el usuario puede alterar temporalmente): BLOCKING ALL VALIDATE BIND STATICREADONLY YES [jcc][sqlj] Opciones de controlador fijadas: DATETIME ISO DYNAMICRULES BIND [jcc][sqlj] Enlazando paquete DB2SQL01 en nivel de aislamiento UR [jcc][sqlj] Enlazando paquete DB2SQL02 en el nivel de aislamiento CS [jcc][sqlj] Enlazando paquete DB2SQL03 en el nivel de aislamiento RS [jcc][sqlj] Enlazando paquete DB2SQL04 en el nivel de aislamiento RR [jcc][sqlj] Enlace completo para MyDB2SQLJProcedure_SJProfile0
- Actualice el archivo de aplicación para incluir todos los
archivos que se han generado en el paso 2. Asegúrese de mantener la
estructura de directorios en la cual existen los perfiles. Por ejemplo, si la clase
MyDB2SQLJProcedure tiene un nombre completo de
com.company.MyDB2SQLJProcedure, los archivos
generados se deberán colocar en una carpeta
com/company/ en el módulo de aplicación
apropiado.
Nota: Los archivos personalizados deben colocarse en una ubicación que forme parte de la variable classpath de la aplicación, y deben existir antes que los perfiles serializados del archivo JAR. Si decide sustituir los perfiles serializados del archivo JAR, mantenga la estructura de directorios en la que existen los perfiles.
- Para aplicaciones Java EE,
habilite las características necesarias, defina una configuración de
origen de datos y aplique la biblioteca compartida necesaria al
cargador de clases de la aplicación. La característica
jdbc-4.1 debe estar habilitada en el archivo
server.xml para utilizar SQLJ. Si un origen de
datos se encuentra utilizando JNDI, la característica
jndi-1.0 también debe estar habilitada. Consulte el ejemplo siguiente:
<server> <featureManager> <feature>jdbc-4.1</feature> <feature>jndi-1.0</feature> </featureManager> <application location="myapp.war"> <classloader commonLibraryRef="DB2Lib"/> </application> <library id="DB2Lib"> <fileset dir="C:/DB2/java" includes="db2jcc4.jar db2jcc_license_cisuz.jar"/> </library> <dataSource id="myDS" jndiName="jdbc/myDS"> <jdbcDriver libraryRef="DB2Lib"/> <properties.db2.jcc databaseName="mydb" serverName="localhost" portNumber="50000" user="dbuser1" password="dbpass1"/> </dataSource> </server>
- Para aplicaciones OSGi, habilite las características
jdbc-4.1 y wab-1.0 para utilizar la
aplicación OSGi. Si la aplicación utiliza JNDI, habilite también la
característica jndi-1.0. Cree una
<osgiLibrary> que haga referencia a la
biblioteca SQLJ. A continuación, configure la aplicación para que
haga referencia a la biblioteca OSGi que contiene los paquetes SQLJ
necesarios. Consulte el ejemplo siguiente del archivo server.xml:
<server> <featureManager> <feature>jdbc-4.1</feature> <feature>jndi-1.0</feature> <feature>wab-1.0</feature> </featureManager> <osgiApplication name="myapp" location="myapp.eba"/> <osgiLibrary libraryRef="DB2Lib"/> <library id="DB2Lib"> <fileset dir="C:/DB2/java" includes="db2jcc4.jar db2jcc_license_cisuz.jar"/> </library> <dataSource id="myDS" jndiName="jdbc/myDS"> <jdbcDriver libraryRef="DB2Lib"/> <properties.db2.jcc databaseName="mydb" serverName="localhost" portNumber="50000" user="dbuser1" password="dbpass1"/> </dataSource> </server>
En el MANIFEST.MF del módulo de aplicación para 'myapp', importe los paquetes SQLJ necesarios, que son proporcionados por el elemento <osgiLibrary>:Import-Package: javax.annotation, javax.sql, javax.naming, com.ibm.db2.jcc, com.ibm.db2.jcc.sqlj, sqlj.runtime, sqlj.runtime.error, sqlj.runtime.profile, sqlj.runtime.profile.ref, sqlj.runtime.profile.util, sqlj.runtime.ref, sqlj.runtime.util
- Es posible que
WebSphere Application
Server Liberty almacene en caché un contexto SQLJ de DB2
con cada conexión agrupada. El
almacenamiento en memoria
caché de contexto DB2
SQLJ puede provocar un comportamiento que sea más coherente con
WebSphere Application Server tradicional, como por ejemplo, la limpieza de recursos que no
están cerrados por la aplicación. También podría generar mejoras de
rendimiento en vías de acceso SQLJ. Para habilitar el almacenamiento
en memoria caché de contexto
DB2 SQLJ, debe configurar la
propiedad de origen de datos
enableConnectionCasting con un valor de true. Consulte el ejemplo siguiente:
<dataSource id="myDS" jndiName="jdbc/myDS" enableConnectionCasting="true">
Tema principal: Despliegue de aplicaciones de acceso a datos en Liberty


http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-libcore-mp&topic=twlp_deploy_sqlj
Nombre de archivo:twlp_deploy_sqlj.html