Stockage de journaux de transaction dans une base de données relationnelle
Vous pouvez définir une source de données au sein de votre application, par le biais d'annotations ou dans le descripteur de déploiement, conformément à la spécification Java™ EE.
Remarque : L'attribut de chargeur de classe commonLibraryRef est recommandé pour les sources de données définies par l'application. L'attribut privateLibraryRef ne peut pas être utilisé pour l'espace de nom java:global et est déconseillé pour les autres portées. Si plusieurs applications déclarent le même espace de nom java:global pour spécifier la source de données, les fichiersserver.xml des applications doivent tous spécifier un attribut commonLibraryRef désignant la même bibliothèque partagée.
Lorsque vous définissez une source de données dans une application, le pilote JDBC doit être accessible à l'application. Cette définition est réalisée en configurant une bibliothèque partagée dans le fichier server.xml de votre application.
Exemple :
<application id="myApp" name="myApp" location="myApp.war" type="war">
<classloader commonLibraryRef="DB2Lib"/>
</application>
<library id="DB2Lib">
<fileset dir="C:/DB2/java" includes="db2jcc4.jar db2jcc_license_cisuz.jar"/>
</library>
Ensuite, vous pouvez définir une source de données dans votre application par le biais d'annotations ou dans le descripteur de déploiement.
- Utilisation d'annotations comme dans l'exemple suivant :
@DataSourceDefinition( name = "java:comp/env/jdbc/db2", className = "com.ibm.db2.jcc.DB2DataSource", databaseName = "SAMPLEDB", serverName = "localhost", portNumber = 50000, properties = { "driverType=4" }, user = "user1", password = "pwd1" ) public class MyServlet extends HttpServlet { @Resource(lookup="java:comp/env/jdbc/db2") DataSource ds;
- Utilisation du descripteur de déploiement comme dans l'exemple suivant (un fichier
web.xml) :
<data-source> <name>java:comp/env/jdbc/db2</name> <class-name>com.ibm.db2.jcc.DB2DataSource</class-name> <server-name>localhost</server-name> <port-number>50000</port-number> <database-name>SAMPLEDB</database-name> <user>user1</user> <password>pwd1</password> <property><name>driverType</name><value>4</value></property> </data-source>
En général, les propriétés définissables pour les éléments dataSource ou connectionManager,
dans le fichier server.xml, sont également disponibles pour une source de données définie par
une application. Deux exceptions à cela :
connectionManagerRef et
jdbcDriverRef, ce que vous ne pouvez pas spécifier
car pour une source de données
définie par une application, le gestionnaire de connexions et le
pilote JDBC sont définis implicitement. Lorsque des sources de données définies par l'application sont utilisées pour la validation en deux phases, vous pouvez
spécifier la propriété recoveryAuthDataRef pour sélectionner les données d'authentification à utiliser pour reprise des transactions. Vous devez toutefois savoir que la récupération des transactions n'est possible
que pendant l'exécution de l'application. Vous pouvez utiliser des variables, des mots de passe
encodés et des éléments de syntaxe de durée dans une source de données définie par
une application.
Remarque : La syntaxe de durée ne s'applique pas aux propriétés qui sont
explicitement définies dans l'annotation. Par exemple, loginTimeout ou maxIdleTime.
Ci-après figure un exemple de deux sources de données utilisant une syntaxe de propriétés de gestionnaire de connexions, de variables, de mots de passe codés et de durée.
@DataSourceDefinitions(value = {
@DataSourceDefinition(
name = "java:comp/env/jdbc/derby",
className = "org.apache.derby.jdbc.EmbeddedDataSource40",
databaseName = "${shared.resource.dir}/data/SAMPLEDB",
minPoolSize = 1,
maxPoolSize = 10,
maxIdleTime = 180,
properties = { "agedTimeout=10m", "connectionTimeout=30s", "createDatabase=create" }
),
@DataSourceDefinition(
name = "java:comp/env/jdbc/oracle",
className = "oracle.jdbc.pool.OracleDataSource",
url = "jdbc:oracle:thin:@//localhost:1521/SAMPLEDB",
user = "user1",
password = "{xor}Oz0vKDtt"
)
})