Sunday, December 24, 2006

External Transaction Service in Oracle TopLink

I have developed sample application, in order to demonstrate how to use External Transaction Service (ETS), when Oracle TopLink is used in Model layer. The business logic of this sample is to update employee salary and commission points without making explicit commit operation in EJB Session Bean. When ETS is used, Application Server thinks about when to use commit operation, not a developer. sample application is based on standard HR schema, Employees table. When developing this sample, at first I have generated TopLink entity object from Employees table. The second step was to create OC4JServerPlatformConfig class, this class will configure the session's server platform. The third step was to configure sessions.xml:
  1. Open sessions.xml in JDeveloper dialog window
  2. In General tab select check box for External Transaction Controller and enter following class name - oracle.toplink.transaction.oc4j.Oc4jTransactionController. For Session Event Listeners add - lt.andrejusb.persistence.OC4JServerPlatformConfig class name
  3. In Login tab select General tab and choose Data Source option for Data Source Location. Enter data source name in Data Source field, for example - jdbc/HrDS. Clear all other checkboxes in this tab
  4. In Login tab select Options tab and set True for External Connection Pool and External Transaction Controller
The fourth step was to generate EJB Session Bean and add custom updateSalary(Employees) method into it. Do not create any Core Facade Methods, when generating EJB Session Bean.

There is no explicit commit operation in updateSalary(Employees). UnitOfWork is acquired from session.getActiveUnitOfWork(), however if there is no active UnitOfWork session.acquireUnitOfWork() is used. Salary and commission points are updated using Employees clone object.

In the View layer, two JSF pages are used - view.jspx and edit.jspx. In view.jspx user can browse through available emploees data, and in edit.jspx update salary of the selected employee. Update button of ADF Faces Form in edit.jspx is binded to updateSalary(Employees) method.

Merry Christmas everyone! :)


Charles Poulsen said...


How do you make it use the managed connection specified in the sessions.xml file?

I am doing something similar in my application, but it always uses the database settings in my toplink mappings file.

I want it to use the managed connection.

Andrej Baranovskij said...

Hi Charles,

You need to create a session in sessions.xml. When session is created, just choose Login tab for it and in General section, for Data Source Location provide your Data Source string.