JMS消息服务器和Hibernate、Spring的集成开发

来源:互联网 发布:兼职软件 编辑:程序博客网 时间:2024/05/18 00:09

 工作需要使用JMS实现输入框的消息管理,就花两天时间学习了一下,现在整理如下,以备不时之需。

 

JMS用来实现消息管理,ActiveMQ是用来实现JMS框架。

开发JMS的步骤:

   1   安装ActiveMQ服务器(在这里),并运行

   2  创建Web项目,引用jar包

        activemq-all-5.5.0.jar
        javax.jms.jar

   3  建立发送消息的源代码,将消息发送到ActiveMQ服务器上

 

public class QueueSend {  //queue方式的jms连接 QueueConnection queueConection;  //queue回话 QueueSession queueSession;  //queue消息发送者 QueueSender queueSender;  Queue queue;  public QueueSend(){}  public QueueSend(String factoryJNDI,String topicJNDI){    //连接jms Provider的环境参数  Hashtable<String, String> props = new Hashtable<String,String>();    String INITIAL_CONTEXT_FACTORY = "";    props.put(INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");    try {   new InitialContext(props);      Context ctx = new InitialContext();      Context context = ctx;      String connectionFactoryName = "xxx";      QueueConnectionFactory queueFactory = new ActiveMQConnectionFactory("tcp://127.0.0.1:61616");      //创建连接       queueConection = queueFactory.createQueueConnection();      int AUTO_ACKNOWLEDGE = 1;      queueSession = queueConection.createQueueSession(false, AUTO_ACKNOWLEDGE);      queue = new ActiveMQQueue("jason.queue2");      //创建队列消息的发送者   queueSender = queueSession.createSender(queue);     } catch (NamingException e) {   // TODO Auto-generated catch block   e.printStackTrace();  }catch (JMSException e) {   // TODO Auto-generated catch block   e.printStackTrace();  }   }  public void send(String msg) throws JMSException{    TextMessage message = queueSession.createTextMessage();    message.setText(msg);    queueSender.send(queue,message);   }  public void close() throws JMSException{    queueSession.close();    queueConection.close(); }   public static void main(String[] args) throws JMSException {    QueueSend queue = new QueueSend("ConnectionFactory", "queue/testQueue");    for(int i = 19; i<21 ;i++){      String msg = "Hello World no "+i;      System.out.println("Hello Queue Publishing message:" + msg);      queue.send(msg);     }     } }


 

   4  建立接受消息的源代码,把消息从ActiveMQ服务器上接受下来

 

public class QueueConsumer {  public static void main(String[] args) {    QueueConsumer rs = new QueueConsumer();    int i = 0;    //循环只是为了让程序每两秒钟个进行一次连接侦听是否有消息可以获取  while(true){      rs.consumeMessage();      try {    Thread.sleep(2000);   } catch (InterruptedException e) {        // TODO Auto-generated catch block    e.printStackTrace();   }      i++;      System.out.println("Start recive "+i);     }   }  Session session; public Message consumeMessage() {    Message mess = new Message();    List list = new ArrayList();    ConnectionFactory connectionFactory;    Connection connection = null;    Queue queue;    MessageConsumer consumer;    connectionFactory = new ActiveMQConnectionFactory(       ActiveMQConnection.DEFAULT_USER,        ActiveMQConnection.DEFAULT_PASSWORD,"tcp://127.0.0.1:61616");    try {   connection = connectionFactory.createConnection();      connection.start();      session = connection.createSession(Boolean.FALSE, session.AUTO_ACKNOWLEDGE);      queue = new ActiveMQQueue("jason.queue2");      consumer = session.createConsumer(queue);      while (true) {        TextMessage message = (TextMessage) consumer.receive(1000);        if (null != message) {          System.out.println("收到消息" + message.getText());          list.add(message.getText());         } else {           // 没有消息时,退出     break;         }   }     } catch (JMSException e) {      e.printStackTrace();     }finally {      mess.setPinpai((String)list.get(0));      mess.setShangshi((String)list.get(1));      mess.setWeb((String)list.get(2));      mess.setPrice((String)list.get(3));      try {    if (null != connection)          connection.close();       } catch (Throwable ignore) {        ignore.printStackTrace();       }     }    return mess;   }   public void onMessage(Message message) {    try {   if (message instanceof TextMessage) {    TextMessage txtmess = (TextMessage) message;        System.out.println("收到的消息是:" + txtmess.getText());        // 回复发送者        MessageProducer sender = session.createProducer(message.getJMSReplyTo());        sender.send(session.createTextMessage("已收到你的消息"));       } else    System.out.println("收到的消息是:" + message);     } catch (Exception e) {      e.printStackTrace();     } }}


 

OK,直接在Java Application上运行一下就好了

 

如果和Hibernate、Spring集成,首先要将数据库访问工作做好,这里就不再赘述。

然后取得页面控件值,操作如下:

在jsp中,为了可以提交给服务器,需要用Form标签将其包围起来,还要使用id定义控件,如:<input name="txtName" type="text" id="txtName" />
定义了一个ID为 txtName的文本框控件,action="coret.jsp" 则定义了提交后进行处理的JSP页面。

然后,新建core.jsp,如下:

<%@ page language="java" contentType="text/html; charset=utf-8"    pageEncoding="utf-8"%> <%  MessageService s=new MessageService (); s.add(request); out.write("添加成功!");   %>


 

这样就将功能代码封装至MessageService.add()方法中了。

然后,就是建立MessageService 类,主要代码如下:

public class MessageService {  public static void add(HttpServletRequest request) { String name=request.getParameter("txtName");      }


 

 这样就取到了jsp页面中textName的值了。

以此方法,得到页面的所有值,将其封装成对象,然后调用访问数据库的方法,就OK啦!

 

 

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 二级建造师注册有效期过了怎么办 公司变更法人新刻法人章怎么办 个体户年报第一年忘了报怎么办 别人说娃名字起大了怎么办? 综英美我能怎么办我也很绝望 两个人不合适且结了婚怎么办 国税局寄来的邮件没收到怎么办 新疆办理暂住证有案底不办给怎么办 我的驾驶证吊销了车年审怎么办 好几个超速分不够扣了怎么办 刚拿c1驾照扣6分怎么办 别人开我车扣12分怎么办 办健康证大便拉不出来怎么办 欠信用卡钱被网上通缉抓到后怎么办 上海房子卖了户口没地方迁怎么办 没有户口本在北京身份证丢了怎么办 武汉科目四考试居住证过期了怎么办 农行卡密码输错3次怎么办 驾照罚款缴纳了网上没消怎么办 外地驾驶证分数扣12分了怎么办 有生产日期的赠品在超市过期怎么办 6年免检车辆逾期未年检怎么办 行驶证检验有效期过期2年怎么办 骑摩托车忘带驾驶证和行驶证怎么办 驾驶证逾期未审验怎么办有什么后果 车祸至人腿部骨折沒钱偿还的怎么办 我有c4驾驶证想办c3怎么办 驾驶证和行驶证被交警扣了怎么办 行驶证被交警弄丢了怎么办 没带行驶证让警察发现怎么办 首尔转机换票换乘怎么办过境签证 驾驶证约考帐号与登密码丢失怎么办 考驾照的时候预约密码忘了怎么办 考驾照的预约密码忘了怎么办 摩托车不能挂档不能摘挡了怎么办 身份证丢失了派出所不给挂失怎么办 快递员在中午还送货夏天怎么办啊 驾照一个记分周期扣满12分怎么办 佛山南海车管所怎么办替人消分流程 福州快处中心几流程要怎么办 被对方追尾了对方只有交强险怎么办