MQ事-务

 

package com.sesoft.dev.mq.app;

 

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.util.Hashtable;

 

import oracle.jdbc.xa.client.OracleXADataSource;

 

import com.ibm.mq.MQC;

import com.ibm.mq.MQException;

import com.ibm.mq.MQMessage;

import com.ibm.mq.MQPutMessageOptions;

import com.ibm.mq.MQQueue;

import com.ibm.mq.MQQueueManager;

 

/**

 * Copyright (c) 2010,Selenium Soft All rights reserved.

 * @author eric.wang

 * @date 2010-9-25

 * @说明 MQ与ORACLE数据库的XA事务操作

 */

public class MQOrclXA {

public static final String qmName = "QM_eric";

public static final String queue = "default";

private static MQQueueManager qmgr = null;

private static Connection conn = null;

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

 

}

public static void initialize() throws Exception {

 

Hashtable properties = new Hashtable();

// 设置THREAD_AFFINITY_PROPERTY=TRUE,意思是多阶段事务不支持Shared方式的连接

properties.put(MQC.THREAD_AFFINITY_PROPERTY, new Boolean(true));

//下面可以取二个值MQC.TRANSPORT_MQSERIES_BINDINGS or MQC.TRANSPORT_MQSERIES_CLIENT

properties.put(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_BINDINGS);

qmgr = new MQQueueManager("QM_eric", properties);

//准备XA数据库

OracleXADataSource xads = new OracleXADataSource();

String dburl2 = "jdbc:oracle:thin:@192.168.21.226:1521:test";

xads.setURL(dburl2);

xads.setUser("edientjoin");

xads.setPassword("edientjoin");

// 得到连接

conn = qmgr.getJDBCConnection(xads);

// 关闭自动提交,必须

conn.setAutoCommit(false);

 

// all done

System.out.println("初始化完成");

}

public void doTransaction(){

try {

// theQueueManager.begin();

String sql = "update employees t set t.last_name='wang' where t.employee_id='1'";

PreparedStatement stmt = conn.prepareStatement(sql);

String msg = "A Msg";

stmt.execute();

stmt.close();

sendMsg(msg);

//不用提交数据库的事务,由消息中间件负责提交事务。

qmgr.commit();

// qmgr.backout();

System.out.println(" 事务操作成功");

}

catch (Exception e) {

// 发送失败的操作

System.out.println("事务操作失败,backout,错误信息是:");

e.printStackTrace();

try {

qmgr.backout();

}

catch (MQException me) {

System.out.println("backout失败:");

me.printStackTrace();

}

}

finally {

System.out.println("准备关闭资源: ");

try {

qmgr.disconnect();

conn.close();

}

catch (Exception e) {

System.out.println("关闭失败,错误信息如下:");

e.printStackTrace();

}

}

}

private static void sendMsg(String text) throws Exception { 

MQQueue queue = qmgr.accessQueue(qmName, MQC.MQOO_INPUT_AS_Q_DEF

| MQC.MQOO_OUTPUT, null, null, null);

MQMessage msg = new MQMessage();

msg.writeUTF(text);

MQPutMessageOptions pmo = new MQPutMessageOptions();

pmo.options += MQC.MQPMO_SYNCPOINT;

queue.put(msg, pmo);

}

}



这儿的事务处理代码实际上是有问题的。
还要相关的配置才行。

如果是ORACLE数据库本身相关的XA事务,ORACLE提供有相关的DEMO。请参阅。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值