昨天晚上被JTA和线程的问题搞了,mark一下,以后继续补充。
问题描述
接收一个Http请求后,执行一段逻辑,步骤为 :
1.查询数据库ds1。
2.插数据库ds1、ds2。特点:要求事物,所有使用JTA
3.启动新线程调用WS
部署环境
服务器:Websphere 6.1
JDK: IBM 1.5
操作系统:Red Hat Enterprise Linux
数据源的配置
1.jdbc/x1 启用JTA,连接oracle10g,选定“将此数据源用于容器管理的持久性(CMP)”
2.jdbc/x2 启用JTA,连接MSSQL2005,选定“将此数据源用于容器管理的持久性(CMP)”,并且使用JTDS驱动
3.jdbc/nx1 与x1连接相同的库,只是不启用JTA
Dao的配置
x1Dao 对应数据源jdbc/x1
x2Dao 对应数据源jdbc/x2
nx1Dao 对应数据源jdbc/nx1
程序
程序中的JTA事物使用Spring管理
1.spring配置
<!-- 数据库连接 -->
<jee:jndi-lookup id="x1" jndi-name="jdbc/x1" />
<jee:jndi-lookup id="x2" jndi-name="jdbc/x2" />
<jee:jndi-lookup id="nx1" jndi-name="jdbc/nx1" />
<!-- 数据库事务 -->
<tx:jta-transaction-manager />
2.运行正常的代码
SdhxBO.java 作为Bean在spring容器中
@Transactional(rollbackFor = { Exception.class })
@SuppressWarnings({ "unchecked"})
public void hx(ViewDataset datasetLeasCharge, ViewDataset datasetVirCharge,
ViewDataset datasetPayments) throws Exception {
//1.调用nx1查询
x1Dao.do..
//2.调用x1,x2操作两个数据库
x1Dao.do...
x2Dao.do...
//3.启动Thread
FetchWorkflowThread f = new FetchWorkflowThread(wfParamsList,headerMap);
f.start();
}
GzdDetailViewModel.java 不是bean,调用SchxBO的方法
public void hx(ParameterSet parameters, ParameterSet outParameters)
throws Exception {
ViewDataset datasetLeasCharge = this.getDataset("datasetLeasCharge");
ViewDataset datasetVirCharge = this.getDataset("datasetVirCharge");
ViewDataset datasetPayments = this.getDataset("datasetPayments");
SdhxBO bo = SpringService.getSdhxBO();
bo.hx(datasetLeasCharge, datasetVirCharge, datasetPayments);
}
3.WS超时异常时候的代码
2011-01-19 20:42:41,355 [WebContainer : 977] WARN g.apache.cxf.phase.PhaseInterceptorChain -Interceptor for {urn:DefaultNamespace}IFELCWriteOffService#{urn:DefaultNamespace}CHECKRENT has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault: Could not send Message.
at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:64)
Caused by: java.net.SocketTimeoutException: SocketTimeoutException invoking http://dev1.corp.sinochem.com:80/k3oa/assistancework/daypaynetwork.nsf/IFELC_WriteOff?OpenWebService: Read timed out
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
Caused by: java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
SdhxBO.java
@Transactional(rollbackFor = { Exception.class })
@SuppressWarnings({ "unchecked"})
public List hx(ViewDataset datasetLeasCharge, ViewDataset datasetVirCharge,
ViewDataset datasetPayments) throws Exception {
//1.调用nx1查询
nx1Dao.do..
//2.调用x1,x2操作两个数据库
x1Dao.do...
x2Dao.do...
return list
}
GzdDetailViewModel.java
public void hx(ParameterSet parameters, ParameterSet outParameters)
throws Exception {
...
SdhxBO bo = SpringService.getSdhxBO();
List list = bo.hx(datasetLeasCharge, datasetVirCharge, datasetPayments);
//3.启动Thread
FetchWorkflowThread f = new FetchWorkflowThread(list,headerMap);
f.start();
}
4.JTA异常1
org.springframework.transaction.TransactionSystemException: UOWManager transaction processing failed; nested exception is com.ibm.wsspi.uow.UOWException: javax.transaction.RollbackException: Global transaction timed out after 0 seconds
at org.springframework.transaction.jta.WebSphereUowTransactionManager.execute(WebSphereUowTransactionManager.java:288)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:127)
Caused by: com.ibm.wsspi.uow.UOWException: javax.transaction.RollbackException: Global transaction timed out after 0 seconds
at com.ibm.ws.uow.UOWManagerImpl.runUnderNewUOW(UOWManagerImpl.java:981)
at com.ibm.ws.uow.UOWManagerImpl.runUnderUOW(UOWManagerImpl.java:510)
at org.springframework.transaction.jta.WebSphereUowTransactionManager.execute(WebSphereUowTransactionManager.java:281)
Caused by: javax.transaction.RollbackException: Global transaction timed out after 0 seconds
at com.ibm.ws.uow.UOWManagerImpl.uowEnd(UOWManagerImpl.java:1019)
at com.ibm.ws.uow.UOWManagerImpl.runUnderNewUOW(UOWManagerImpl.java:976)
此时SdhxBO中调用nx1Dao,x1Dao,x2Dao和FetchWorkflowThread
5.JTA异常2
org.springframework.transaction.TransactionSystemException: UOWManager transaction processing failed; nested exception is com.ibm.wsspi.uow.UOWException: javax.transaction.RollbackException
at org.springframework.transaction.jta.WebSphereUowTransactionManager.execute(WebSphereUowTransactionManager.java:288)
Caused by: com.ibm.wsspi.uow.UOWException: javax.transaction.RollbackException
at com.ibm.ws.uow.UOWManagerImpl.runUnderNewUOW(UOWManagerImpl.java:981)
Caused by: javax.transaction.RollbackException
at com.ibm.ws.Transaction.JTA.TransactionImpl.stage3CommitProcessing(TransactionImpl.java:1880)
此时SdhxBO中调用nx1Dao,x1Dao,x2Dao和FetchWorkflowThread
分享到:
相关推荐
1.2.4 与关联相关的问题 1.2.5 数据导航的问题 1.2.6 不匹配的代价 1.3 持久层和其他层 显示全部信息第一部分 从Hibernate和EJB 3.0开始 第1章 理解对象/关系持久化 1.1 什么是持久化 ...
实例118 使用JTA与JTS 417 实例119 Request-Reply模式的JMS应用 421 实例120 使用Java IDL 426 实例121 EJB与CORBA的交互 430 实例122 基于EJB的真实世界模型 433 实例123 EJB的商业应用——定购单 447 第11章 Java ...
405 实例115 与时间有关的函数 407 实例116 EJB与UML的对应关系 412 实例117 C/S结构的RMI-IIOP应用 414 实例118 使用JTA与JTS 417 实例119 Request-Reply模式的JMS应用 421 实例120 使用Java IDL...
开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...
开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...
开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...
开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...
开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...
开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...
开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...
开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...
开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...
开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...
开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...
开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...
开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...
Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。 设定字符串为“张三,你好,我是李四” 产生张三的密钥对(keyPairZhang) 张三生成公钥(publicKeyZhang...
Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。 设定字符串为“张三,你好,我是李四” 产生张三的密钥对(keyPairZhang) 张三生成公钥(publicKeyZhang...