Fonctions de portabilité pour l'accès aux données
Ces interfaces gèrent le RRA (Relational Resource Adapter) afin que les fonctions spécifiques à la base de données soient utilisables sur des connexions entre le serveur d'applications et cette base de données.
En d'autres termes, vos applications peuvent accéder aux données de différentes bases de données et exploiter leurs fonctions propres sans aucun changement de code. En outre, WebSphere Application Server permet de se connecter à une source de données non prise en charge par la persistance WebSphere. Toutefois, la source de données doit être implémentée soit comme type XXADataSource, soit comme type ConnectionPoolDataSource et doit être conforme à la spécification JDBC 2.x.
La portabilité de vos applications peut être obtenue au moyen des composants suivants :
- Interface DataStoreHelper
- Avec cette interface, chaque plateforme de magasin de données peut "brancher" ses propres fonctions de stockage de données
dans le contexte d'exécution (runtime) de l'adaptateur de ressources
relationnelles. WebSphere application Server fournit une implémentation de cette interface pour chaque fournisseur JDBC pris en charge.
L'interface fournit également une classe GenericDataStoreHelper à l'usage des sources de données non prises en charge. Vous pouvez sous-classer la classe GenericDataStoreHelper ou les autres classes auxiliaires fournies par WebSphere pour prendre en charge toute nouvelle source de données.
Remarque : Si vous configurez l'accès aux données via un fournisseur JDBC défini par l'utilisateur, n'implémentez pas l'interface DataStoreHelper directement. Vous devez soit sous-classer la classe GenericDataStoreHelper, soit sous-classer l'une des classes d'implémentation de DataStoreHelper fournies par IBM® (si le comportement de votre base de données ou la syntaxe SQL est similaire à l'une de ces classes fournies).Pour plus d'informations, voir la rubrique DataStoreHelper de la documentation de l'API (répertoriée dans l'index de la documentation de l'API).
Le code suivant montre comment créer une classe auxiliaire de magasin de données (DataStoreHelper) pour ajouter de nouveaux mappages d'erreurs destinés à une source de données non prise en charge par le produit.
public class NewDSHelper extends GenericDataStoreHelper { public NewDSHelper(java.util.Properties dataStoreHelperProperties) { super(dataStoreHelperProperties); java.util.Hashtable myErrorMap = null; myErrorMap = new java.util.Hashtable(); myErrorMap.put(new Integer(-803), myDuplicateKeyException.class); myErrorMap.put(new Integer(-1015), myStaleConnectionException.class); myErrorMap.put("S1000", MyTableNotFoundException.class); setUserDefinedMap(myErrorMap); ... } }
- Classe WSCallHelper
- Cette classe fournit deux méthodes qui vous permettent d'utiliser des méthodes et des classes spécifiques au fournisseur non conformes aux API JDBC standard (et ne faisant pas partie des packages d'extension
de WebSphere Application Server).
- méthode jdbcCall()
A l'aide de la méthode jdbcCall() statique, vous pouvez appeler des méthodes JDBC non standard spécifiques à un fournisseur sur vos objets JDBC. (Pour plus d'informations, voir la rubrique WSCallHelper de la documentation de l'API.) Le segment de code suivant illustre l'emploi de cette méthode (avec une source de données DB2) :
Connection conn = ds.getConnection(); // get connection attribute String connectionAttribute =(String) WSCallHelper.jdbcCall(DataSource.class, ds, "getConnectionAttribute", null, null); // setAutoClose to false WSCallHelper.jdbcCall(java.sql.Connection.class, conn, "setAutoClose", new Object[] { new Boolean(false)}, new Class[] { boolean.class }); // get data store helper DataStoreHelper dshelper = WSCallHelper.getDataStoreHelper(ds);
- méthode jdbcPass()
Utilisez cette méthode pour exploiter les classes JDBC non standard fournies par certains fournisseurs de bases de données. Ces classes contiennent des méthodes nécessitant que des objets JDBC propriétaires du fournisseur soient transmis en tant que paramètres.
En particulier, les implémentations d'Oracle peuvent impliquer l'utilisation de classes non standard fournies par le fournisseur. Les méthodes contenues dans ces classes sont les suivantes :
oracle.sql.ArrayDescriptor ArrayDescriptor.createDescriptor(java.lang.String, java.sql.Connection) oracle.sql.ARRAY new ARRAY(oracle.sql.ArrayDescriptor, java.sql.Connection, java.lang.Object) oracle.xml.sql.query.OracleXMLQuery(java.sql.Connection, java.lang.String) oracle.sql.BLOB.createTemporary(java.sql.Connection, boolean, int) oracle.sql.CLOB.createTemporary(java.sql.Connection, boolean, int) oracle.xdb.XMLType.createXML(java.sql.Connection, java.lang.String)
L'exemple de code suivant indique comment utiliser jdbcPass pour appeler la méthode Oracle XMLType.createXML sur une connexion. Cette fonction Oracle crée un objet de type XML à partir des données XML que la base de données fait passer à votre application.
XMLType poXML = (XMLType)(WSCallHelper.jdbcPass(XMLType.class, "createXML", new Object[]{conn,poString}, new Class[]{java.sql.Connection.class, java.lang.String.class}, new int[]{WSCallHelper.CONNECTION,WSCallHelper.IGNORE}));
Pour plus d'exemples sur l'utilisation de jdbcPass et une liste complète de paramètres de méthode, voir la documentation de l'API sur la classe WSCallHelper. Dans ce centre de documentation, vous pouvez accéder à la documentation de l'API en suivant ces étapes :- Cliquez sur Référence > Documentation sur les API de développement > Interfaces de programmation d'application
- Cliquez sur com.ibm.websphere.rsadapter
- Dans la section Résumé de classe, cliquez sur WSCallHelper
ATTENTION : L'utilisation de la méthode jdbcPass() implique l'utilisation de l'objet JDBC en dehors des mécanismes de protection de WebSphere Application Server. L'exécution de certaines opérations (telles que la définition de la propriété autoCommit, ou des paramètres d'isolement des transactions, etc.) en dehors de ces mécanismes de protection entraînera des problèmes lors de l'utilisation future de ces connexions en pool. IBM ne garantit pas la stabilité de l'objet une fois que cette méthode a été appelée ; il incombe à l'utilisateur de s'assurer que l'appel de cette méthode n'entraîne pas l'exécution d'opérations susceptibles de l'endommager. Son utilisation relève de votre seule responsabilité.En raison de ces problèmes potentiels, WebSphere Application Server contrôle de manière stricte les méthodes qu'il est possible d'appeler à l'aide de la méthode jdbcPass(). Si vous avez besoin de support sur une méthode qui n'est pas répertoriée ici, contactez le support de WebSphere Application Server avec des informations sur cette méthode.
- méthode jdbcCall()