JTA 個人總結Code例子
JTA,即Java Transaction API,譯為Java事務API。
JTA允許應用程式執行分散式事務處理——在兩個或多個網路計算機資源上訪問並且更新資料。JDBC驅動程式的JTA支援極大地增強了資料訪問能力。
類:test.java
import java.sql.Connection;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
import javax.transaction.UserTransaction;
/**
* @author zcshun
* @see 提供了一個獲得全域性事務UserTransaction物件的方法。
* 提供了兩個獲得分散式資料庫伺服器datasource物件。(通過在resin中介軟體中配置JNDI)
* 提供了兩個獲得分散式資料庫伺服器的connection物件。
* @date 2012-6-21 上午10:49:56
*/
public class text {
/**
* 獲取全域性式事務介面
*/
public static UserTransaction getUserTransaction(){
UserTransaction userTransaction = null;
try {
Context initContext = new InitialContext();
userTransaction = (UserTransaction) initContext.lookup("java:comp/UserTransaction");
} catch (Exception e) {
e.printStackTrace();
}
return userTransaction;
}
/**
* 功能:獲取db2資料庫的資料來源
*/
static private DataSource getDataSouceFromDB2() {
DataSource _source = null;
if (_source == null){
try {
Context context = new javax.naming.InitialContext(); //從JNDI取出java環境上下文物件
_source = (DataSource) context.lookup("java:comp/env/jdbc/db2Demo");//取出資料來源
} catch (NamingException e) {
System.out.println("NamingException->"+e.toString());
}
}
if(_source == null){
System.out.println("_source為null");
}
return _source;
}
/**
* 功能:獲取db2資料庫的連線物件
*/
public static Connection getConnectionFromDB2(){
try{
Connection c = getDataSouceFromDB2().getConnection(); //從連線池獲取連線物件
//c.setReadOnly(false);
if(c!=null)
System.out.println("已經獲得DB2資料庫連線物件conn。");
return c;
} catch (Exception e) {
System.err.println("JndiRes.getConnection() error.");
e.printStackTrace();
return null;
}
}
/**
* 功能:獲取oracle資料庫資料來源:
*/
static private DataSource getDataSouceFromOracleDB() {
DataSource _source = null;
if (_source == null){
try {
Context env = new javax.naming.InitialContext();
_source = (DataSource) env.lookup("java:comp/env/jdbc/oracleDemo");
} catch (NamingException e) {
System.out.println("NamingException->"+e.toString());
}
}
return _source;
}
/**
* 功能:獲得Oracle資料庫連線物件。
*/
public static Connection getConnectionFromOracleDB(){
try{
Connection c = getDataSouceFromOracleDB().getConnection();
if(c!=null)
System.out.println("已經獲得oracle資料庫連線物件conn。");
return c;
} catch (Exception e) {
System.err.println("JndiRes.getConnection() error.");
e.printStackTrace();
return null;
}
}
}
類Demo.java
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import javax.transaction.NotSupportedException;
import javax.transaction.SystemException;
import javax.transaction.UserTransaction;
/**
* @author zcshun
* @see 使用JTA控制全域性事務的Demo類
* @date 2012-6-21 上午11:05:55
*/
public class Demo {
public void Search(){
UserTransaction userTransaction = null;
Connection conn1 = null;
Connection conn2 = null;
text t = new text();
userTransaction = t.getUserTransaction();
conn1 = t.getConnectionFromDB2();
conn2 = t.getConnectionFromOracleDB();
if(conn1 != null && conn2 != null && userTransaction != null){
System.out.println("----------個物件成功就位!");
}
try {
userTransaction.begin();
} catch (NotSupportedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SystemException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
Statement sta1 = conn1.createStatement();
Statement sta2 = conn2.createStatement();
String sql1 = "INSERT INTO user(ID,NAME,AGE,SEX,ADDRESS)VALUES(1,'XIAOQIANG','15','1','湖北武漢')";
String sql2 = "INSERT INTO usertext(ID,NAME,AGE,SEX,ADDRESS)VALUES(1,'XIAOQIANG','15','1','湖北武漢')";
sta1.executeQuery(sql1);
sta2.executeQuery(sql2);
userTransaction.commit();
sta1.close();
sta2.close();
conn1.close();
conn2.close();
} catch(Exception e){
e.printStackTrace();
try {
userTransaction.rollback();
} catch (IllegalStateException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (SecurityException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (SystemException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
System.out.println("呼叫異常!");
}
}
}
在呼叫的時候可以建立Demo的物件,然後呼叫其例項的Search()方法即可。
Demo d = new Demo();
d.Search();
至於如何在resin中介軟體中配置JNDI,可參照 http://blog.csdn.net/kalision/article/details/7652375。
如有問題:請加技術qq群討論143461002。
相關文章
- 個人總結
- gulp個人總結
- Retrofit個人總結
- 爬蟲個人總結爬蟲
- activeMQ個人理解總結MQ
- 【個人總結】常用技巧
- 我的個人總結
- 個人最終總結
- 個人技術棧總結
- 個人吐血系列-總結MybatisMyBatis
- Laravel – Artisan 個人常用總結Laravel
- 個人總結-CPU快取快取
- 軟體工程——個人總結軟體工程
- 《軟體工程》個人總結軟體工程
- Laravel - Artisan 個人常用總結Laravel
- 個人面試總結(共勉)面試
- 個人工作總結(轉)
- web長連結技術個人總結Web
- PHP 個人面試題總結PHP面試題
- SpringBoot的個人總結Spring Boot
- vue個人小專案總結Vue
- 搭建個人部落格總結
- Element-UI個人使用總結UI
- 2013年個人總結
- ==、equals、hashcode總結
- Capistrano + SVN 個人安裝部署總結API
- 2018年個人總結
- 2023年個人總結
- 2021我的個人總結
- 2017年年度個人總結
- HTML標籤和CSS個人總結HTMLCSS
- 個人總結(css3新特性)CSSS3
- 2016-個人總結
- 2016年個人總結
- js中Dom操作的個人總結JS
- 專案總結之個人失誤
- 軟體工程個人最終總結軟體工程
- CodeReview實施總結View