|Oracle8i CORBA Developer's Guide and Reference
Release 3 (8.1.7)
Part Number A83722-01
If you have more than a single database involved in your transaction, you must designate a two-phase commit engine for managing all changes to all databases involved in the transaction. A two-phase commit engine is responsible for contacting all of the databases at the end of the transaction and managing the commit or rollback of all updates to all included databases. Thus, this two-phase commit engine must have access to database links to each database included within the transaction.
To configure for a two-phase commit, your system administrator must do the following:
binddsfor each individual database when binding that database's
DataSourceinto the namespace.
UserTransactioninto the namespace.
Once all of this configuration is complete, your application differs from the single-phase commit scenario in the following aspects:
UserTransactionbinding; but instead, provide the username/password when retrieving the
UserTransactionobject within the
InitialContextused when looking up the
The following example shows a server object that performs an in-session activation to retrieve both the
DataSource objects that have been bound locally. The
UserTransaction was bound with the two-phase commit engine's URL, username, and password. The
DataSource objects were all bound with the proper database links.
//with the environment set, create the initial context. InitialContext ic = new InitialContext (); UserTransaction ut = (UserTransaction)ic.lookup ("/test/myUT"); //With the same username and password for the 2pc engine, // lookup the local datasource and a remote database. DataSource localDS = (DataSource)ic.lookup ("/test/localDS"); //remote lookup requires environment setup Hashtable env = new Hashtable (); env.put (Context.URL_PKG_PREFIXES, "oracle.aurora.jndi"); env.put (Context.SECURITY_PRINCIPAL, user); env.put (Context.SECURITY_CREDENTIALS, password); env.put (Context.SECURITY_AUTHENTICATION, ServiceCtx.NON_SSL_LOGIN); env.put(jdbc_accessURLContextFactory.CONNECTION_URL_PROP, namespaceURL); Context ic = new InitialContext (env);
//Register a JDBC OracleDriver. DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver()); //retrieve the DataSource for the remote database DataSource remoteDS = (DataSource)ic.lookup ("jdbc_access://test/NewYorkDS"); //retrieve connections to both local and remote databases Connection localConn = localDS.getConnection (); Connection remoteConn = remoteDS.getConnection (); ... //close the connections localConn.close(); remoteConn.close(); //end the transaction ut.commit();