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.*;
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;
}
}
}