|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
对于一个大型项目,如果用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技术类的学习,我觉得大课堂反而会影响自身独立思考的过程,因为上课的时候,老师讲课的速度很快为了不遗漏要点,通常会仔细的听, |
|