Configuration de la connectivité à la base de données relationnelle dans Liberty

Vous pouvez configurer une source de données et un fournisseur JDBC pour la connectivité à la base de données. Le fournisseur JDBC fournit les classes d'implémentation du pilote qui sont requises pour la connectivité JDBC avec votre base de données de fournisseur spécifique.

A propos de cette tâche

L'authentification Kerberos des sources de données est prise en charge pour DB2®, Oracle Database, Microsoft SQL Serveret PostgreSQL.

Open Liberty La documentation relative à l'authentification Kerberos pour les sources de données JDBC est disponible sur le site Site Web Open Liberty.

Eviter les problèmes:

Avant la version 20.0.0.11, l'authentification Kerberos pour les sources de données n'est pas prise en charge pour les pilotes JDBC ou les bases de données dans Liberty.

Le pilote léger Oracle JDBC, version 21c et versions antérieures, prend en charge uniquement les implémentations Oracle JDK ou OpenJDK Kerberos . Par conséquent, ces versions ne peuvent pas être utilisées avec IBM SDK, Java Technology Edition, Version 8. Mise à jour vers la version 21c ou ultérieure du pilote léger Oracle JDBC pour la prise en charge de l'authentification Kerberos pour les sources de données avec IBM Java™ 8.

En vue de l'accès à une base de données depuis votre application, le code d'application doit utiliser l'interface javax.sql.DataSource. Le serveur d'applications fournit une implémentation gérée de cette interface javax.sql.DataSource , qui est sauvegardée par l'une des diverses implémentations de source de données ou de pilote fournies par les pilotes JDBC . Les différentes implémentations de pilote ou de source de données sont les suivantes :

  • javax.sql.DataSource

    Ce type de source de données correspond au format de base. Elle ne fournit aucune interopérabilité facilitant la mise en pool des connexions et, en tant que ressource à deux phases, elle ne peut pas participer aux transactions impliquant plusieurs ressources.

  • javax.sql.ConnectionPoolDataSource

    Ce type de source de données se prête à la mise en pool des connexions. Elle ne peut pas participer, en tant que ressource à deux phases, aux transactions impliquant plusieurs ressources.

  • javax.sql.XADataSource

    Ce type de source de données est à la fois prévue pour la mise en pool des connexions et peut participer, en tant que ressource à deux phases, aux transactions impliquant plusieurs ressources.

  • java.sql.Driver

    Il s'agit du principal moyen de connexion qui nécessite une URL et qui est généralement utilisé dans Java SE. Comme javax.sql.DataSource, ce processus ne fournit aucune interopérabilité facilitant la mise en pool des connexions et, en tant que ressource à deux phases, elle ne peut pas participer aux transactions impliquant plusieurs ressources.

Pour être utilisable dans Liberty, votre pilote JDBC doit fournir au moins l'un de ces types de sources de données ou doit fournir un java.sql.Driver avec la fonction ServiceLoader . Pour les pilotes JDBC couramment utilisés, Liberty connaît déjà les noms de classe d'implémentation des différents types de source de données. Liberty utilise la fonction ServiceLoader pour reconnaître les implémentations de pilote JDBC pour une URL donnée. En fonction de la classe d'implémentation du pilote JDBC , Liberty est souvent capable de déduire les noms de classe d'implémentation de source de données correspondants. Dans la plupart des cas, vous devez indiquer à Liberty uniquement où trouver le pilote JDBC .

Procédure

  1. Dans le fichier server.xml , définissez une bibliothèque partagée qui pointe vers l'emplacement du fichier JAR ou des fichiers compressés du pilote JDBC .
    Par exemple :
    <library id="DB2JCCLib">
        <fileset dir="C:/DB2/java" includes="db2jccx.jar db2jcc_license_cisuz.jar"/>
    </library>
  2. Définissez une ou plusieurs sources de données utilisant le pilote JDBC. Si vous ne spécifiez pas le type de source de données ou d'URL, Liberty choisit le type de source de données pour vous, en fonction de celui qui est disponible.
    L'exemple suivant accepte la valeur par défaut du type de source de données :
    
    <dataSource id="db2" jndiName="jdbc/db2">
        <jdbcDriver libraryRef="DB2JCCLib"/>
        <properties.db2.jcc databaseName="SAMPLEDB" serverName="localhost" portNumber="50000"/>
    </dataSource>
    Exemple dans lequel le type javax.sql.XADataSource est utilisé :
    
    <dataSource id="db2xa" jndiName="jdbc/db2xa" type="javax.sql.XADataSource">
        <jdbcDriver libraryRef="DB2JCCLib"/>
        <properties.db2.jcc databaseName="SAMPLEDB" serverName="localhost" portNumber="50000"/>
    </dataSource>

    Une source de données par défaut est disponible quand au moins une fonction Java EE 7 ou ultérieure est activée. Cette source de données est disponible en tant que java:comp/DefaultDataSource. Il n'est pas nécessaire de spécifier de jndiName pour la source. Pour configurer la source de données par défaut, spécifiez un élément dataSource avec l'attribut id réglé sur DefaultDataSource. L'exemple suivant configure la source de données par défaut pour pointer vers une base de données DB2 :

    <dataSource id="DefaultDataSource">
    	<jdbcDriver libraryRef="DB2JCCLib"/>
    	<properties.db2.jcc databaseName="SAMPLEDB" serverName="localhost" portNumber="50000"/>
    </dataSource>
    Lorsque le type de source de données est omis, Liberty choisit le type de source de données dans l'ordre suivant, en fonction de la disponibilité, si vous utilisez la fonction jdbc-4.3 ou une version ultérieure ou s'il s'agit de la source de données par défaut,
    • javax.sql.XADataSource
    • javax.sql.ConnectionPoolDataSource
    • javax.sql.DataSource
    Si vous utilisez la fonction jdbc-4.2 , la fonction jdbc-4.1 ou la fonction jdbc-4.0 et qu'il ne s'agit pas de la source de données par défaut, Liberty choisit le type de source de données dans l'ordre suivant, en fonction de la source disponible:
    • javax.sql.ConnectionPoolDataSource
    • javax.sql.DataSource
    • javax.sql.XADataSource

    Notez que la fonctionnalité fournie par XADataSource est généralement un sur-ensemble de la fonctionnalité fournie par les autres types de sources de données, bien que certains fournisseurs JDBC puissent introduire de subtiles différences de comportement ou d'autres limitations parmi les divers types de sources de données qui ne sont pas présentés dans la spécification JDBC.

  3. Facultatif: Configurez les attributs de la source de données, tels que les propriétés du fournisseur JDBC et les propriétés de regroupement de connexions.
    Par exemple :
    <dataSource id="DefaultDataSource" jndiName="jdbc/db2" connectionSharing="MatchCurrentState" 
                isolationLevel="TRANSACTION_READ_COMMITTED" statementCacheSize="20">
        <connectionManager maxPoolSize="20" minPoolSize="5" 
                           connectionTimeout="10s" agedTimeout="30m"/>
        <jdbcDriver libraryRef="DB2JCCLib"/>
        <properties.db2.jcc databaseName="SAMPLEDB" serverName="localhost" portNumber="50000" 
                            currentLockTimeout="30s" user="user1" password="pwd1"/>
    </dataSource>
    Pour la liste complète des attributs de configuration de l'élément dataSource , de l'élément connectionManager et de certains fournisseurs JDBC couramment utilisés, voir Source de données (dataSource).
  4. Facultatif: Configurez les sources de données pour les bases de données couramment utilisées conformément aux exemples suivants.
    Pour DB2
    <dataSource id="DefaultDataSource" jndiName="jdbc/db2">
        <jdbcDriver libraryRef="DB2JCCLib"/>
        <properties.db2.jcc databaseName="SAMPLEDB" serverName="localhost" portNumber="50000"/>
    </dataSource>
    
    <library id="DB2JCCLib">
        <fileset dir="C:/DB2/java" includes="db2jccx.jar db2jcc_license_cisuz.jar"/>
    </library>
    Pour DB2 sur iSeries (Native)
    <dataSource id="DefaultDataSource" jndiName="jdbc/db2iNative">
        <jdbcDriver libraryRef="DB2iNativeLib"/>
        <properties.db2.i.native databaseName="*LOCAL"/>
    </dataSource>
    
    <library id="DB2iNativeLib">
        <fileset dir="/QIBM/Proddata/OS400/Java400/ext" includes="db2_classesxx.jar"/>
    </library>
    Pour DB2 sur iSeries (Toolbox)
    <dataSource id="DefaultDataSource" jndiName="jdbc/db2iToolbox">
        <jdbcDriver libraryRef="DB2iToolboxLib"/>
        <properties.db2.i.toolbox databaseName="SAMPLEDB" serverName="localhost"/>
    </dataSource>
    
    <library id="DB2iToolboxLib">
        <fileset dir="/QIBM/ProdData/Http/Public/jt400/lib" includes="jt400.jar"/>
    </library>
    Pour Derby Embedded
    <dataSource id="DefaultDataSource" jndiName="jdbc/derbyEmbedded">
        <jdbcDriver libraryRef="DerbyLib"/>
        <properties.derby.embedded databaseName="C:/databases/SAMPLEDB" createDatabase="create"/>
    </dataSource>
    
    <library id="DerbyLib">
        <fileset dir="C:/db-derby-x.x.x.x-bin/lib"/>
    </library>
    Pour Derby Network Client
    <dataSource id="DefaultDataSource" jndiName="jdbc/derbyClient">
        <jdbcDriver libraryRef="DerbyLib"/>
        <properties.derby.client databaseName="C:/databases/SAMPLEDB" createDatabase="create" 
                                 serverName="localhost" portNumber="1527"/>
    </dataSource>
    
    <library id="DerbyLib">
        <fileset dir="C:/db-derby-x.x.x.x-bin/lib"/>
    </library>
    Pour Informix® JCC
    <dataSource id="DefaultDataSource" jndiName="jdbc/informixjcc">
        <jdbcDriver libraryRef="DB2JCCLib"/>
        <properties.informix.jcc databaseName="SAMPLEDB" serverName="localhost" portNumber="1526"/>
    </dataSource>
    
    <library id="DB2JCCLib">
        <fileset dir="C:/Drivers/jcc/x.x" includes="db2jccx.jar db2jcc_license_cisuz.jar"/>
    </library>
    Pour Informix JDBC
    <dataSource id="DefaultDataSource" jndiName="jdbc/informix">
        <jdbcDriver libraryRef="InformixLib"/>
        <properties.informix databaseName="SAMPLEDB" ifxIFXHOST="localhost" 
                             serverName="ol_machinename" portNumber="1526"/>
    </dataSource>
    
    <library id="InformixLib">
        <fileset dir="C:/Drivers/informix" includes="ifxjdbc.jar ifxjdbcx.jar"/>
    </library>
    Pour Microsoft SQL Server (pilote JDBC Microsoft)
    <dataSource id="DefaultDataSource" jndiName="jdbc/mssqlserver">
        <jdbcDriver libraryRef="MSJDBCLib"/>
        <properties.microsoft.sqlserver databaseName="SAMPLEDB" 
                                        serverName="localhost" portNumber="1433"/>
    </dataSource>
    
    <library id="MSJDBCLib">
        <file name="C:/sqljdbc_x.x/enu/sqljdbcxx.jar"/>
    </library>
    Pour Microsoft SQL Server (piloteDataDirect Connect for JDBC )
    <dataSource id="DefaultDataSource" jndiName="jdbc/ddsqlserver">
        <jdbcDriver libraryRef="DataDirectLib"/>
        <properties.datadirect.sqlserver databaseName="SAMPLEDB" 
                                         serverName="localhost" portNumber="1433"/>
    </dataSource>
    
    <library id="DataDirectLib">
        <file name="C:/DataDirect/Connect-x.x/lib/sqlserver.jar"/>
    </library>
    Pour MySQL
    <dataSource id="DefaultDataSource" jndiName="jdbc/mySQL">
        <jdbcDriver libraryRef="MySQLLib"/>
        <properties databaseName="SAMPLEDB" serverName="localhost" portNumber="3306"/>
    </dataSource>
    
    <library id="MySQLLib">
        <file name="C:/mysql-connector-java-x.x.xx/mysql-connector-java-x.x.xx.jar"/>
    </library>
    Pour PostgreSQL
    <dataSource id="DefaultDataSource" jndiName="jdbc/postgres">
        <jdbcDriver libraryRef="PostgresLib"/>
        <properties.postgresql databaseName="SAMPLEDB" serverName="localhost" portNumber="5432"/>
    </dataSource>
    
    <library id="PostgresLib">
        <file name="C:/postgresql-x.x.xx/postgresql-x.x.xx.jar"/>
    </library>
    Pour Oracle
    <dataSource id="DefaultDataSource" jndiName="jdbc/oracle">
        <jdbcDriver libraryRef="OracleLib"/>
        <properties.oracle URL="jdbc:oracle:thin:@//localhost:1521/SAMPLEDB"/>
    </dataSource>
    
    <library id="OracleLib">
        <file name="C:/Oracle/lib/ojdbcx.jar"/>
    </library>
    Pour Oracle Call Interface (OCI)
    <dataSource id="DefaultDataSource" jndiName="jdbc/oracleOCI">
      <jdbcDriver libraryRef="OracleOciLib"/>
      <properties.oracle URL="jdbc:oracle:oci:@//localhost:1521/SAMPLEDB"/>                     
    </dataSource>
    
    <library id="OracleOciLib">
      <fileset dir="C:/Oracle/OCI/instantclient"/>
    </library>
    Configurez l'environnement Liberty pour reconnaître les bibliothèques client natives OCI en définissant le chemin d'accès aux bibliothèques dans le fichier Liberty server.env sur la variable d'environnement path de votre système d'exploitation.
    • Pour plateformes AIXLIBPATH
    • Pour plateformes HP UNIXSHLIBPATH
    • Pour plateformes LINUXPour plateformes SolarisLD_LIBRARY_PATH
    • Pour plateformes WindowsPATH
    Définissez également le chemin d'accès à la bibliothèque dans le fichier Liberty jvm.options .
    -Djava.library.path=C:\\Oracle\\OCI\\instantclient

    Pour plus d'informations sur l'utilisation des fichiers de configuration server.env et jvm.options , voir Personnalisation de l'environnement Liberty.

    Pour Oracle Universal Connection Pool (UCP)
    <dataSource id="DefaultDataSource" jndiName="jdbc/oracleUCP">
        <jdbcDriver libraryRef="OracleUCPLib" />
        <properties.oracle.ucp URL="jdbc:oracle:thin:@//localhost:1521/SAMPLEDB"/>
    </dataSource>
    
    <library id="OracleUCPLib">
        <fileset dir="C:/Oracle/Drivers" includes="ojdbcx.jar ucp.jar"/>
    </library>

    Si vous utilisez un pool de connexions universelles (UCP) Oracle, les propriétés de source de données suivantes sont ignorées : statementCacheSize et validationTimeout. Les propriétés du gestionnaire de connexions suivantes sont également ignorées : agedTimeout, connectionTimeout, maxIdleTime, maxPoolSize, minPoolSize, purgePolicy, reapTime, maxConnectionsPerThread et maxConnectionsPerThreadLocal. Utilisez la fonctionnalité de pool de connexions universelles (UCP) Oracle équivalente.

    Pour Sybase
    <dataSource id="DefaultDataSource" jndiName="jdbc/sybase">
        <jdbcDriver libraryRef="SybaseLib"/>
        <properties.sybase databaseName="SAMPLEDB" serverName="localhost" portNumber="5000"/>
    </dataSource>
    
    <library id="SybaseLib">
        <file name="C:/Drivers/sybase/jconnx.jar"/>
    </library>
    Pour solidDB
    <dataSource id="DefaultDataSource" jndiName="jdbc/solidDB">
        <jdbcDriver libraryRef="solidLib"/>
        <properties databaseName="SAMPLEDB" URL="jdbc:solid://localhost:2315/"/>
    </dataSource>
    
    <library id="solidLib">
        <file name="C:/Drivers/solidDB/SolidDriverx.x.jar"/>
    </library>
    Pour un pilote JDBC inconnu de Liberty
    <dataSource id="DefaultDataSource" jndiName="jdbc/sample" type="javax.sql.XADataSource">
        <jdbcDriver libraryRef="SampleJDBCLib" 
                    javax.sql.XADataSource="com.ibm.sample.SampleXADataSource"/>
        <properties databaseName="SAMPLEDB" hostName="localhost" port="12345"/>
    </dataSource>
    
    <library id="SampleJDBCLib">
        <file name="C:/Drivers/SampleJDBC/sampleDriver.jar"/>
    </library>
    Dans cet exemple, le pilote JDBC se trouve dans C:/Drivers/SampleJDBC/sampleDriver.jar et il fournit une implémentation de javax.sql.XADataSource nommée com.ibm.sample.SampleXADataSource. Le pilote JDBC fournit également des propriétés de source de données spécifiques au fournisseur, telles que databaseName, hostName et port.