日期:2014-05-16 浏览次数:20501 次
上篇文章[1]中,实现了实验的前三步。下面开始实验的后两步:重建对象、数据库操作和消息平台的实现与完善。整个系统的架构如图所示,即传递的对象是封装了数据库操作对象和数据库SQL语言的report对象,在客户端解析完成后,重做数据库:
首先修正上篇文章中的发送和接收消息程序,之前的代码估计因为配置问题导致程序发送消息不是太流畅,这里改用如下版本程序,进行发送和接受report对象。QueueSend代码如下:
package server.activemq; import java.io.Serializable; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.DeliveryMode; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.MessageProducer; import javax.jms.ObjectMessage; import javax.jms.Session; import javax.jms.TextMessage; import org.apache.activemq.ActiveMQConnection; import org.apache.activemq.ActiveMQConnectionFactory; import client.curd.rebuild; import client.curd.report; import client.curd.sql; import client.db.user; public class QueueSend { private static finalint SEND_NUMBER = 5; public static voidmain(String[] args) { //ConnectionFactory :连接工厂,JMS 用它创建连接 ConnectionFactoryconnectionFactory; //Connection :JMS 客户端到JMS Provider 的连接 Connectionconnection = null; // Session:一个发送或接收消息的线程 Sessionsession; //Destination :消息的目的地;消息发送给谁. Destinationdestination; //MessageProducer:消息发送者 MessageProducerproducer; //TextMessage message; // 构造ConnectionFactory实例对象,此处采用ActiveMq的实现jar connectionFactory= new ActiveMQConnectionFactory( ActiveMQConnection.DEFAULT_USER, ActiveMQConnection.DEFAULT_PASSWORD, "tcp://192.168.195.54:61616"); try { // 构造从工厂得到连接对象 connection= connectionFactory.createConnection(); // 启动 connection.start(); // 获取操作连接 session= connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE); //queue1需要在admin界面创建 destination= session.createQueue("queue1"); // 得到消息生成者 producer= session.createProducer(destination); // 设置不持久化,此处学习,实际根据项目决定 producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); // 构造消息,此处写死,项目就是参数,或者方法获取 //sendMessage(session, producer); useru = new user(); u.setName("gqk"); u.setPassword("123"); sqls = new sql(); s.setQuery("updateusers set password ='1' where id =1;"); reportr = new report(); r.setO(u); r.setSqlQuery(s); sendObject(session,producer, r); session.commit(); } catch(Exception e) { e.printStackTrace(); } finally { try{ if(null != connection) session=null; connection.close(); producer= null; System.exit(0); }catch (Throwable ignore) { }