2、Weblogic Server中的JDBC配置,包括:配置连接池、配置数据源;
事物的开销十分昂贵,特别是两阶段提交。因此,只有在必须使用事务的时候,才使用事务。要尽可能快地提交或回滚事务。
程序代码:
文件一、MyContext .java
package study1.Comm;
import javax.naming.*;
import java.util.Properties;
/**
*说明:
* MyContext主要通过getInitialContext()方法获得WLS的上下文环境,以方便JMS、JNDI等各种操作。
* 编写:
* TANMB 2007-10-30
*/
public class MyContext {
public MyContext() {
}
//取得Weblogic Server的初始化环境,以进行JNDI查询。
public static Context getInitialContext() throws Exception {
String url = "t3://127.0.0.1:7001";//Weblogic Server的地址、端口号
String user = "weblogic";//Weblogic Server的用户名和口令
String password = "weblogic";
Properties props = null;
try {
props = new Properties();
props.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
props.put(Context.PROVIDER_URL, url);
if (user != null) {
props.put(Context.SECURITY_PRINCIPAL, user);
props.put(Context.SECURITY_CREDENTIALS,
password == null ? "" : password);
}
return new InitialContext(props);
}
catch (Exception e) {
System.out.println(e.getMessage());
throw e;
}
}
}
文件二、MyDbcp .java
package study1.DBCP;
import java.sql.*;
import javax.sql.*;
import javax.naming.*;
import java.util.Properties;
import javax.rmi.PortableRemoteObject;
import study1.Comm.MyContext;
/**
*说明:
* Weblogic Server中DBCP的配置及使用介绍
*
*编写:
* TANMB 2007-11-1
*/
public class MyDbcp {
public MyDbcp() {
}
public static void main(String[] args) {
MyDbcp myDbcp1 = new MyDbcp();
DataSource ds = null;
Context ctx = null;
Connection con = null;
try {
ctx = MyContext.getInitialContext();
//MySqlJNDI为数据源在JNDI中的名称
ds = (javax.sql.DataSource) ctx.lookup("MySqlJNDI");
}
catch (Exception ex) {
System.out.println("Init Error:" + ex);
ex.printStackTrace();
}
Statement statement = null;
ResultSet rst = null;
try {
con = ds.getConnection();
if (con == null)
System.out.println("con is null");
statement = con.createStatement();
rst = statement.executeQuery("select * from student ");
while (rst.next()) {
System.out.print("/t" + rst.getLong("stuid"));
System.out.print("/t" + rst.getString("stuname"));
System.out.print("/t" + rst.getInt("departid"));
System.out.println("/t" + rst.getString("memo"));
}
rst.close();
statement.close();
}
catch (Exception ex) {
System.out.println("Error Code=" + ex.getMessage());
ex.printStackTrace();
}
finally {//注意,释放资源的顺序,和打开的顺序相反。
try {
if(rst!=null) rst.close();
}
catch (Exception ex) {}
try {
if (statement != null) statement.close();
}
catch (Exception ex) {}
try {
if (con != null) con.close();
}
catch (Exception ex) {}
}
}
}
JTA
MyJTA .java
package study1.DBCP;
import java.sql.*;
import javax.naming.*;
import javax.sql.*;
import java.util.Properties;
import javax.rmi.PortableRemoteObject;
import javax.transaction.*;
import study1.Comm.MyContext;
/**
* 说明:
* WLS的事务程序示例
* 编写:
* TANMB 2007-11-1
*/
public class MyJTA {
public MyJTA() {
}
public static void main(String[] args) {
MyJTA myJTA1 = new MyJTA();
DataSource ds = null;
Context ctx = null;
Connection conn = null;
UserTransaction tx = null;
try {
/*
建立事务:
在WLS中实现JTA的第一步是创建UserTransaction的实例。UserTransaction事务
可以控制并发线程的执行。一个事务的并发线程可以是各种服务,如EJB、JDBC、JMS等。
*/
ctx = MyContext.getInitialContext();
tx = (UserTransaction) ctx.lookup(
"javax.transaction.UserTransaction");
/*
事务开始。之后针对数据库的任何操作都处于这个事务的范围之内,包括JDBC的调用
及其它依赖于JDBC的服务。
*/
tx.begin();
//查找数据源
ds = (javax.sql.DataSource) ctx.lookup("MySqlJNDI");
}
catch (Exception ex) {
System.out.println("Init Error:" + ex.getMessage());
ex.printStackTrace();
}
Statement stmt = null;
ResultSet rst = null;
try {
//建立连接
conn = ds.getConnection();
//执行与资源有关的操作
stmt = conn.createStatement();
stmt.executeUpdate(
"insert into student values(200801,'stu',1,'test')");
//如没有异常,则提交事务
tx.commit();
System.out.println("*********Success!**********");
}
catch (Exception ex) {
try {
tx.rollback();//回滚事务
}
catch (Exception e) {}
System.out.println("Error Msg="+ex.getMessage());
}
finally {
try {
if(stmt!=null)
stmt.close();
if(conn!=null)
conn.close();
}
catch (Exception ex) {}
}
}
}