Skip to main content

ATG - how to use the Transaction Manager

Basic concepts of Java transaction

In its simplest definition, a transaction is a set of actions that is treated as an atomic unit; either all actions take place (the transaction commits), or none of them take place (the transaction rolls back).

Managing transactions is one of the primary tasks of an application server. The application server keeps track of transactions, remembering which transaction is associated with which request, and what transactional resources (such as JDBC or JMS connection) are involved. Each active transaction is represented by a transaction object, which implements the interface javax.transaction.Transaction.

A transaction is usually associated with a thread and only one transaction can be associated with a thread at any one time. A central service, called the Transaction Manager, is responsible for keeping track of all these transactions. The Transaction Manager is implemented through the Java Transaction API (JTA).

Transaction and Dynamo applications

In Dynamo applications, the TransactionManager object is represented by a Nucleus component, /atg/dynamo/transaction/TransactionManager. Nucleus components can get a pointer directly to the /atg/dynamo/transaction/TransactionManager component. Dynamo also exposes this component to standard J2EE components, such as servlets and EJBs, through the JNDI name dynamo:/atg/dynamo/transaction/TransactionManager.

In order for a transaction to keep track of all the resources, those resources must be enlisted with the transaction. Application server does this when we get the resource connection through a conection factory. These factory objects are available in Dynamo as Nucleus services. For example, the standard Dynamo DataSource object is found at /atg/dynamo/service/jdbc/JTDataSource. Nucleus components should acquire resources through these proper connection factory services, rather than accessing drivers directly from their managers. Dynamo’s default configuration uses a JDBC driver configured to simulate two-phase commits to work with JDBC drivers that do not support the two-phase commit protocol.

Best practice in dynamo transaction handling

The application should not attempt to acquire the resource once and pass it around from component to component in the interest of avoiding the code for acquiring or closing the connection. The application server make sure that same Connection object must be returned each time a connection is requested throughout a single transaction. Application components are required to close JDBC connections when they finish doing their individual portion of work. Rather than actually closing the connection to the database, the application server intercepts these close requests and interprets them as signals from the application that it is done with the connection for the time being. The application server then responds to that signal by returning the connection to a pool, or by maintaining the connection’s transactional association.

Transaction demarcation : doing small and complete tasks

For doing some small set of tasks by a thread which is already in a transaction, the thread can suspend the current transaction. After suspending, the transaction still exists and keeps track of the resources it has used so far, but any further work done by the thread does not use that transaction. After the transaction is suspended, the thread can create a transaction. After ending this new transaction, the previously suspended transaction can be resumed. An application server can suspend and resume transactions through calls to the TransactionManager object , but individual applications should not perform these operations directly. Instead, applications should use J2EE transaction demarcation facilities.

Transaction demarcation always wraps a sequence of actions. The demarcation initializes some transactional behavior before the demarcated area begins, then ends that transactional behavior when the demarcated area ends. The application server uses these demarcations to determine the appropriate calls to the TransactionManager object.

following are the differetn transaction demarcation modes ---> Required, RequiresNew , NotSupported , Supports , Mandatory , Never.

The class atg.dtm.UserTransactionDemarcation can be used by J2EE components and Nucleus components to perform basic transaction demarcation. This class accesses the UserTransaction object to perform its operations. The class atg.dtm.TransactionDemarcation can be used by Nucleus components to demarcate areas of code at a fine granularity. J2EE components cannot use this class, because it accesses the TransactionManager object directly.

Demarcation Code Sample


try{
try{
atg.dtm.TransactionDemarcation transactionDemarcation = new TransactionDemarcation();
.....
if (isTransactionMarkedAsRollBack()){
    getTransactionManager().getTransaction().rollback();
}
transactionDemarcation.begin(getTransactionManager(),transactionDemarcation.REQUIRES_NEW);
.....
}finally {
transactionDemarcation.end();
}
}catch (TransactionDemarcationException transactionDemarcationException) {
    <handle the transactionDemarcationException>
}

Demarcation in Pages

The DSP tag libraries dsp:beginTransaction, dsp:commitTransaction, dsp:demarcateTransaction, dsp:rollbackTransaction, dsp:setTransactionRollbackOnly, dsp:transactionStatus are available for transaction management. Also the droplets /atg/dynamo/transaction/droplet/Transaction and /atg/dynamo/transaction/droplet/EndTransaction  can be used to start and transaction in pages.

Debugging rollbacks


To debug the transaction rollbacks, in the TranasactionManager component, set debugTracesForRollbacks to true. So that application throws the rollback details, else you will never know which component actually set transaction to rollback.

Comments

  1. Hi Mr.Thomas,
    I am new to ATG and running into an issue...I posted this question in Oracle atg forum also...would you be able to give any suggestions?

    I am using atg 9.1 and weblogic 10.3.2. Installed both s/w and started weblogic server. I am using cim.bat to configure and I am stuck at a point where it asks for the app server I am using and I selected 'Weblogic' and when it asked for the path..I gave the correct path where weblogic is installed...but it says Weblogic lib path not found...even though I can see the server/lib directory....any suggestions please to resolve this problem?

    ReplyDelete
  2. Nice topic,see some good tips about using transactions in the below link
    http://atgtipsandtweaks.blogspot.com/2012/05/atg-transaction-best-practices.html

    ReplyDelete
  3. @ Anonymous : Sorry, I haven't used "cim.bat" , what is this file ? Is this specific to weblogic ?

    ReplyDelete

Post a Comment

Popular posts from this blog

JBoss - know more about the JBoss directory structure

Fundamentally, the JBoss architecture consists of the JMX MBean server, the microkernel, and a set of pluggable component services - the MBeans. The JBoss Application Server ships with three different server configurations. Within the <JBoss_Home>/server directory, you will find three subdirectories: minimal, default and all. The default configuration is the one used if you don’t specify another one when starting up the server. If you want to know which services are configured in each of these instances, look at the jboss-service.xml file in the <JBoss_Home>/server/<instance-name>/conf/ directory and also the configuration files in the <JBoss_Home>/server/<instance-name>/deploy directory. JBoss 4.0 features an embedded Apache Tomcat 5.5 servlet container. conf --> The conf directory contains the jboss-service.xml bootstrap descriptor file for a given server configuration. This has the jboss-log4j.xml file which configures the Apach...

ATG Product Catalog schema ER diagram

Check out the O rder schema ER-Diagram @   http://tips4ufromsony.blogspot.in/2012/02/atg-order-schema-er-diagram.html Check out the User Profile  schema ER-Diagram @ http://tips4ufromsony.blogspot.in/2012/03/atg-user-profile-schema-er-diagram.html If you would like to know the relationship between different Product Catalog tables, please find below screen shots of  Product Catalog schema ER Diagrams.

EMI calculator and Loan calculator : An xls attached to help you

This time I am attaching an xls file that will help you to find the EMIs of your loan and will help you to get an idea about how your bank is calculating the EMIs and how much principal repayment is done every month.  This will also help you to calculate the total interest and principal repayment for a financial year, that will help you to declare the Tax in case of Home Loans. This calculator is using the PMT excel formula to find the EMI. Click the link to download the   EMI Calculator . The xls file has two sheets : EMI Calculator –> This sheet will help you to calculate the EMIs if you enter the Loan amount, Loan tenure in years and Interest Rate. EquiDivided_Principal –> This sheet will help you to calculate the monthly payments if your bank is not following the EMI approach and is using the equi divided principal approach for the loan. Here also you need to enter the Loan amount, Loan tenure in years and Interest Rate to get the details. To compare the h...

CamStudio - to capture your screen activity into video (Screen casting free software)

CamStudio is a tool (open source) for recording screen activity into standard AVI video files (screen casting software). It also have the audio record feature. It can also used to convert AVIs into Flash Video format. Read more about screencast @  http://en.wikipedia.org/wiki/Screencast . You can download CamStudio from:   http://sourceforge.net/projects/camstudio/    or   http://camstudio.org/  . I have uploaded a demo video, recorded using the Camstudio release 2.6. You could watch a high quality  video @ Youtube:  http://www.youtube.com/watch?v=7S-6aHFcuUM or you could find a video with low resolution below : CamStudio can be used to: Create movies used in user trainings Demonstrate features of a new software Track the progress of a program that executes for a long time Record the sequence of steps that cause the occurrence of bugs in a faulty software Record a movie stream  Convert AVI files to Flash (...

Eclipse plugin: InstaSearch – for quick search

InstaSearch is an Eclipse plug-in for performing quick and advanced search of workspace files. This will index the files and when you search for some file contents, it will look with in this index and the search results will be faster, just like the Goolge instant search. It uses Lucene ( http://lucene.apache.org/ ) for indexing and fast searching of files in the workspace. Each search result file then can be previewed using few most matching and relevant lines. A double-click on the match leads to the matching line in the file. Main Features Instantly shows search results Shows a preview using relevant lines Periodically updates the index Matches partial words (e.g. case in CamelCase) Opens and highlights matches in files Searches JAR source attachments Supports filtering by extension/project/working set Download / Installation In Eclipse Helios (3.6) please install using the  Eclipse Marketplace from the Help menu http://marketplace.eclipse.org/s...