转:http://blog.csdn.net/jixiuffff/article/details/5780834

事务
         session = conn.createQueueSession(true, Session.AUTO_ACKNOWLEDGE);
         true 表示这个会话是事务性的,需要显式的commit 或者rollback ()
                                         没有begin()方法,眨动打开事务
                                        
     public void send() {
        try {
                    publicMessageFlag("start");
                   publicMessage("msg1");
                    publicMessage("msg2");
                    publicMessage("msg3");
                    publicMessageFlag("end");
                    session.commit();
         } catch (JMSException e) {
                 e.printStackTrace();
            try {
                 session.rollback();
            } catch (JMSException e1) {
                e1.printStackTrace();
            }
        }//发送一个空的bytemessage 消息,标志着这一组消息的开始
    }

package org.jixiuf.chat;
import javax.jms.BytesMessage;
import javax.jms.JMSException;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.jixiuf.util.JNDIUtil;
public class ChatServer {
QueueConnection conn;
Queue requestQueue;
QueueSession session;
int age = 10;
QueueSender sender;
public ChatServer() {
conn = JNDIUtil.crateQueueConnection();
requestQueue = JNDIUtil.lookupQueue("requestQueue");
try {
session = conn.createQueueSession(true, Session.AUTO_ACKNOWLEDGE);
sender = session.createSender(requestQueue);
} catch (JMSException e) {
e.printStackTrace();
}
}
// flag 是"start" ,和"end" 分别表示这组消息的开头
public void publicMessageFlag(String flag) throws JMSException {
BytesMessage msg = null; msg = session.createBytesMessage();
msg.setStringProperty("JMSXGroupID", "group1");
msg.setStringProperty("flag", flag);
sender.send(msg);
}
// flag 是"start" ,和"end" 分别表示这组消息的开头
public void publicMessage(String msgStr)throws JMSException {
TextMessage msg; msg = session.createTextMessage();
msg.setStringProperty("JMSXGroupID", "group1");
msg.setText(msgStr);
sender.send(msg); }
public void send() {
try {
publicMessageFlag("start");
publicMessage("msg1");
publicMessage("msg2");
publicMessage("msg3");
publicMessageFlag("end");
session.commit();
} catch (JMSException e) {
e.printStackTrace();
try {
session.rollback();
} catch (JMSException e1) {
e1.printStackTrace();
}
}//发送一个空的bytemessage 消息,标志着这一组消息的开始 }
public void exit() {
try {
conn.close();
} catch (JMSException e) {
e.printStackTrace();
}
System.exit(0);
}
public static void main(String[] args) {
ChatServer server = new ChatServer();
server.send();
server.exit();
}
}

(转)JMS事务的更多相关文章

  1. Jms的MessageListener中的Jms事务

    摘要 一般来说,如果为JmsTemplate做了事务配置,那么它将会与当前线程的数据库事务挂钩,并且仅在数据库事务的afterCommit动作中提交. 但是,如果一个MessageListener在接 ...

  2. JMS—事务管理

    Spring提供了一个JmsTransactionManager用于对JMS ConnectionFactory做事务管理.这将允许JMS应用利用Spring的事务管理特性.JmsTransactio ...

  3. Spring整合JMS——事务管理

    Spring提供了一个JmsTransactionManager用于对JMS ConnectionFactory做事务管理.这将允许JMS应用利用Spring的事务管理特性.JmsTransactio ...

  4. 学习ActiveMQ(七):JMS消息的事务管理

    Spring提供了一个JmsTransactionManager用于对JMS ConnectionFactory做事务管理.这将允许JMS应用利用Spring的事务管理特性.JmsTransactio ...

  5. [转]Spring3核心技术之事务管理机制

    原文地址:http://chouyi.iteye.com/blog/1675199 Spring对事务的解决办法其实分为2种:编程式实现事务,AOP配置声明式解决方案. http://jinnians ...

  6. ActiveMQ学习笔记(二) JMS与Spring

    上文可见,JMS Native API使用起来不是特别方便.好在Spring提供了很好的JMS支持. (一)配置ConnectionFactory 如果使用连接池的话,不要忘记activemq-poo ...

  7. JMS - 事务性消息

    JMS 事务遵从发送操作与接收操作相互分离的约定.下图显示的是一个事务性发送,其中一组消息要么能够保证全部到达消息服务器,要么连一条消息也不能保证到达消息服务器.从发送者的角度来看,JMS 提供者为这 ...

  8. Spring中的事务管理详解

    在这里主要介绍Spring对事务管理的一些理论知识,实战方面参考上一篇博文: http://www.cnblogs.com/longshiyVip/p/5061547.html 1. 事务简介: 事务 ...

  9. 开涛spring3(9.2) - Spring的事务 之 9.2 数据库事务概述

    9.2.1  概述 Spring框架支持事务管理的核心是事务管理器抽象,对于不同的数据访问框架(如Hibernate)通过实现策略接口 PlatformTransactionManager,从而能支持 ...

随机推荐

  1. .content和.text的区别

    python中内置库 requests的两种方法get()和post()返回的的一个对象,有两种方法.content和.text ..content返回的是字节码,.text返回的是字符串.

  2. 栈Stack --- 数组实现

    栈最大的一个特点就是先进后出(FILO—First-In/Last-Out). /** * 栈:后进先出 * Created by fred on 2018/7/31. */ public class ...

  3. (13)C++ 多态

    虚析构和纯虚析构用来解决父类指针释放子类对象的问题,此时会不调用子类的析构函数 如果子类没有堆数据,可以不使用虚析构

  4. Nginx网络架构实战学习笔记(二):编译PHP并与nginx整合、安装ecshop、商城url重写实战

    文章目录 编译PHP并与nginx整合 安装ecshop(这是一个多年前php的项目貌似,作为java开发的我暂时不去关心) 商城url重写实战 编译PHP并与nginx整合 安装mysql yum ...

  5. apiDoc部署搭建

    apiDoc介绍: 目前,越来越多的项目进行前后端分离,那么就有需要比较规范的来管理API文档.而apiDoc这个API文档管理器,可以根据你项目代码的注释来进行自动生成API文档.同时支持C#.Ja ...

  6. 力扣算法——142LinkedListCycleII

    Given a linked list, return the node where the cycle begins. If there is no cycle, return null. To r ...

  7. Spring Enable高级应用及原理

    Enable* 之前的文章用到了一些Enable*开头的注解,比如EnableAsync.EnableScheduling.EnableAspectJAutoProxy.EnableCaching等, ...

  8. SqlServer 跨库访问

    同实例跨库 只需要 库名.dbo.表 dbo可省略 如: use Test select * from rdrecords select * from oa.dbo.UserInfo 不同实例与不同i ...

  9. bootstrap学习(四)表格

    基础样式: 自适应沾满浏览器 <table class="table"> <tr> <th>序号</th> <th>姓名 ...

  10. CTF中的AWD套路

    今年参加了三起CTF比赛,属于初学者,基本除了web其他的不会,但分赛场AWD相对就没什么难度,基本都是技巧性.其中一场进入复赛了,本月底再次比赛(ctf题做的这么渣还能进也是绝了~),参照前人经验补 ...