WebSphere Extended Deployment, Version 6.0.x     Betriebssysteme: AIX, HP-UX, Linux, Solaris, Windows

API

Die Haupt-API für die Unterstützung von Proxy-Datenquellen ist WSProxyDataSourceHelper. Das Interface WSProxyDataSourceHelper wird im Folgenden vorgestellt:

package com.ibm.websphere.proxyds;

/**
* 

* Das Interface WSProxyDataSourceHelper ist ein Interface, das für die
* Unterstützung mehrerer CMP-Datenquellen verwendet wird. Diese Unterstützung
* wird auch Proxy-Datenquelle genannt. Der Benutzer kann mit dem JNDI-Namen
* WSProxyDataSourceHelper.JNDI_NAME Instanzen von WSProxyDataSourceHelper
* im JNDI-Namespace suchen.
* 
* Dieses Interface wird für die Unterstützung des Proxy-DataSource-Modells
* verwendet. Das Interface WSDataSourceHelper, das das Proxy-DataSource-Modell
* der Version 5 unterstützt, ist veraltet. Es wird dringend empfohlen, das
* neue Interface zu verwenden, um die Vorteile des Proxy-DataSource-Modells
* nutzen zu können.
* 
* 

* Das Interface enthält zwei Helper-Methoden.



* 

		* resolveDataSourceReference(String):
  * Diese Helper-Methode wird verwendet, um den globalen JNDI-Namen
  * der Datenquelle aufzulösen, der einer Ressourcenreferenz zugeordnet
  * ist. Wenn beispielsweise eine Ressourcenreferenz "jdbc/myDS1"
  * einer Datenquelle mit dem globalen JNDI-Namen "jdbc/Bank1"
  * zugeordnet ist, gibt der Methodenaufruf resolveDataSourceReference("jdbc/myDS1")
  * den Wert "jdbc/Bank1" zurück.
			* 
			* 
 		* setCurrentDataSourceJndiName(String, String):
   * Diese Methode wird verwendet, um den JNDI-Namen (nicht den
   * Ressourcenreferenznamen) der Delegierungsdatenquelle festzulegen,
   * auf die die aktuelle Transaktion zugreift. Der JNDI-Name der
   * Datenquelle kann mit der Methode resolveDataSourceReference(String)
   * abgerufen werden.
* 
* 

* Es folgt ein Beispiel:


* 
* 



* Eine Anwendung enthält die CMP-EJB "Account" (Konto). Die Kontodaten
* sind auf zwei verschiedene DB2-Datenbankserver verteilt, von denen
* sich einer an der amerikanischen Westküste, der andere an der amerikanischen
* Ostküste befindet. Damit die CMP-EJB "Account" auf beide Datenbanken
* zugreifen kann, wird das Proxy-DataSource-Modell eingesetzt.
* 
* 

* Für die CMP-EJB "Account" ist die CMP-Verbindungs-Factory "jdbc/ProxyDS"
* konfiguriert. Für die Session-Bean "AccountTransaction", die als Sitzungsfassade
* für die CMP-EJB "Account" auftritt, sind drei Ressourcenreferenzen
* konfiguriert: "jdbc/myDS1", "jdbc/myDS2" und "jdbc/proxy".
* 
* 

* Im Verwaltungsbereich erstellt der Administrator zwei DB2-Datenquellen mit
* den Namen "jdbc/Account1" und "jdbc/Account2", eine für die Datenbank an
* der Westküste, die andere für die Datenbank an der Ostküste. Außerdem
* erstellt der Administrator eine Proxy-Datenquelle mit dem Namen "jdbc/AccountProxy".
* Das benutzerdefinierte Merkmal jndiNames dieser Proxy-Datenquelle hat den
* Wert "jdbc/Account1;jdbc/Account2".
* 
* 


* Bei der Implementierung werden die Datenquellenreferenzen "jdbc/myDS1" und "jdbc/myDS2"
* den physischen Datenquellen "jdbc/Account1" und "jdbc/Account2" zugeordnet.
* Die Datenquellenreferenz "jdbc/proxy" wird der physischen Proxy-Datenquelle
* "jdbc/AccountProxy" zugeordnet. Die CMP-Verbindungs-Factory "jdbc/ProxyDS"
* wird ebenfalls der physischen Proxy-Datenquelle "jdbc/AccountProxy" zugeordnet.
* 
* 

* Zum Zeitpunkt der Entwicklung weiß die Anwendung nicht, welchen physischen
* Datenquellen diese Ressourcenreferenzen zugeordnet werden. Um den
* JNDI-Namen der physischen Datenquellen abzurufen, kann die Anwendung die
* Datenquellen in der Methode setSessionContext mit dem folgenden Code
* auflösen:
* 
*


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



* 
* 
* 

* Bevor die Session-Bean die CMP-EJBs aufruft, kann die Session-Bean mit der
* Methode setCurrentDataSourceJndiName(String, String) anzeigen, welche
* Delegierungsdatenquelle die jeweilige CMP-EJB verwendet. Für dieses
* Beispiel gilt Folgendes: Wenn die Konto-ID (accountID) mit "W" beginnt,
* d. h. die Daten sind in der Datenbank an der Westküste enthalten, wird
* die erste Delegierungsdatenquelle verwendet. Beispiel: 

* public String createAccount(String accountId, float balance) {
// Datenquelle festlegen, auf die diese Transaktion zugreift.

// Wenn die Konto-ID mit "W" beginnt, greift die CMP-EJB auf die erste
// Datenquelle zu, andernfalls wird die zweite Datenquelle verwendet.
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 {

/** Der JNDI-Namen, mit dem der Benutzer Instanzen von WSProxyDataSourceHelper sucht */
String JNDI_NAME = "java:comp/env/com/ibm/websphere/proxyds/WSProxyDataSourceHelper";

/**
* Datenquellenreferenz in globalen JNDI-Namen auflösen. Beispiel: * Wenn eine Ressourcenreferenz "jdbc/myDS1" einer Datenquelle mit dem
     * globalen JNDI-Namen "jdbc/Bank1" zugeordnet ist, gibt
     * resolveDataSourceReference("jdbc/myDS1") den Wert "jdbc/Bank1" zurück.
* 
* @param dsResRefName Ressourcenreferenzname
* @return Den aufgelösten globalen JNDI-Namen der Datenquelle für diese
     * Ressourcenreferenz.
* @exception ResRefNotFoundException Zeigt an, dass der Ressourcenreferenzname
     * nicht gefunden wurde.
*/
String resolveDataSourceReference(String dsResRefName) throws ResRefNotFoundException;

/**
* 

* Den JNDI-Namen (nicht den Ressourcenreferenznamen) der Datenquelle festlegen,
* auf den die aktuelle Transaktion zugreift. Derzeit kann eine Transaktion
* auf mehrere Proxy-Datenquellen zugreifen. Für eine bestimmte Proxy-Datenquelle
* kann nur auf eine Delegierungsdatenquelle zugegriffen werden.
*
 * 
* Beispiel: Es sind zwei Proxy-Datenquellen mit den JNDI-Namen "jdbc/proxy1"
* und "jdbc/proxy2" vorhanden. Die Delegierungsdatenquellen für die Proxy-Datenquelle
* "jdbc/proxy1" sind "jdbc/ds1" und "jdbc/ds2". Die Delegierungsdatenquellen für die
* Proxy-Datenquelle "jdbc/proxy2" sind "jdbc/ds3" und "jdbc/ds4". Sie können in einer
* Transaktion auf "jdbc/proxy1" und "jdbc/proxy2" zugreifen. Es ist jedoch nicht möglich,
* auf die beiden Delegierungsdatenquellen "jdbc/ds1" und "jdbc/ds2" für die Proxy-Datenquelle
* "jdbc/proxy1" zuzugreifen. Auch der Zugriff auf die beiden Delegierungsdatenquellen "jdbc/ds3"
* und "jdbc/ds4" für die Proxy-Datenquelle "jdbc/proxy2" ist nicht möglich.
* 
* 

* Während der Entwicklung kann der Entwickler den globalen JNDI-Namen
* der Datenquelle, der eine Ressourcenreferenz zugeordnet wird, nicht wissen.
     * Bekannt ist lediglich der Name der Ressourcenreferenz. Es wird empfohlen,
* die Methode resolveDataSourceReference(String) aufzurufen, um den JNDI-Namen
* der zugeordneten Datenquelle anzufordern, und anschließend
* setCurrentDataSourceJndiName(String, String) mit dem globalen JNDI-Namen
* aufzurufen.
* 
* @param proxyJndiName Der JNDI-Name der Proxy-Datenquelle
* @param dsJndiName Der Name der aktuellen Delegierungsdatenquelle
*/
void setCurrentDataSourceJndiName(String proxyJndiName, String dsJndiName);
}



Related concepts
Programmierumgebung des Partitionierungs-Feature

Referenzartikel    

Nutzungsbedingungen | Feedback Letzte Aktualisierung: Mar 23, 2006 9:57:42 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. Alle Rechte vorbehalten.
Dieses Information Center beruht auf der Eclipse-Technologie. (http://www.eclipse.org)