愤怒的大鸟 发表于 2015-1-18 11:07:50

发布一篇oc4j+toplink+spring利用jta内部事件的一点心得

对于一个大型项目,如果用java来作,可能需要9个月,并且可能需要翻阅10本以上的书,但如果用ruby来作,3个月,3本书就足够了,而.net也不过3,4本书足以,这就是区别。
早晨要上班的时分,applicationteam那边利用TibcoEMS做动静集成服务时分出了bug,毛病是:java.sql.SQLException:当全局事件处置处于举动形态时,没法挪用办法commit,应当是在全局事件中利用了当地事件并提交了。协助看了一下,它的oc4j,toplink,spring的利用上都存在着一些成绩,并把要注重的中央总结了一下。
Jta内部事件,也称为散布式事件,全局事件。
oc4j:
·让transactionmanager晓得resource的存在
要利用内部事件,起首要让transactionmanager懂得是哪一个resource。我们选择利用managedresource,如许由容器来办理:datasource,jmsresouce,jcaresource,oc4j的transactionmanager一定是晓得这些managedresource的存在的,能够经由过程ra,data-sources.xml来设置,大概间接经由过程oc4jwebconsole来创立。
Oc4jdata-sources.xml
出格要注重的是datasource的设置,oc4j中能够经由过程data-sources.xml设置transactionlevel,默认是global,暗示joinjta内部事件,假如是local,oc4j就会把一切的manageddatasource的操纵看成localconnection来对待,这些操纵是不join到内部事件中的。
甚么是一次localtransaction操纵呢?
Toplink:每次对unitofwork的提交。
Connection的每次提交,autocommit的每次操纵。
  <managed-data-sourcename="MIFSystemLogDataSource"
     connection-pool-name="MIFSysLogConnectionFactory"
     jndi-name="jdbc/mifStatusLog" tx-level=global/>
有人会问没有利用xa的connection怎样能利用内部事件jointransaction呢,oracle完成了称为EmulatingXA(oc4jcontainer),它基础上摹拟了twophasecommit的功效,可是没有transactionbranches,也就是xid的branch标识符,xid包含format标识符,global事件标识符和branch标识符。也没有twophasecommit的预提交历程。Toplink在利用sessionbroker时,也有相似的设置,称为twostagecommit。xa的resource应当设置成global的transaction,不然没需要用xa。
Oc4j中怎样本人把持transaction
偶然我们大概必要本人把持transaction,如许我们大概必要在oc4j中取得受管的UserTransaction和TransactionManager,TransactionManager能够suspend和resume一个transaction,完成诸如requiresnew如许的功效。
   ContextinitialContext=newInitialContext();
   UserTransactionuserTrx=(javax.transaction.UserTransaction)initialContext.lookup("java:comp/UserTransaction");
      if(utinstanceofTransactionManager){
            TransactionManagertm=(TransactionManager)userTrx;
}
假如利用的是散布式全局transaction不倡议在程序中挪用connection.setAutoCommit(true),connection.commit(),commit.rollback()办法,如许会搅扰散布式事件的办理。
<p>
但是对于JAVA技术类的学习,我觉得大课堂反而会影响自身独立思考的过程,因为上课的时候,老师讲课的速度很快为了不遗漏要点,通常会仔细的听,

仓酷云 发表于 2015-1-20 14:52:44

是一种将安全性(Security)列为第一优先考虑的语言

不帅 发表于 2015-1-29 11:05:16

是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言

深爱那片海 发表于 2015-2-6 00:27:46

吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧

若相依 发表于 2015-2-14 15:53:14

是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言

谁可相欹 发表于 2015-3-4 07:44:04

Java是一种计算机编程语言,拥有跨平台、面向对java

小妖女 发表于 2015-3-11 17:58:38

Java 编程语言的风格十分接近C、C++语言。

柔情似水 发表于 2015-3-19 05:29:59

如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。

爱飞 发表于 2015-3-27 08:11:56

是一种将安全性(Security)列为第一优先考虑的语言
页: [1]
查看完整版本: 发布一篇oc4j+toplink+spring利用jta内部事件的一点心得