/** Nombre de referencia de recurso del origen de datos del proxy */ private static String proxyResRef = "jdbc/proxyDS"; /** Referencia de recurso 1 del origen de datos */ private static String resRef1 = "jdbc/myDS1"; /** Referencia de recurso 2 del origen de datos */ private static String resRef2 = "jdbc/myDS2"; /** Nombre JNDI del origen de datos global para la referencia de recurso 1 del origen de datos */ private String globalDSJNDIName1 = null; /** Nombre JNDI del origen de datos global para la referencia de recurso 2 del origen de datos */ private String globalDSJNDIName2 = null; /** Nombre JNDI del origen de datos global para la referencia de recurso del origen de datos del proxy */ private String globalProxyDSJNDIName = null;También se define una instancia de WSProxyDataSourceHelper, de modo que el bean de sesión puede utilizarlo para resolver el nombre JNDI de origen de datos y establecerlo para la transacción.
/** * la instancia WSProxyDataSourceHelper utilizada para establecer el nombre JNDI de origen de datos * de la transacción actual y resolver la referencia de recurso de origen de datos * en el nombre JNDI global */ WSProxyDataSourceHelper dsHelper = null;A continuación figura el método setSessionContext:
public void setSessionContext(javax.ejb.SessionContext ctx) { mySessionCtx = ctx; // Buscar WSProxyDataSourceHelper y las factorías locales de EJB try { InitialContext ic = new InitialContext(); dsHelper = (WSProxyDataSourceHelper) ic.lookup(WSProxyDataSourceHelper.JNDI_NAME); accountHome = (AccountLocalHome) ic.lookup(accountHomeJNDIName); accountOwnerHome = (AccountOwnerLocalHome) ic.lookup(accountOwnerHomeJNDIName); } catch (Exception e) { throw new EJBException(e); } // Obtener el nombre de servidor AdminService service = AdminServiceFactory.getAdminService(); SERVER_NAME = service.getCellName() + "/" + service.getNodeName() + "/" + AdminServiceFactory.getAdminService().getProcessName(); // Resolver las referencias de recurso en los // nombres JNDI de origen de datos globales try { globalDSJNDIName1 = dsHelper.resolveDataSourceReference(resRef1); globalDSJNDIName2 = dsHelper.resolveDataSourceReference(resRef2); globalProxyDSJNDIName = dsHelper.resolveDataSourceReference(proxyResRef); } catch (ResRefNotFoundException rrnfe) { throw new EJBException(rrnfe);Busque WSProxyDataSourceHelper en el espacio de nombres JNDI mediante la siguiente sentencia:
dsHelper = (WSProxyDataSourceHelper ) ic.lookup(WSProxyDataSourceHelper .JNDI_NAME);A continuación, busque AccountLocalHome y AccountOwnerLocalHome, del modo habitual. A continuación, utilice la API AdminService para obtener el nombre de servidor. Utilice este nombre de servidor para verificar que el direccionamiento de particiones es correcto. No es necesario que los usuarios realicen esto en sus aplicaciones. El programa de ejecución de Partitioning Facility garantiza el comportamiento correcto del direccionamiento de las particiones.
globalDSJNDIName1 = dsHelper.resolveDataSourceReference(resRef1);Durante el tiempo de desarrollo de la aplicación, el desarrollador no sabe con qué nombre JNDI se va a correlacionar esta referencia de recurso. El componente del origen de datos del proxy proporciona una API para que la aplicación obtenga el nombre JNDI del origen de datos. Este origen de datos del nombre JNDI se utilizará para indicar al tiempo de ejecución qué origen de datos se debe utilizar.
/** * retirar dinero de una cuenta * @param accountId * @param amount * @return * @throws InSufficientFundException */ public String withdraw(String accountId, float amount) throws InSufficientFundException { // Establecer el origen de datos al que accederá esta transacción. setDataSource(accountId); try { AccountLocal account = accountHome.findByPrimaryKey(accountId); account.withdraw(amount); } catch (ObjectNotFoundException onfe) { throw new EJBException(onfe); } catch (FinderException fe) { throw new EJBException(fe); } return SERVER_NAME; }La diferencia entre este método y un método normal es que se añade la siguiente sentencia:
// Establecer el origen de datos al que accederá esta transacción. setDataSource(accountId);A continuación figura el método setDataSource:
/** * Establecer el origen de datos que va a utilizar el CMP para la * transacción actual. * Si accountID empieza por W, se utilizará el origen de datos 1. Si * accountID empieza por E, se utilizará el origen de datos 2. * * @param s */ private void setDataSource(String s) { if (s.startsWith("W")) { dsHelper.setCurrentDataSourceJndiName(globalProxyDSJNDIName, globalDSJNDIName1); } else { dsHelper.setCurrentDataSourceJndiName(globalProxyDSJNDIName, globalDSJNDIName2); } }El método setDataSource utiliza WSProxyDataSourceHelper para establecer el nombre JNDI del origen de datos actual para la transacción actual. Si accountId empieza por W, que indica que el ID debe estar almacenado en la base de datos de la costa oeste, se establecerá en la hebra el nombre JNDI globalDSJNDIName1. Si accountId empieza por E, que indica que el ID debe estar almacenado en la base de datos de la costa este, se establecerá en la hebra el nombre JNDI globalDSJNDIName2.
Ahora, se ha habilitado la aplicación con el soporte de origen de datos del proxy. En el próximo paso, se muestra cómo configurar los orígenes de datos DB2 y el origen de datos del proxy.
Related concepts
Desarrollo de aplicaciones utilizando el soporte del origen de datos del
proxy en WSAD