`
mark.li.guyu
  • 浏览: 2865 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

JTA、非JTA与线程混合使用的问题

阅读更多

昨天晚上被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

分享到:
评论

相关推荐

    hibernate4.1中文api

    - **每个类层次混合表与表每个子类**: 混合使用不同策略。 - **每个具体类一张表**: 每个具体子类使用单独的表。 - **表使用隐式多态实现每个具体类**: 通过隐式多态实现。 - **混合隐多态性与其他继承映射**: ...

    Hibernate实战(第2版 中文高清版)

     1.2.4 与关联相关的问题   1.2.5 数据导航的问题   1.2.6 不匹配的代价   1.3 持久层和其他层 显示全部信息第一部分 从Hibernate和EJB 3.0开始  第1章 理解对象/关系持久化   1.1 什么是持久化   ...

    精通Hibernate

    此外,也可以与MyBatis等其他ORM框架配合使用,实现混合持久化策略。 十、实战应用 学习Hibernate不仅要掌握理论知识,还需要通过实际项目来提升技能。可以尝试搭建一个简单的Web应用,使用Hibernate进行数据操作,...

    h_JAVA 2应用编程150例.rar

    实例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 ...

    java面试200题(1)

    - `&lt;%@ page %&gt;`: 设置JSP页面的一些属性,如使用的脚本语言、是否支持多线程等。 - `&lt;%@ include %&gt;`: 包含其他JSP页面或文件。 - `&lt;%@ taglib %&gt;`: 定义要使用的标签库。 ### 9. doGet()与doPost()方法 这两个...

    J2EE规范

    4. **JavaServer Pages (JSP)**:JSP是一种动态网页技术,允许开发者将HTML代码与Java代码混合编写,用于生成动态内容。 5. **Java Persistence API (JPA)**:JPA是Java对象持久化的标准,简化了与关系型数据库的...

    Hibernate学习笔记

    在软件开发过程中,经常面临Java面向对象语言的模型与关系型数据库的模型之间的不匹配问题。Java语言主要关注对象、类、继承、多态等面向对象的概念;而关系型数据库则依赖于表格、字段、主键、外键等结构化数据概念...

    JAVA工程师面试常见问题及答案

    ### JAVA工程师面试常见问题及答案解析 #### 1. 事务隔离级别 事务隔离级别是数据库系统为了保证数据的一致性和防止并发操作引起的问题而设置的不同级别。主要有四种不同的隔离级别: - **READ UNCOMMITTED (未...

    hibernate3api

    5. Criteria与HQL结合使用:两者可以混合使用,构建复杂的查询条件,提供更高的灵活性。 三、实体管理和持久化 1. Save()与Update():用于将对象持久化到数据库,Save()用于新对象,Update()用于已存在数据库的...

    j2ee 核心模式

    在Java内幕的学习中,我们需要理解JVM的工作原理、垃圾回收机制、内存模型以及多线程编程。深入理解这些概念对于优化代码性能、避免并发问题和内存泄漏至关重要。同时,还需要掌握Java集合框架、I/O流、网络编程以及...

    j2ee编程起步(适合初学者)

    6. **JMS与并发**:学习如何使用JMS进行消息传递,以及线程和并发控制的概念。 7. **MVC设计模式**:了解并应用Model-View-Controller模式来组织J2EE应用的结构。 8. **Web服务**:学习SOAP和RESTful两种类型的Web...

    Java J2EE Job Interview Companion 2nd Edition Apr 2007

    2. **JSP(JavaServer Pages)**:JSP是Servlet的一种更高级形式,允许开发者将HTML代码与Java代码混合编写,以创建动态Web页面。理解EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)能...

    j2ee练习题

    2. **JSP**:JSP是一种动态网页技术,它允许将HTML代码与Java代码混合编写,以实现视图层的动态渲染。JSP页面会被编译成Servlet执行,提供了方便的EL(Expression Language)和JSTL(JavaServer Pages Standard Tag ...

    hibernate3.0

    15. **XML与注解混合使用**:在Hibernate3.0中,开发者可以选择使用XML映射文件或注解,或者两者结合,以适应不同的项目需求。 以上是关于Hibernate3.0的一些核心知识点,它们构成了这个强大ORM框架的基础,使得...

    javaEE基础及javaWeb基础学习所会用到的所有lib包

    JSP则是一种动态网页技术,允许将HTML代码与Java代码混合编写。`javax.servlet.*`和`javax.servlet.jsp.*`等包提供了相关的API。 3. **JavaServer Faces (JSF)**: JSF是JavaEE的一部分,用于构建用户界面。它提供...

    struts2+hibernate3.3+j2se+网络游戏等各种视频教程下载!

    - **配置灵活性**:Struts2可以使用XML文件、注解或者混合方式来配置应用程序。 - **国际化支持**:通过资源文件轻松实现多语言支持。 - **异常处理**:提供了一套强大的异常处理机制,可以捕获并处理各种异常。 ##...

    J2SE,J2EE学习笔记

    - **多线程**:线程的创建与同步,包括Thread类、Runnable接口、线程池和synchronized关键字的应用。 - **网络编程**:Socket编程,客户端和服务器端的实现,以及套接字通信的基本流程。 **J2EE概述** J2EE,即...

    J2EE课件(北大青鸟内部培训课件)

    应用部署在J2EE容器中,如Tomcat、GlassFish、WebLogic等,容器负责管理应用生命周期,提供服务,如内存管理、线程调度、资源连接等。 北大青鸟的J2EE课件将深入讲解这些概念,并通过实例演示如何构建一个完整的...

Global site tag (gtag.js) - Google Analytics