Weblogic JTA

Weblogic下的JTA开发实例:

七个步骤:建立事务、开始事务、找到数据源、建立数据库连接,执行与数据源有关的操作,关闭连接,完成事务。下面结合代码来说明。

在建立事务之前要先创建一个上下文环境,代码如下:

  String url = "t3://localhost:7001";
  String user = "weblogic";
  String password = "weblogic";
  Properties properties = null;
  try{
   properties = new Properties();
   properties.put(Context.INITIAL_CONTEXT_FACTORY,

    "weblogic.jndi.WLInitialContextFactory");
   properties.put(Context.PROVIDER_URL, url);
   if(user != null){
    properties.put(Context.SECURITY_PRINCIPAL, user);
    properties.put(Context.SECURITY_CREDENTIALS,password == null ? "" : password);
    
   }
   return new InitialContext(properties);
  }catch (Exception e){
   throw e;
  }
注意红色部分的文字,不要出错。

1。建立事务

在weblogic下实现JTA的第一步是创建一个UserTransaction类的实例。UserTransaction类可以控制事务并发线程的执行。一个事务的并发线程可以是各种各样的服务。可以通过JNDI检索UserTransaction类。

   ctx = getInitialContext();
   tx = (UserTransaction)ctx.lookup("javax.transaction.UserTransaction");

2。开始事务。

调用UserTransaction对象的begin()方法。例如:tx.begin();

3。找到数据源。

ds = (javax.sql.DataSource)ctx.lookup("mssql");

4。建立数据库连接。

通过Tx Data Source对象ds可以建立数据库连接:

javax.sql.Connection myConn = ds.getConnection();

5。执行与资源有关的操作。

如建立语句对象,然后通过语句对象执行数据库操作。

6。关闭连接。

创建的连接用完后必须关闭。

7。完成事务

详细代码如下:

package com;

import java.sql.*;
import javax.naming.*;
import javax.sql.*;
import java.util.Properties;
import javax.transaction.*;

/**
 * @author Richard
 *
 */
public class JTATest {
 public static void main(String args[]){
  DataSource ds = null;
  Context ctx = null;
  Connection myConn = null;
  UserTransaction tx = null;
  try{
   ctx = getInitialContext();//创建一个上下文环境
   // 建立事务
   tx = (UserTransaction)ctx.lookup("javax.transaction.UserTransaction");
   // 开始事务
   tx.begin();
   // 找到数据源
   ds = (javax.sql.DataSource)ctx.lookup("mssql");
   
  }catch(Exception E){
   System.out.println("Init Error: "+ E);
  }
  
  Statement myStatement = null;
  ResultSet myResult = null;
  try{
   // 建立数据库连接
   myConn = ds.getConnection();
   // 执行与资源有关的操作
   myStatement = myConn.createStatement();
   myStatement.executeUpdate("INSERT INTO emp (empname,empid,job) VALUES ('John','10','sales')");
   tx.commit();
   System.out.println("Success!");
  }catch (Exception e){
   try{
    tx.rollback();
   }catch(Exception el){
    
   }System.out.println("Error message = " + e.getMessage());
   
  }finally{
   try{
    if(myStatement != null){
     myStatement.close();
    }
    if(myConn != null){
     myConn.close();
    }
    
   }catch(SQLException e){
    System.out.println("Error code = " + e.getErrorCode());
    System.out.println("Error message = " + e.getMessage());
   }
  }
 }
 private static Context getInitialContext() throws Exception{
  String url = "t3://localhost:7001";
  String user = "weblogic";
  String password = "weblogic";
  Properties properties = null;
  try{
   properties = new Properties();
   properties.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
   properties.put(Context.PROVIDER_URL, url);
   if(user != null){
    properties.put(Context.SECURITY_PRINCIPAL, user);
    properties.put(Context.SECURITY_CREDENTIALS,password == null ? "" : password);
    
   }
   return new InitialContext(properties);
  }catch (Exception e){
   throw e;
  }
 }

}

posted @ 2007-10-07 19:13  好好学习,天天进步  阅读(2791)  评论(0编辑  收藏  举报