简单的Java中间件
来源:互联网 发布:vb进度条初始化 编辑:程序博客网 时间:2024/06/05 00:38
在support公司项目的时候发现一个问题,需要从SQL Server的Logger Database中取出数据并作一定逻辑的判断,如果符合条件的话就将记录中的一个XML类型字段的值推送到ActiveMQ中的Queue中,所以就写了一个简单的Java中间件来推送,中间件主要分两部分:1.从SQL Server中抽取数据;2.Send Message到ActiveMQ。
使用JDBC从SQL Server中抽取数据
1.创建一个名为ActiveMQ的Java Project
2.下载连接SQL Server的Jar包
因为我需要连接的SQL Server是2012版的,所以我下载了Microsoft JDBC Driver 4.0 for SQL Server,它支持的版本有:
Microsoft®SQL Server® 2012
Microsoft®SQL Server® 2008 R2
Microsoft®SQL Server® 2008
Microsoft®SQL Server® 2005
Microsoft®SQL Azure
下载地址为:
http://www.microsoft.com/zh-cn/download/details.aspx?id=11774
将下载的压缩包解压到一个文件夹内,一直打开到最里面的文件夹,会发现有2个JAR包:
我们需要的是sqljdbc4.jar这个包
3.添加JAR包
在已经创建的ActiveMQ Project中新建一个lib文件夹,然后将刚才下载的sqljdbc4.jar包copy到这个lib,选中这个Jar包,点击右键选择Build Path->Add Build to Path
4.创建DBConnect类
代码如下
package com.lm.activemq;import java.sql.*;import javax.jms.MessageProducer;import javax.jms.Session;import javax.jms.TextMessage;public class DBConnect { public static void sendMessage(Session session, MessageProducer producer) throws Exception { String driverName="com.microsoft.sqlserver.jdbc.SQLServerDriver"; String dbURL="jdbc:sqlserver://XXXXXX:1433;DatabaseName=XXXX"; String userName="sa"; String userPwd="XXXX"; Statement ste = null; try { Class.forName(driverName); Connection dbConn=DriverManager.getConnection(dbURL,userName,userPwd); ste = dbConn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); System.out.println("连接数据库成功"); String orderNumbers[] = new String[] { "28003" }; for(int i = 0;i < orderNumbers.length ;i++ ) { System.out.println("当前Order为:"+i); String filterStr = "000"+orderNumbers[i]; ResultSet rst = ste.executeQuery("select * from FWK_TrackLog where OriginRecordId in ('"+filterStr+"') order by TrackId asc "); int rowCount = 0; try { rst.last(); rowCount = rst.getRow(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } //System.out.println("行数为:"+rowCount); if(rowCount == 1) { rst.beforeFirst();//remove to first while(rst.next()) { System.out.println("OrderNumber:"+rst.getString("OriginRecordId")); System.out.println(rst.getString("Payload")); TextMessage message = session.createTextMessage(rst.getString("Payload")); producer.send(message); } } } if(ste!=null) { ste.close(); } if(dbConn!=null) { dbConn.close(); } } catch(Exception e) { e.printStackTrace(); System.out.print("连接失败"); } }}
Send Message到ActiveMQ
1.添加ActiveMQ的Jar包到Project
我使用的ActiveMQ版本是apache-activemq-5.11.1-bin,需要添加的Jar包是
和刚才添加sqljdbc4.jar包一样,选中这5个Jar包,然后右击选择Build Path->Add Build to Path
2.创建Sender类
这个类的主要作用是的连接ActiveMQ
package com.lm.activemq;/** * @Header: Sender.java * 类描述: */import javax.jms.Connection;import javax.jms.ConnectionFactory;import javax.jms.DeliveryMode;import javax.jms.Destination;import javax.jms.MessageProducer;import javax.jms.Session;import org.apache.activemq.ActiveMQConnection;import org.apache.activemq.ActiveMQConnectionFactory;public class Sender { public static void main(String[] args) { // ConnectionFactory :连接工厂,JMS 用它创建连接 ConnectionFactory connectionFactory; // Connection :JMS 客户端到JMS // Provider 的连接 Connection connection = null; // Session: 一个发送或接收消息的线程 Session session; // Destination :消息的目的地;消息发送给谁. Destination destination; // MessageProducer:消息发送者 MessageProducer producer; // TextMessage message; // 构造ConnectionFactory实例对象,此处采用ActiveMq的实现jar connectionFactory = new ActiveMQConnectionFactory( ActiveMQConnection.DEFAULT_USER, ActiveMQConnection.DEFAULT_PASSWORD, "tcp://localhost:61616"); try { // 构造从工厂得到连接对象 connection = connectionFactory.createConnection(); // 启动 connection.start(); // 获取操作连接 session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE); // 获取session注意参数值xingbo.xu-queue是一个服务器的queue,须在在ActiveMq的console配置 destination = session.createQueue("OrderRequestFeedback"); // 得到消息生成者【发送者】 producer = session.createProducer(destination); // 设置不持久化,此处学习,实际根据项目决定 producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); // 构造消息,此处写死,项目就是参数,或者方法获取 DBConnect.sendMessage(session, producer); session.commit(); } catch (Exception e) { e.printStackTrace(); } finally { try { if (null != connection) connection.close(); } catch (Throwable ignore) { } } }}
- 简单的Java中间件
- java的中间件
- java中间件学习1-java中间件的定义
- java中间件学习1-java中间件的定义
- 简单简陋的中间件开发原理。
- 简单阅读Gzip中间件的源码
- java中间件
- Java调用COM的中间件Jintegra初探
- 浏览器-中间件-驱动的-java游戏
- java常用的消息中间件activeMQ
- soa与java中间件的关系?
- Cobar分布式关系型数据库中间件的简单应用
- 淘宝消息中间件RocketMQ的安装和简单使用
- 简单分辨网站服务器的语言和中间件和数据库
- 基于Mina实现的一个简单数据采集中间件
- MYCAT分库分表中间件的简单配置与使用
- [大型网站系统与Java中间件实践]--构建Java中间件的基础
- 基于J2EE规范的中间件——Java的发展
- Tag Character postion , '' Error!
- 不和
- block的浅认识
- 使用Weka进行数据挖掘(Weka教程七)Weka分类/预测模型构建与评价
- android4.3 webview 实现读取本地照片和摄像机功能
- 简单的Java中间件
- ORA-16136: Managed Standby Recovery not active
- Android热补丁动态修复技术(一):从Dex分包原理到热补丁
- Jedis源码解析(一)-------Jedis与JedisPool
- 16.leetcode题目228: Summary Ranges
- 如何将 hadoop1.1.2/1.2.1 源码关联到 Eclipse
- 使用CocoaPods找不到头文件解决方法
- AlphaGo围棋论文中文翻译
- ins-40912