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。请参阅。
分享到:
相关推荐
mq-msgpush-sdk-1.0.1jar包及资源
此代码是基于stm32平台,通过ADC读取MQ-2烟雾传感器代码,可直接修改引脚使用,适合初学者。
程序是用于51单片机中驱动mq-7传感器所用的程序及芯片资料
烟雾浓度传感器Z-MQ-01
WebSphere MQ HP-UX 版,版本 5 发行版 3 提供以下新增的和更改的功能: WebSphere MQ HP-UX 版现在支持使用工业标准安全套接字层(SSL)保护的 WebSphere MQ 通道。有关详细信息,请参阅 WebSphere MQ Security...
MQ-系列传感器程序,使用STC12C5A60S2单片机自带AD,将采集到的数据上传到串口
网上没有相应的MQ-2的PCB封装库,就自己量了一下尺寸,画了一个,适用于大部分的MQ-N系列传感器。
IBM-MQ-Explorer-Win64,MQ图形界面、基于eclipse
MQ-2在51上采集烟雾浓度,显示在串口助手上
MQ-6液化气传感器模块料技+测试工程源码: MQ-6.pdf TTL输出测试程序 产品使用手册.doc 检测说明判断传感器是否正常.txt 模拟量测试参考程序
一些mq的代码实例!!!! 一些mq的代码实例!!!! 一些mq的代码实例!!!! 一些mq的代码实例!!!!
MQ-2烟雾传感器设计资料原理图使用手册推荐.pdf
MQ-2烟雾传感器模块资料技术手册+软件测试工程源码: MQ-2.pdf TTL输出测试程序 产品使用手册.doc 传感器板检测.JPG 检测说明判断传感器是否正常.txt 模拟量测试参考程序
MQ-2的电路图以及程序,不用写,直接使用
MQ-4甲烷、天然气传感器模块料技术手册+软件测试工程源码: MQ-4.pdf TTL输出测试程序 产品使用手册.doc 检测说明判断传感器是否正常.txt 模拟量测试参考程序
MQ-2气体传感器,可侦测外在环境变化竟而传输数据给串口接收的代码
使用MQ-2气体传感器进行烟雾探测.zip使用MQ-2气体传感器进行烟雾探测.zip使用MQ-2气体传感器进行烟雾探测.zip使用MQ-2气体传感器进行烟雾探测.zip使用MQ-2气体传感器进行烟雾探测.zip使用MQ-2气体传感器进行烟雾探测...
自己整理的stm32使用MQ-2烟雾传感器的资料,内含传感器的使用资料,以及整理的一些代码,(51的也有)代码大同小异,只不过量化方式不同。了解ADC即可,适合初学者使用。