基于web的简单MDB

本文提供一个在Jboss服务器下的以jsp为消息发布客户端,MDB为消息消费者,并将消息持久化....

一、在Myeclipse中创建EJB

      1.创建映射POJO类对应数据库中的表,persistence.xml根据你在Jboss中数据源的配置进行配置。代码如下:

        package com.MDBExperiment;

import javax.persistence.*;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
@Entity
@Table(name="MDBtest")
public class MDB {

 @Id
 @GeneratedValue(strategy = GenerationType.AUTO)
 private Integer id;
 @Column(name="time")
 private String time;
 @Column(name="URL")
 private String url;
 @Column(name="ip")
 private String ip;

 public MDB() {
 }

 public Integer getId() {
  return id;
 }

  2.创建MDB


 public void setId(Integer id) {
  this.id = id;
 }


 public String getTime() {
  return time;
 }


 public void setTime(String time) {
  this.time = time;
 }


 public String getUrl() {
  return url;
 }


 public void setUrl(String url) {
  this.url = url;
 }


 public String getIp() {
  return ip;
 }


 public void setIp(String ip) {
  this.ip = ip;
 }
 public int hashCode() {
  return (this.id == null) ? 0 : this.id.hashCode();
 }

 public boolean equals(Object object) {
  if (object instanceof MDB) {
   final MDB obj = (MDB) object;
   return (this.id != null) ? this.id.equals(obj.id)
     : (obj.id == null);
  }
  return false;
 }

}

 

     package com.MDBExperiment;

import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import com.MDBExperiment.*;;

@MessageDriven(mappedName = "jms/QueueMDB", activationConfig = {
  @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
  @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
  @ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/queueMDB")})
public class QueueMDB implements MessageListener {
 //依赖注入(IoC)
 @PersistenceContext(unitName="MDBExperimentPU")
 EntityManager em; //容器对象(DAO对象)
 public void onMessage(Message msg) {
  // TODO Auto-generated method stub
  try{
   if(msg instanceof MapMessage){
    MapMessage map = (MapMessage) msg;
    System.out.println("[ejb2.1,queue]" + map.getString("time"));
    System.out.println("[ejb2.1,queue]" + map.getString("url"));
    System.out.println("[ejb2.1,queue]" + map.getString("ip"));
    //write to db
    MDB mdb = new MDB();
    mdb.setTime(map.getString("time"));
    mdb.setUrl(map.getString("url"));
    mdb.setIp(map.getString("ip"));
    em.persist(mdb);
   }
  }catch(Exception ex){
   ex.printStackTrace();
  }
 }

     }
  3.创建Jboss队列

<?xml version="1.0" encoding="UTF-8" ?>

<server>
<mbean code="org.jboss.mq.server.jmx.Queue"
name="jboss.org.destination:server=Queue,name=queueMDB" >
<attribute name="JNDIName" >queue/queueMDB </attribute>
<depends optional-attribute-name = "DestinationManager" >
jboss.mq:service=DestinationManager
</depends>
</mbean>
</server>

4.创建WEB工程,编写jsp实现消息的发送

<%@ page language="java" pageEncoding="ISO-8859-1"%>
<%@ page import="javax.naming.*, javax.jms.*, java.util.Properties"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
   
    <title>My JSP 'test.jsp' starting page</title>
   
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">   
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->

  </head>
 
  <body>
    <%
    QueueConnection cnn = null;
 QueueSender sender = null;
 QueueSession sess = null;
 Queue queue = null;
 MapMessage msg = null;
 try {
  Properties props = new Properties();
  props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
  props.setProperty("java.naming.provider.url", "localhost:1099");
  props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming");
  InitialContext ctx = new InitialContext(props);
  QueueConnectionFactory factory = (QueueConnectionFactory) ctx.lookup("ConnectionFactory");
  cnn = factory.createQueueConnection();
  sess = cnn.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);
  queue = (Queue) ctx.lookup("queue/queueMDB");
 } catch (Exception e) {
  out.println(e.getMessage());
 }
     sender = sess.createSender(queue);
  String time = request.getParameter("time");
  String url = request.getRequestURI().toString();
  String ip = request.getRemoteAddr();
  msg = sess.createMapMessage();
  msg.clearBody();
  msg.setString("time",time);
  msg.setString("url",url);
  msg.setString("ip",ip);
  sender.send(msg);

 sess.close ();
 out.println("OK");
     %>
  </body>
</html>

    项目发布时记得在web项目里面添加引用EJB项目,运行Jboss,打开浏览器输入url执行,再打开数据库就可以看到效果出来了....

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值