|
|
|
|
Blog信息
|
blog名称:四裤全输的小窝~~ 日志总数:178 评论数量:699 留言数量:198 访问次数:1153641 建立时间:2005年10月29日 | |
|
|
|
|
 |
|
|
|
|
[JAVA]weblogic server 中的事务
文章收藏, 网上资源, 软件技术, 电脑与网络 四裤全输 发表于 2006/6/10 13:40:44
|
转自:http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=123&threadID=26917&messageID=164972 一) weblogic server 中的事务: j2ee简化了分布式事务管理应用程序的编写。j2ee包括了两套规范,用来支持分布式的事务,一种是java Transaction(JTA),另一种是java Transaction Service(JTS)。JTA是一种高层的、与实现无关的、与协议无关的API,应用程序和应用服务器可以使用JTA访问事务! JTA由三部分组成:高层的应用事务划分接口(供事务客户使用)、高层的事务管理器接口(供应用服务器使用)和X/OpenXA协议的标准java映射(供事务性资源管理器使用)。 1、UserTransaction接口 javax.transaction.UserTransaction接口使得应用程序能够编程控制事务边界。这个接口可以有java客户端程序或者EJB来使用。 java客户客户端程序需要首先通过JNDI获得UserTransaction对象的引用, 然后使用该对象的方法完成事务的开始、提交或者回滚。代码如下: java.uitl.Properties env=... Context ctx=new InitialContext(env); javax.transaction.UserTransaction userTran=(javax.transaction.UserTransaction)ctx.lookup("javax.transaction.UserTransaction"); userTran.commit() try { userTran.commit(); } catch(Exception e) { userTran.rollBack(); throw new Exception(....); } 2、TransactionManager接口 应用服务器使用javax.transaction.TransactionManager接口代表受控的应用程序控制事务的边界。例如,EJB容器为事务性EJB组件管理事务状态。 3、Transaction接口 使用Transaction接口可以执行与目标对象相关联的事务操作。 4、XAResource接口 javax.transaction.xa.XAResource接口是基于X/Open CAE规范(分布式事务处理:XA规范)工业标准XA接口的java映射。XAResource接口定义了分布式事务处理环境(DTR)中资源管理器和事务管理器之间是如何交互的。资源管理器使资源适配器实现了XAResource接口,将事务同事务资源联系起来,类似于关系数据库的一个连接。 5、Xid接口 javax.transaction.xa.Xid接口是X/Open事务标识符XID结构的java映射。这个接口由事务管理器和资源管理器使用,对于应用程序和应用服务器而言,这个接口是不可见的。二) Weblogic Server下的JTA开发实例: 应用中采用Weblogic Server的JTA,包括7个基本步骤:建立事务,开始事务,找到数据源,建立数据库连接,执行与资源有关的操作,关闭连接,完成事务。 下面将详细介绍JTA开发的7个基本步骤,最后给出一个完整的实例(其实该实例比较简单,说说完整好听点而已哦……嘻嘻…………): 1、 建立事务。 在Weblogic Server中实现JTA的第一步是创建一个UserTransaction类的实例。UserTransaction类可以控制事务并发线程的执行(这个最重要哦!!)。一个事务的并发线程可以是各种服务,如EJB、JMS和JDBC。可以通过JNDI检索UserTransaction类。示范代码如下: Context ctx=new getInitialContext(); UserTransaction tx=(UserTransaction)ctx.lookup("javax.transaction.UserTransaction"); 2、开始事务。 调用UserTransaction对象的begin()方法。例如:tx.begin()。 开始事务后,针对数据库的任何操作均处于这个事务的范围之内,包括JDBC调用及其他依赖于JDBC的服务,例如:EJB、JMS。 3、找到数据源。 找到事先建立好的Tx Data Source(支持事务的数据源)。此处必须使用TxDataSource: javax.sql.DataSource ds=(javax.sql.DataSource)ctx.lookup("myTxDataSource"); (但是有些新的weblogic没有Tx Data Source单独这项建立的,其中的原因不用我来解析吧!!相信各位那么聪明因该知道是什么回事了吧!不明的再发帖上来,我另外解决!!) 4、建立数据连接 通过Tx Data Source 对象ds可以建立数据库连接: javax.sql.Connection myConn=ds.getConnection(); 5、执行与资源有关的操作。 例如建立语句对象,然后通过语句对象执行数据库操作。 6、关闭连接。 创建的连接在用完后必须关闭。 7、完成事务。 在事务提交或回滚之前,还可以创建来自同一连接池中的新的Connection对象,执行其他的JDBC调用,这个新的连接将与先前执行的事务处于同一事务范围。 一旦所有的工作都完成了,最后一步是决定提交还是回滚。三) JTA开发实例: 1、启动数据库,利用SQL建立一个试验用的表emp。 create table emp(empname varchar(60),empid integer,job varchar(60)); insert into emp(empname empid job)values(‘liming’,1,‘sales’); insert into emp(empname empid job)values(‘wangping’,1,‘manager’); 2、启动BEA Weblogic server 3、启动JBuilder,增加一个class,代码如下:import java.sql.*;import javax.naming.*;import javax.sql.*;import java.util.Properties;import javax.transaction.*;public class MyDataSource433 { public MyDataSource433() { } 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("myDataSource"); }catch(Exception e) { System.out.println("Init Error: "+e); } Statement myStatement =null; ResultSet myResultSet=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 err) { } 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; } }}
|
阅读全文(5705) | 回复(2) | 编辑 | 精华 |
|
|
|
|
|
|
|
|
|
|
回复:weblogic server 中的事务
文章收藏, 网上资源, 软件技术, 电脑与网络 ufo(游客)发表评论于2009/6/11 14:30:25
|
www.gm365.com上发布的web server软件UFO不会出现一个字节的内存泄漏和一个线程的不能回收,使用UFO做Web Server的好处是网站能做得很稳定,永远也不会自己down掉;UFO在托管机房丢包率很高、遭受Hacker攻击、互联网 骨干网被黑等恶劣的环境条件下仍然能很好地运行;UFO在对付Hacker方面(防Hacker弄down和Hacker抓取不该访问的资源)也有足 够措施。另外,UFO几乎不会进行垃圾回收,消耗CPU很少,在普通的PC Server上用UFO运行网站,平时CPU占用率<0.1%,最多时也不会超 过5%。您知道,JVM的垃圾回收会导致大量的运算,消耗很多CPU,从而导致Server的负载能力和响应速度下降。UFO在对象管理方面采 用了很好的机制和算法,做得很出色。用UFO运行网站,可以一直保证高负载能力,快速的响应速度和低CPU消耗。
|
个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除 |
|
|
|
|
|
|
|
|
|
|
回复:weblogic server 中的事务
文章收藏, 网上资源, 软件技术, 电脑与网络 phongle发表评论于2009/1/4 15:33:17
|
好文一篇,实践过程中(Eclipse+wl-10)有少许体会,记在下面(实际上是方便自己找 hh)
使用Eclipse调试请注意:
1 Eclipse的JRE直接指向WL10的JRE
2 Eclipse相应工程的包应指向WL10的相关包 api.jar weblogic.jar
3 Eclispe的编译环境应指向WL的JRE
否则会出现错误 如IncompatibleClassChangeError
PS:请关注配置参数:
代码中的WL相关参数:用户名、密码、登录方式、JNDI名称、服务器地址、端口等
|
个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除 |
|
|
|
|
|
|
» 1 »
|