How does a client application create a transaction object?

Jerry Smith

How you gain access to UserTransaction objects varies depending on the type of client. Enterprise JavaBeans provides two types of transaction management:

  • Container-managed transactions. As the name implies, the EJB container makes the decisions (based on the deployment descriptor's trans-attribute setting) regarding how to bundle operations into transactions and then works with the transaction manager, which manages the transaction processing.
  • Bean-managed transactions. In this case, a session bean obtains the UserTransaction object via the EJBContext using the getUserTransaction() method.

JMS clients can bundle several messages in a transaction simply by using a transactional session--a UserTransaction object is not required. To create a transactional session, use either QueueConnection.createQueueSession() or TopicConnection.createTopicSession() with true as the first argument. (Some JMS implementations support JTA, so that it's also possible to obtain a UserTransaction object from the JMS server.)

In other environments, for example, a web server that supports servlets and/or JavaServer Pages (JSP), a JMS server, and others, you obtain a UserTransaction object via JNDI. Of course, for a servlet to obtain a UserTransaction object, there must be a JTS-capable server to deliver the object.

Typically, the server provides the JNDI look-up name either directly or via a system or server property. For example, with the WebLogic server, you would use a code segment similar to the following:

  ...
  Context c = new InitialContext();
  UserTransaction ut = (UserTransaction)
    c.lookup("javax.jts.UserTransaction");
  ut.begin();
  // perform multiple operations...
  ut.commit()
  ...

With J2EE implementations, you obtain the UserTransaction object with a code segment similar to the following:

  ...
  Context c = new InitialContext();
  UserTransaction ut = (UserTransaction)
    c.lookup("java:comp/UserTransaction");
  ut.begin();
  // perform multiple operations...
  ut.commit()
  ...

If the environment provides the UserTransaction object via a system property, you would use a code segment similar to the following:

  ...
  String transName = System.getProperty("jta.UserTransaction");
  Context c = new InitialContext();
  UserTransaction ut = (UserTransaction) c.lookup(transName);
  ut.begin();
  // perform multiple operations...
  ut.commit()
  ...

JNDI remote look-up names and property names vary, of course, across servers/environment.

0 Comments  (click to add your comment)
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

About | Sitemap | Contact