L'API principale per il supporto dell'origine dati proxy èWSProxyDataSourceHelper. Di seguito è riportata l'interfaccia WSProxyDataSourceHelper:
package com.ibm.websphere.proxyds; /** * L'interfaccia WSProxyDataSourceHelper è un'interffaccia utilizzata per il * supporto dell'origine dati CMP (detta anche origine dati proxy). Gli utenti possono ricercare * un'istanza di WSProxyDataSourceHelper dallo spazio dei nomi JNDI utilizzano il nome JNDI * WSProxyDataSourceHelper.JNDI_NAME. * * Questa interfaccia è utilizzata per supportare il modello dell'origine dati proxy. L'unico * interfaccia WSDataSourceHelper che supporta il modello dell'origine dati proxy V5 * non è più utilizzata. Gli utenti devono utilizzare questa interfaccia * per sfruttare i vantaggi del modello dell'origine dati del proxy. * * Esistono due metodi helper in questa interfaccia. * * resolveDataSourceReference(String): * Questo metodo helper è utilizzato per risolvere il nome JNDI globale * dell'origine dati associata a un riferimento risorse. Ad esempio, se un * riferimento risorse "jdbc/myDS1" è associato a un'origine dati con * nome JNDI globale "jdbc/Bank1", la chiamata del metodo resolveDataSourceReference("jdbc/myDS1") * restituirà "jdbc/Bank1". * * * setCurrentDataSourceJndiName(String, String): * Questo metodo è utilizzato per impostare il nome JNDI (non il nome del riferimento risorse) * dell'origine dati delegata di una determinata origine dati proxy a cui accede * la transazione corrente. Il nome JNDI dell'origine dati può essere ottenuto utilizzando * il metodo resolveDataSourceReference(String). * * * Segue un esempio: * * Un'applicazione ha l'EJB CMP "Account". I dati di Account * sono divisi in due diversi server di database DB2, uno sulla costa ovest e l'altro * sulla costa est. Perché L'EJB CMP * Account possa accedere a entrambi i database, viene utilizzato il modello dell'origine dati proxy. * * L'EJB CMP Account è configurato con il valore predefinito di connessione CMP "jdbc/ProxyDS". * Il bean di sessione AccountTransaction, che funziona da * frontespizio di sessione per l'EJB CMP Account, è configurato con tre * riferimenti risorse, "jdbc/myDS1", "jdbc/myDS2" e "jdbc/proxy". * * Nello spazio di gestione, l'amministratore crea due origini dati DB2 * "jdbc/Account1" e "jdbc/Account2", uno per il database della costa ovest e * l'altro per il database della costa est. L'amministratore crea inoltre * un'origine dati proxy "jdbc/Accountroxy". * La proprietà personalizzata jndiNames di questa origine dati proxy è impostata su * "jdbc/Account1;jdbc/Account2" * * In fase di distribuzione, i riferimenti all'origine dati "jdbc/myDS1" e "jdbc/myDS2" * sono associati alle origini dati fisiche "jdbc/Account1" e "jdbc/Acocunt2". * Il riferimento all'origine dati "jdbc/proxy" * è associato all'origine dati proxy "jdbc/AccountProxy". Il valore predefinito di connessione CMP * "jdbc/ProxyDS" viene associato alla stessa origine dati proxy fisica "jdbc/AccountProxy". * * In fase di sviluppo, l'applicazione non riconosce * le origine fisiche a cui sono associati i * riferimenti risorse. Per ottenere il nome JNDI delle origini dati fisiche, * l'applicazione può risolvere le origini dati nel metodo setSessionContext utilizzando * il seguente codice: * * // Ricerca WSProxyDataSourceHelper * dsHelper = (WSProxyDataSourceHelper) ic.lookup(WSProxyDataSourceHelper.JNDI_NAME); * ... * ds1JndiName = dsHelper.resolveDataSourceReference("jdbc/myDS1"); * ds2JndiName = dsHelper.resolveDataSourceReference("jdbc/myDS2"); * proxyJndiName = dsHelper.resolveDataSourceReference("jdbc/proxy"); * * * Prima che il bean di sessione richiami gli EJB CMP, il bean di sessione può utilizzare * il metodo setCurrentDataSourceJndiName(String, String) per indicare * l'origine dati delegata che verrà utilizzata dall'EJB CMP. Nel nostro esempio, se l'ID di account * inizia con "W", che significa che i dati si trovano nel database della costa ovest, * allora deve essere utilizzata la prima origine dati delegata. Ad esempio: * public String createAccount(String accountId, float balance) { // Imposta l'origine dati a cui avrà accesso questa transazione. // Se l'ID dell'account inizia con "W", il CMP avrà accesso alla prima origine dati // altrimenti, verrà utilizzata la seconda origine dati. 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 { /** Il nome JNDI in cui l'utente deve ricercare un'istanza di WSProxyDataSourceHelper */ String JNDI_NAME = "java:comp/env/com/ibm/websphere/proxyds/WSProxyDataSourceHelper"; /** * Risolve il riferimento all'origine dati sul nome JNDI globale. Ad esempio, * se un riferimento risorse "jdbc/myDS1" è associato a un'origine dati con * nome JNDI globale "jdbc/Bank1", resolveDataSourceReference("jdbc/myDS1") * restituirà "jdbc/Bank1". * * @param dsResRefName nome riferimento risorsa * @return il nome JNDI globale dell'origine dati risolta per questo riferimento risorsa. * @exception ResRefNotFoundException indica che il nome del riferimento risorsa * non è stato trovato. */ String resolveDataSourceReference(String dsResRefName) throws ResRefNotFoundException; /** * Imposta il nome JNDI (non il nome del riferimento risorsa) dell'origine dati delegata * a cui accederà la transazione corrente. Solo una transazione * può accedere a più origini dati proxy. Tuttavia, per una determinata * origine dati proxy, è possibile accedere soltanto a un'origine dati delegata. * * Ad esempio, esistono due origini dati proxy con nome JNDI "jdbc/proxy1" * e "jdbc/proxy2". Le origini dati delegate per l'origine dati proxy "jdbc/proxy1" * sono "jdbc/ds1" e "jdbc/ds2". Le origini dati delegate per l'origine dati proxy * "jdbc/proxy2" sono "jdbc/ds3" e "jdbc/ds4". In una transazione, è possibile * accedere sia a "jdbc/proxy1" che a "jdbc/proxy2". Tuttavia, non è possibile accedere a * entrambe le origini dati delagate "jdbc/ds1" e "jdbc/ds2" per l'origine dati proxy * "jdbc/proxy1". Non è possibile accedere neanche a entrambe le origini dati delegate "jdbc/ds3" * e "jdbc/ds4" per l'origine dati proxy "jdbc/proxy2". * * In fase di sviluppo, gli sviluppatori non conoscono il nome JNDI * globale dell'origine dati a cui verrà associato un riferimento risorse. L'unico * dato noto è il nome del riferimento risorse. La pratica consigliata è * richiamare il metodo resolveDataSourceReference(String) per ottenere il nome JNDI * dell'origine dati associata e richiamare quindi setCurrentDataSourceJndiName(String, String) * con il nome JNDI globale. * * @param proxyJndiName il nome JNDI dell'origine dati proxy * @param dsJndiName il nome JNDI dell'origine dati delegata corrente */ void setCurrentDataSourceJndiName(String proxyJndiName, String dsJndiName); }
Related concepts
Programmazione per l'utilità di partizione