Déploiement d'applications SQLJ

Utilisez SQL for Java™ Enterprise Edition (SQLJ) pour développer des applications d'accès aux données qui se connectent aux bases de données DB2®. SQLJ est un ensemble d'extensions de programmation qui vous permet d'utiliser le langage de programmation Java pour incorporer des instructions qui fournissent des requêtes de base de données SQL (Structured Query Language).

Pourquoi et quand exécuter cette tâche

L'utilisation de SQLJ dans votre application offre les avantages suivants par rapport à son alternative JDBC :
  • Il permet d'améliorer les performances si vous utilisez la étapes de liaison et de personnalisation DB2.
  • Il permet aux applications d'exécuter le SQL statique permettant d'utiliser des règles de sécurité à granularité plus fine, comme les permissions de niveau PACKAGE, plutôt que le SQL dynamique offert par JDBC.

Procédure

  1. Créez un fichier .sqlj pour réaliser des opérations de bases de données pour votre application.
    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 {
                // Insert some data into the 'mytable' table.
                // Note that the java variables 'key' and 'val' get substituted.   
                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); // When SQLJ performs
          transactional operations during context close, it assumes autocommit is true
                ctx.close();
            }
         }
    }
  2. Procédez à l'acquisition des pilotes requis pour transformer les fichiers SQLJ et pour transformer les fichiers .sqlj en fichiers .java. Vous pouvez spécifier un paramètre additionnel, -db2optimize, pour réaliser des transformations DB2 spécifiques pouvant améliorer les performances.
      java  -cp .:/sqlj/sqlj4.zip:/sqlj/db2jcc4.jar sqlj.tools.Sqlj -C-classpath=/sqlj/sqlj4.zip:/sqlj/db2jcc4.jar 
      -db2optimize MyDB2SQLJProcedure.sqlj
    Lorsque vous exécutez cette commande, vous recevez les fichiers de sortie suivants :
    • MyDB2SQLJProcedure.class
    • MyDB2SQLJProcedure.java
    • MyDB2SQLJProcedure_SJProfile0.ser
    • MyDB2SQLJProcedure_SJProfileKeys.class
    • MyCtx.class
    • MyIter.class
  3. Facultatif : Exécutez l'outil DB2 SQLJ Customizer pour personnaliser et lier les fichiers .ser générés auparavant et créer un SQL statique dans la base de données que DB2 utilise en phase d'exécution. La phase de personnalisation crée quatre packages de bases de données qui contiennent un SQL-- statique par niveau d'isolement.
      java  com.ibm.db2.jcc.sqlj.Customizer -url JDBC_URL -user USER_NAME
      -password  PASSWORD [-rootpkgname PACKAGE_NAME] SERIALIZED_PROFILE1  SERIALIZED_PROFILE2...
    Où :
    • JDBC_URL est l'URL du JDBC utilisée pour accéder au système DB2 où résident vos tables, avec la syntaxe suivante :jdbc:db2://host-name:port/database-name
    • USER_NAME est un nom d'utilisateur valide pour le système DB2 où résident vos tables
    • PASSWORD est le mot de passe du nom d'utilisateur USER_NAME spécifié
    • PACKAGE_NAME est le nom de membre d'un ensemble de données partitionnées (PDS) valide ne pouvant pas dépasser sept caractères. Chacun des quatre packages créés par le personnaliseur de profil commence par ce nom, accolé à un chiffre compris entre 1 et 4. Si vous personnalisez un seul profil sérialisé, cette valeur est, par défaut, une version abrégée du nom du profil sérialisé et le paramètre -rootpkgname n'est pas requis. Si vous personnalisez plusieurs profils sérialisés avec la même commande, il n'existe pas de valeur par défaut et le paramètre -rootpkgname est requis.
    • SERIALIZED_PROFILE# est le nom du profil sérialisé que vous personnalisez.
    • Pour personnaliser plusieurs profils sérialisés avec la même commande, établissez une liste de plusieurs fichiers séparés par des espaces.
    • Vous pouvez aussi spécifier le paramètre -rootpkgname pour personnaliser plusieurs profils sérialisés avec la même commande.
    Exemple d'utilisation :
      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 
    Exemple de sortie :
     
      [jcc][sqlj] Begin Customization
      [jcc][sqlj] Loading profile: MyDB2SQLJProcedure_SJProfile0 
      [jcc][sqlj] Customization complete for profile MyDB2SQLJProcedure_SJProfile0.ser
      [jcc][sqlj] Begin Bind
      [jcc][sqlj] Loading profile:MyDB2SQLJProcedure_SJProfile0
      [jcc][sqlj] Driver defaults(user may override): BLOCKING ALL VALIDATE BIND STATICREADONLY YES
      [jcc][sqlj] Fixed driver options: DATETIME ISO DYNAMICRULES BIND
      [jcc][sqlj] Binding package DB2SQL01 atisolation level UR
      [jcc][sqlj] Binding package DB2SQL02 at isolation level CS
      [jcc][sqlj] Binding package DB2SQL03 at isolation level RS 
      [jcc][sqlj] Binding package DB2SQL04 at isolation level RR
      [jcc][sqlj] Bind complete for MyDB2SQLJProcedure_SJProfile0    
  4. Mettez à jour votre archive d'application pour inclure tous les fichiers générés à l'étape 2. Veillez à maintenir la structure des répertoires où se trouvent les profils. Par exemple, si le nom complet de la classe MyDB2SQLJProcedure est com.company.MyDB2SQLJProcedure, les fichiers générés doivent être placés dans un dossier com/company/ du module d'application approprié.
    Remarque : Les fichiers personnalisés doivent être placés dans un emplacement qui fait partie du chemin d'accès aux classes d'applications et ils doivent se trouver devant les profils sérialisés qui ne sont pas personnalisés dans votre fichier JAR. Si vous décidez de remplacer les profils sérialisés dans votre fichier JAR, maintenez la structure des répertoires dans lesquels se trouvent les profils.
  5. Pour les applications Java EE, activez les fonctions requises, définissez une configuration de source de données et appliquez la bibliothèque partagée nécessaire au chargeur de classe de votre application. La fonction jdbc-4.1 doit être activée dans le fichier server.xml pour pouvoir utiliser SQLJ. Si une source de données est trouvée via JNDI, la fonction jndi-1.0 doit également être activée. Examinez l'exemple suivant :
    <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>
  6. Pour les applications OSGi, autorisez les fonctions jdbc-4.1 et wab-1.0 à utiliser votre application OSGi. Si votre application utilise JNDI, activez également la fonction jndi-1.0. Créez une bibliothèque <osgiLibrary> faisant référence à votre bibliothèque SQLJ. Configurez ensuite votre application pour qu'elle fasse référence à la bibliothèque OSGi qui contient les packages SQLJ nécessaires.
    Examinez l'exemple de fichier server.xml suivant :
    <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>
    Dans le MANIFEST.MF du module d'application de 'myapp', importez les packages SQLJ requis qui sont fournis par l'élément <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
  7. Il est possible que WebSphere Application Server Liberty mette en cache un contexte DB2 SQLJ avec chaque connexion en pool. La mise en cache d'un contexte DB2 SQLJ peut entraîner un comportement davantage cohérent avec WebSphere Application Server Traditional, comme par exemple, aider à nettoyer les ressources qui ne sont pas fermées par l'application. Elle peut également permettre d'améliorer les performances sur les chemins d'accès SQLJ. Pour activer la mise en cache de contexte DB2 SQLJ, vous devez définir la propriété de source de données enableConnectionCasting sur la valeur true. Examinez l'exemple suivant :
    <dataSource id="myDS" jndiName="jdbc/myDS" enableConnectionCasting="true">

Icône indiquant le type de rubrique Rubrique Tâche



Icône d'horodatage Dernière mise à jour: Tuesday, 6 December 2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twlp_deploy_sqlj
Nom du fichier : twlp_deploy_sqlj.html