WebSphere Extended Deployment, Version 6.0.x     Systèmes d'exploitation : AIX, HP-UX, Linux, Solaris, Windows

API

L'API principale du support de source de données proxy est WSProxyDataSourceHelper. L'interface WSProxyDataSourceHelper est présentée ci-dessous :

package com.ibm.websphere.proxyds;

/**
* 

* L'interface WSDataSourceHelper est une interface utilisée pour le support de 
* sources de données multiples (également appelées sources de données proxy). Vous 
* pouvez rechercher une instance de WSProxyDataSourceHelper à partir de l'espace de nom de 
* WSProxyDataSourceHelper.JNDI_NAME.


* 
* Cette interface permet de prendre en charge le modèle Source de données proxy. L'interface 
* WSDataSourceHelper qui prend en charge le modèle Source de données 
* proxy version 5 est obsolète. Il est fortement recommandé d'utiliser cette interface 
* pour tirer parti des avantages offerts par le modèle Source de données proxy.


* 
* 

Cette interface comporte deux méthodes auxiliaires.



* 

		* resolveDataSourceReference(String) :
* Cette méthode auxiliaire permet de résoudre le nom JNDI global de la source de données 
* associée à une référence de ressource. Par exemple, si une référence de ressource 
* "jdbc/myDS1" est mappée à une source de données avec le nom JNDI global 
* "jdbc/Bank1", l'appel de méthode resolveDataSourceReference("jdbc/myDS1") 
* renvoie "jdbc/Bank1".
			* 
			* 
		* setCurrentDataSourceJndiName(String, String) :
* Cette méthode permet de définir le nom JNDI (pas le nom de la référence de ressource) de 
			* la source de données déléguée d'une source de données proxy à laquelle la transaction 
			* en cours doit accéder. Le nom JNDI de la source de données peut être obtenu à l'aide de la 
			* méthode resolveDataSourceReference(String).
* 
* 

* Voici un exemple :


* 
* 



Une application possède un EJB CMP "Account". Les données "Account" 
* sont réparties sur deux serveurs de base de données DB2 différents, 
* l'un sur la côte est, l'autre sur la côte ouest. Pour que l'EJB CMP 
* puisse accéder aux deux bases de données, le modèle Source de données
* proxy est utilisé.


* 
* 

L'EJB CMP "Account" est configuré avec une fabrique de connexions CMP "jdbc/ProxyDS". 
* Le bean session "AccountTransaction", qui assure la fonction de bean façade
* pour l'EJB CMP "Account", est configuré avec trois références de ressources 
* "jdbc/myDS1", "jdbc/myDS2" et "jdbc/proxy".


* 
* 

Dans l'espace d'administration, l'administrateur crée deux sources de données DB2 
* "jdbc/Account1" et "jdbc/Account2", une pour la base de données de la côte ouest et 
* l'autre pour la base de données de la côte est. L'administrateur crée également une 
* source de données proxy "jdbc/Accountroxy".
* La propriété personnalisée jndiNames de cette source de données proxy correspond à 
* "jdbc/Account1;jdbc/Account2"


* 
* 


Pendant la phase de déploiement, les références des sources de données "jdbc/myDS1" et "jdbc/myDS2"
* sont mappées à des sources de données physiques "jdbc/Account1" et "jdbc/Account2". 
* La référence de source de données "jdbc/proxy" est mappée à la source de données proxy 
* physique "jdbc/AccountProxy". La fabrique de connexions CMP "jdbc/ProxyDS" est également 
* mappée à la même source de données proxy physique "jdbc/AccountProxy". 



* 
* 

Lors de la phase de développement, l'application ne sait pas à quelles 
* sources de données physiques ces références de ressources sont mappées. 
* Pour obtenir le nom JNDI des sources de données physiques, l'application 
* peut résoudre les source de données dans la méthode setSessionContext en 
* utilisant le code suivant :


* 
*


// Recherche de WSProxyDataSourceHelper 
* dsHelper = (WSProxyDataSourceHelper) ic.lookup(WSProxyDataSourceHelper.JNDI_NAME);
* ...
* ds1JndiName = dsHelper.resolveDataSourceReference("jdbc/myDS1"); 
* ds2JndiName = dsHelper.resolveDataSourceReference("jdbc/myDS2");
* proxyJndiName = dsHelper.resolveDataSourceReference("jdbc/proxy");



* 
* 
* 

Avant que le bean session n'appelle les EJB CMP, le bean session bean peut utiliser 
* la méthode setCurrentDataSourceJndiName(String, String) pour indiquer la source de 
* données déléguée que cet EJB CMP doit utiliser. Dans notre exemple, si l'ID du 
* compte commence par "W", c'est-à-dire que les données se trouvent dans la base de données 
* de la côte ouest, la première source de données de délégation doit être utilisée. Par exemple :


* public String createAccount(String accountId, float balance) {
		// Définit la source de données à laquelle cette transaction doit accéder.

// Si l'ID du compte commence par "W", l'EJB CMP accède à la première source de données.
// Sinon, la seconde source de données est utilisée.
if (accountId.startsWith("W")) {
dsHelper.setCurrentDataSourceJndiName(proxyJndiName, ds1JndiName);
}
else {
dsHelper.setCurrentDataSourceJndiName(proxyJndiName, ds2JndiName);
}


AccountLocal account = null;
try {
account = accountHome.create(accountId);
account.setCreationDate(new Timestamp(System.currentTimeMillis()));
account.setOpenBalance(balance);
account.setBalance(balance);
}
catch (CreateException ce) {
throw new EJBException(ce);
}
......

* 
* * 
* @ibm-api
*/
public interface WSProxyDataSourceHelper {

/** Nom JNDI de l'utilisateur pour rechercher une instance de WSProxyDataSourceHelper */
String JNDI_NAME = "java:comp/env/com/ibm/websphere/proxyds/WSProxyDataSourceHelper";

/**
* Résolvez la référence de la source de données pour obtenir le nom JNDI global. Par exemple, 
* si la référence de ressource "jdbc/myDS1" est mappé à une source de données associée au nom 
* JNDI global "jdbc/Bank1", resolveDataSourceReference("jdbc/myDS1") renvoie la valeur 
* "jdbc/Bank1".
* 
* @param dsResRefName Nom de la référence de ressource
* @return Nom JNDI global de la source de données résolu pour cette référence de ressource.
* @exception ResRefNotFoundException indique que le nom de la référence de la ressource 
* est introuvable.
*/
String resolveDataSourceReference(String dsResRefName) throws ResRefNotFoundException;

/**
* 

* Définissez le nom JNDI (pas le nom de référence de la ressource) de la source de données 
* à laquelle la transaction en cours doit accéder. A l'heure actuelle, une seule transaction peut 
* accéder à plusieurs sources de données proxy. Toutefois, pour une source de données proxy 
* spécifique, une seule source de données de délégation est accessible.


 *
 * 
Par exemple, il y a deux source de données proxy possédant le nom JNDI "jdbc/proxy1"
* et "jdbc/proxy2". Les sources de données déléguées de la source de données "jdbc/proxy1"
* sont "jdbc/ds1" et "jdbc/ds2". Les sources de données déléguées de la source de données 
* proxy "jdbc/proxy2" sont "jdbc/ds3" et "jdbc/ds4". Dans une transaction, vous pouvez 
* accéder à la fois à "jdbc/proxy1" et à "jdbc/proxy2". Toutefois, vous ne pouvez pas 
* accéder aux deux sources de données déléguées "jdbc/ds1" et "jdbc/ds2" de la source de 
* données proxy "jdbc/proxy1". Vous ne pouvez pas non plus accéder aux sources de données
* déléguées "jdbc/ds3" et "jdbc/ds4" de la source de données proxy "jdbc/proxy2".


* 
* 

* Lors de la phase de développement, les développeurs ne peuvent pas connaître le nom JNDI 
* global de la source de données à laquelle une référence de ressource doit être mappée. Le 
* seul élément connu est la nom de la référence de ressource. La procédure recommandée consiste 
* à appeler la méthode resolveDataSourceReference(String) pour extraire le nom JNDI de la source 
* de données mappée, puis d'appeler setCurrentDataSourceJndiName(String, String) avec le nom JNDI 
* global.


* 
* @param proxyJndiName Nom JNDI de la source de données proxy
* @param dsJndiName Nom JNDI de la source de données de délégation en cours
*/
void setCurrentDataSourceJndiName(String proxyJndiName, String dsJndiName);
}



Related concepts
Programmation de la fonction de partitionnement

Rubrique Référence    

Conditions d'utilisation | Commentaires Dernière mise à jour le : Mar 16, 2006 10:01:30 AM EST
http://publib.boulder.ibm.com/infocenter/wxdinfo/v6r0/index.jsp?topic=?topic=/com.ibm.websphere.xd.doc/info/WPF51/rwpfapi.html

© Copyright IBM 2005, 2006. All Rights Reserved.
Ce centre de documentation s'appuie sur la technologie Eclipse. (http://www.eclipse.org)