使用事务管理信息写入与Spring JmsTemplate的

使用Spring的JMS可以通过使用DefaultMessageListenerContainer外部事务上下文中接收消息。

但是邮件中唯一的记录方法是通过JmsTemplate.send(…)我看不出这可怎么强制使用一个给定TransactionManager

任何人都可以点我在正确的方向?


更多信息:确保一个事务管理器可用( WebSphereUowTransactionManager ),使用JmsTemplate.write针对Oracle AQjmsFactory.getQueueConnectionFactory(dataSource)中的结果:

org.springframework.jms.UncategorizedJmsException: Uncategorized exception occured during JMS processing; nested exception is oracle.jms.AQjmsException: could not use local transaction commit in a global transaction at org.springframework.jms.support.JmsUtils.convertJmsAccessException(JmsUtils.java:316) at org.springframework.jms.support.JmsAccessor.convertJmsAccessException(JmsAccessor.java:168) at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:469) at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:534) Caused by: oracle.jms.AQjmsException: could not use local transaction commit in a global transaction at oracle.jms.AQjmsSession.commitNoCheck(AQjmsSession.java:1053) at oracle.jms.AQjmsSession.commit(AQjmsSession.java:1021) at org.springframework.jms.support.JmsUtils.commitIfNecessary(JmsUtils.java:217) at org.springframework.jms.core.JmsTemplate.doSend(JmsTemplate.java:573) at org.springframework.jms.core.JmsTemplate$3.doInJms(JmsTemplate.java:536) at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:466) ... 24 more Caused by: java.sql.SQLException: could not use local transaction commit in a global transaction at oracle.jdbc.driver.PhysicalConnection.disallowGlobalTxnMode(PhysicalConnection.java:6647) at oracle.jdbc.driver.PhysicalConnection.commit(PhysicalConnection.java:3635) at oracle.jdbc.driver.PhysicalConnection.commit(PhysicalConnection.java:3680) at oracle.jdbc.OracleConnectionWrapper.commit(OracleConnectionWrapper.java:133) at oracle.jms.AQjmsSession.commitNoCheck(AQjmsSession.java:1049) ... 29 more

因此,虽然我没有理由怀疑下面的提醒,我无法测试它,因为我无法弄清楚如何让AQ JMS不要尝试提交。 将更新,因为我了解更多信息。

--------------解决方案-------------

我的理解是,JMS生产者本身通过JTA事务。 通过发送通过JMS消息MessageProducer ,线程本地JTA事务被使用(如果有的话)。

这是在暗示由Spring手册(第21.2.5):

JmsTemplate ,也可以用使用JtaTransactionManager以及XA-capable的JMS ConnectionFactory以完成分布式事务。 请注意,这需要使用JTA事务管理器,以及正确XA配置ConnectionFactory

这也由建议JmsAccessor.setSessionTransacted (的超JmsTemplate )(javadoc中):

将创建一个JMS会话时所使用的交易模式。 默认为“假”。 请注意,JTA事务中,传递给参数create(Queue/Topic)Session(boolean transacted, int acknowledgeMode)方法没有考虑到。 根据J2EE事务上下文,容器使这些值其自己的决定。类似地,这些参数没有考虑到一个本地管理事务中任一中,由于访问在这种情况下,在现有的JMS会话工作。

设置该标志为“true”将在管理的事务(不是XA事务等)的情况下,运行管理的事务的同步本地JMS事务之外,而当在场使用短本地JMS事务。 后者有一个本地JMS交易旁边的主事务(这可能是一个本地JDBC事务)所管理,主要的交易后右侧的JMS事务提交的影响。

因此,通过启动一个JTA事务(通过使用Spring的事务API与IE浏览器JtaTransactionManager )和呼叫JmsTemplate.send(...)你会发送绑定到该交易的消息。

分类:java的 时间:2012-01-01 人气:0
分享到:

相关文章

  • 独立的Java中退出JMS消息 2013-12-27

    任何一个可以提供示例程序在Java中出列的消息? 我想独立的Java程序,它会做这个任务. 比方说,甲骨文公顷用排队的消息JMS_TEXT_MESSAGE队列"的有效载荷类型myqueue ",其主人是" myowner "&现在我要出队使用Java这些消息. 任何一个可以在独立的Java提供的示例程序? 谢谢! @Ratha,我想你的样品,我可以通过所有浏览的消息和它的作品完美! 然而,当我尝试使用这些消息,我还以为他们会得到从队列中删除和通过它显示给我下

  • 重复甲骨文DES加密在Java中 2012-02-23

    最近,我问一个关于Oracle加密的问题. 一路上寻找我自己的解决方案,我决定将加密(当然,混淆)移动到应用端的某些任务. 我的问题是,数据库已加密数据以某种方式与我需要Java代码来复制该功能,所以加密的一个系统的文本也可以由另外进行解密,反之亦然. 我想加密成与数据库已经在做兼容,但无法找到该文件描述正是甲骨文正在做什么. 在Java中我如何复制呢? dbms_obfuscation_toolkit.DESEncrypt( input_string => v_string, key_stri

  • JMS如何在Java中工作? 2012-04-06

    如何异步JMS工作的? 我有下面的示例代码: public class JmsAdapter implements MessageListener, ExceptionListener { private ConnectionFactory connFactory = null; private Connection conn = null; private Session session = null; public void receiveMessages() { try { this.se

  • 这是从学习网站的角度来看Java中的最佳路径或流 2014-06-16

    我刚开始学习Java和我有8个月左右的时间. 我的主要目的是利用Java来构建Web应用程序. 但正如有许多可用的Java技术/框架我正在conufused我应该怎么走IDE我现在用的就是日食 这我想到了路径低于 1)Learn Core Java 2)Project: Build Java Invoicing System with JDBC or mysql to test java knowledge 3)Learn Servlets / JSP to 4)Build small site

  • 我如何阻止人们做XSS在Java中? 2012-01-21

    我应该怎么做才能防止XSS在Java中? 我使用Spring MVC的. 现在我只是把所有的地方,我的输出用户文本<c:out />标签,但这似乎容易出错,因为我可能会错过的地方. 有一个简单的系统的方法来防止这种情况? 也许就像一个过滤器什么的? 编辑:我通过指定收集输入@RequestParam在我的控制器方法的参数. --------------解决方案------------- 在春天,你能逃脱从生成的JSP页面的HTML <form>标签. 这封闭了很多途径XSS攻击,可

  • 我如何抑制春/ Java中的“回归单身bean的缓存实例”日志消息? 2012-03-09

    我如何抑制春/ Java中的"回归单身bean的缓存实例"日志消息? 是否有这个地方很好的借鉴? 谢谢. --------------解决方案------------- 文中的"单豆返回缓存实例"是由Spring调试级别(由记录AbstractBeanFactory 春天记录了大量的消息在DEBUG级别,由设计. 如果你正在查看在这个级别你的日志文件,然后他们总是将是完整的日志噪声和Spring chunters沿做的事情. 你不能禁止特定的消息与log4j的,最好

  • 如何生成报告在Java中创先争优 2012-04-09

    如何生成的报告的Java脱颖而出. 是否有任何链接描述此主题. 我使用的春天3,请建议例子. --------------解决方案------------- 你可能会需要使用一些第三方库. 这样的一个选择就是Java API的Excel库在这个岗位由拉尔斯·沃格尔表示. 你可以在这里查看样本 免责声明:我还没有使用过,但文章似乎很描述. 希望它帮助. 我使用的Apache POI. 这似乎是为Excel文件生成足够好(尽管它的Word文档发生器还不够成熟,顺便说一句). 我不知道这是很容易的,但

  • 如何在Java中的三层系统正常工作? 2012-07-18

    如何在Java中的三层系统正常工作? 有人可以用一​​些简单的例子给我讲解一下? --------------解决方案------------- 这里是基本的想法,这实际上可以从第一原理,派生或多或少即帕纳斯的规则模块应该隐姓埋名的秘密: "前端"级拥有制作演示可见的秘密 "中间层"保存管理系统的行为的秘密 "后端"持有数据是如何保持持续的秘密. 在基于Java的系统中,这意味着 前端 有一个Web服务器和呈现被构造成HTML,CSS和Javas

  • 如何使Java中的不可变单? 2012-07-24

    不可变对象仅由它的初始化constuctor,而单用一个静态方法实例化. 如何使Java中的不可变单? --------------解决方案------------- 而单用一个静态方法实例化 虽然这是这样做的通常的方式,这绝不是唯一的出路. 在Java 1.5辛格尔顿的新版本是枚举Singleton模式: public enum Elvis{ INSTANCE // this is a singleton, no static methods involved } 而且,由于枚举可以有构造函数

  • 我最好如何赶上Java中的最新进展? 2012-07-28

    我申请工作作为Java开发人员. 我编程在Java中的一些爱好的应用程序,直到2001年,在那之后我主要工作在C ++等语言. 同时,感觉就像Java已经成长了很多,而且还有各种缩写(EJB,弹簧等),不知道的我. 我在哪里可以找到最近的(5年)开发的Java的简明,清晰的解释? 什么是理解的关键因素? --------------解决方案------------- 2001年? 哇,时代已经变了. 那是什么呢? Java 1.3的? 首先,语言功能: 泛型:Java的泛型添加在5.0版本于20

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.404 (s). 10 q(s)