转: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. kubernetes session保持、容器root特权模式开启、多端口容器service 2个端口开启等设置

    session保持如何在service内部实现session保持呢?当然是在service的yaml里进行设置啦. 在service的yaml的sepc里加入以下代码: sessionAffinity ...

  2. Gson extend 思路

    package org.rx.core.internal; import com.google.gson.*; import net.sf.cglib.proxy.Enhancer; import n ...

  3. 59、salesforce实现数据的批量处理

    批处理,往自己的邮箱发一封邮件,批处理采用异步的处理方式处理数据,最多可以处理5000万条数据 global with sharing class MerchandiseBatch implement ...

  4. Spring Boot 报错记录

    Spring Boot 报错记录 由于新建的项目没有配置数据库连接启动报错,可以通过取消自动数据源自动配置来解决 解决方案1: @SpringBootApplication(exclude = Dat ...

  5. 使用postman做接口测试----柠檬不萌!

    目录 一.GET和POST请求的区别 二.http协议 1.http请求分为两个部分 2.http状态码 三.使用postman测试HTTP接口 1.请求方式:get 2.请求方式:post 3.请求 ...

  6. dir(dict)|字典的创建-添加-删除-修改-判断存在-取值等相关操作

    dir(dict) ####字典操作:创建-添加-删除-修改-判断存在-取值 #(一)创建字典: {} .等号. zip(). [(),()] #1.创建空字典 dict0 = {} #2.等号创建 ...

  7. grafana初体验

    1.centos版下载安装 wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.0.4-1.x86_6 ...

  8. 观察者模式JDK源码解析

    由于JDK中为了方便开发人员,已经写好了现成的观察者接口和被观察者类. 先来观察者接口: //观察者接口,每一个观察者都必须实现这个接口 public interface Observer { //这 ...

  9. Optional int parameter 'pId' is present but cannot be translated into a null value due to being declared as a primitive type.

    接口测试的时候遇到了一个问题,导致测试阻断了好久,在此记录,谨防忘记. 具体报错如下: Optional int parameter 'pId' is present but cannot be tr ...

  10. NFS挂载error:reason given by server: Permission denied

    首先你得看看你的NFS服务有没有启动 然后你看看你要mount的文件夹有没有在NFS主机共享 然后再看权限对没对