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。请参阅。

关于 MQ1GB-DIP12-HT 的技术规格和产品信息,目前并没有直接的相关引用提供具体的技术细节。然而,在 IT 和电子领域中,通常可以通过以下方式获取产品的详细技术规格: ### 获取 MQ1GB-DIP12-HT 技术规格的方法 #### 1. **查阅官方文档** 大多数电子产品制造商都会为其产品发布详细的《数据手册》(Datasheet),其中包括电气特性、物理尺寸、工作温度范围以及其他重要参数。对于 MQ1GB-DIP12-HT,建议访问生产厂商的官方网站或授权经销商网站查找相关资料。 #### 2. **通过命名解析推测功能** 从名称 `MQ1GB-DIP12-HT` 中可以提取一些基本信息: - `MQ`: 可能表示某种材料类别或者传感器类型。 - `1GB`: 表明存储容量可能为 1Gbit 或其他单位。 - `DIP12`: 提示封装形式为双列直插式 (Dual In-line Package),具有 12 个引脚。 - `HT`: 高温(High Temperature) 版本的可能性较大。 这种命名规则有助于缩小搜索范围,并进一步确认其用途是否属于存储芯片、传感器或其他组件[^4]。 #### 3. **利用第三方数据库检索** 除了厂家资源外,还可以借助像 Octopart、Mouser Electronics 或 Digi-Key 这样的在线平台输入型号进行精确匹配查询。这些服不仅提供了详尽的产品描述还会附带下载链接至原厂发布的 PDF 文件。 以下是假设性的典型字段列表供参考(实际数值需参照真实文档): | 参数 | 描述 | |--------------------|----------------------------------------------------------------------| | 封装类型 | DIP-12 | | 存储密度 | 1 Gigabit | | 工作电压(Vcc) | 2.7 V ~ 3.6 V | | 接口标准 | SPI, I²C | | 温度等级 | 商业级(-40°C 至 +85°C),工业扩展版可达更高 | 注意以上表格仅为示意并非针对特定器件的真实属性。 ```bash # 示例命令用于验证是否存在对应驱动程序支持此硬件接口通信 dmesg | grep spi lsmod | grep i2c ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值