`
whiskey
  • 浏览: 1250 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

glassfish+mdb+activeMQ

阅读更多

1.在active的控制台,新建queue:batchAdjust

2.用脚本配置好glassfish的配置
脚本如下:

@echo off

if "%1" == "" goto :ERROR

echo prepare for mq
call %1\bin\asadmin delete-jmsdest  --desttype queue ActiveMqQueue
call %1\bin\asadmin delete-admin-object jms/ActiveMqQueue
call %1\bin\asadmin delete-connector-resource jms/ActiveMQConnectionFactory
call %1\bin\asadmin delete-connector-connection-pool jms/ActiveMQpool

call %1\bin\asadmin undeploy activemq-rar-5.1.0

echo finished prepare for mq


echo start config for mq
#发布activemq的rar,这个包一般在apache-activemq-5.1.0-bin\apache-activemq-5.1.0\lib\optional目录下
# activemq-rar-5.1.0.rar包中的activemq-rar-5.1.0.rar\META-INF\ra.xml可以改连接哪个地址的active MQ
call %1\bin\asadmin deploy activemq-rar-5.1.0.rar
echo finished deploying activemq-rar-5.1.0.rar

call %1\bin\asadmin create-admin-object --raname activemq-rar-5.1.0 --restype javax.jms.Queue --property DestinationJndiName=ActiveMqQueue jms/ActiveMqQueue
echo finished create admin object jms/ActiveMqQueue

call %1\bin\asadmin create-jmsdest --desttype queue ActiveMqQueue
echo finished create jmsdest ActiveMqQueue

call %1\bin\asadmin create-connector-connection-pool --raname activemq-rar-5.1.0 --connectiondefinition javax.jms.ConnectionFactory --transactionsupport  XATransaction jms/ActiveMQpool
echo finished create connector connection pool jms/ActiveMQpool

#建jms/ActiveMQConnectionFactory给客户端使用
call %1\bin\asadmin create-connector-resource --poolname jms/ActiveMQpool jms/ActiveMQConnectionFactory
echo finished create connector resource jms/ActiveMQConnectionFactory

echo Setup complete
goto :END


:ERROR
echo Please set glassfish base path
echo e.g. config-new-glassfish c:\glassfish

:END



2.然后用netbean6.1新增加mdb




在生成的MDB中,加入红色部分。

@MessageDriven(mappedName = "jms/batchAdjust", activationConfig =  {
        @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
        @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
        @ActivationConfigProperty(propertyName="destination", propertyValue="batchAdjust") 

    })


MDB完整代码

package com.outblaze.pointsystem.mdb;

import com.outblaze.pointsystem.model.HashMapKey;
import com.outblaze.pointsystem.model.MessageType;
import com.outblaze.pointsystem.pojo.UploadPoint;
import com.outblaze.pointsystem.session.pointadjust.LoyaltyPointAdjustLocal;
import com.outblaze.pointsystem.utils.AppLog;
import java.util.HashMap;
import java.util.Map;
import javax.annotation.Resource;
import javax.ejb.ActivationConfigProperty;
import javax.ejb.EJB;
import javax.ejb.MessageDriven;
import javax.ejb.MessageDrivenContext;
import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.ObjectMessage;
import javax.jms.TextMessage;

/**
 * batch adjust all user balance
 * @author whiskey.yang
 */
@MessageDriven(mappedName = "jms/ActiveMqQueue", activationConfig ={ @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),@ActivationConfigProperty(propertyName = "destination", propertyValue = MessageType.QUEUE_BALANCE_LOYALTY_ADJUST_WHOLE)})
public class QBalanceLoyaltyAdjustWholeMB implements MessageListener
{
    /**
     * Session Facade for LoyaltyPointAdjustLocal 
     */
    @EJB private LoyaltyPointAdjustLocal  loyaltyPointAdjustLocal ;

    @Resource
    private MessageDrivenContext mdc;

    /** QBalanceLoyaltyAdjustWholeMB */
    public QBalanceLoyaltyAdjustWholeMB()
    {
    }

    /**
     * onmessage
     * @param message Message
     */
    public void onMessage(Message message)
    {

        TextMessage textMessage;
        MapMessage msg;
        ObjectMessage objMsg = null;
        try
        {
            AppLog.getInstance().getEjbLog().info("MDB:"+MessageType.QUEUE_BALANCE_LOYALTY_ADJUST_WHOLE);
            AppLog.getInstance().getEjbLog().info("receive message---------------" + message.getJMSMessageID());
            if (message instanceof ObjectMessage)
            {
                objMsg = (ObjectMessage) message;
                Map map = (HashMap) objMsg.getObject();
                
                //logice method
                UploadPoint uploadPoint=(UploadPoint)map.get(HashMapKey.ADJUST_LOYALTY_ALL_USER_POJO);
                loyaltyPointAdjustLocal.updateAllLoyaltyPointBatch(uploadPoint);
            }
            else if (message instanceof TextMessage)
            {
                textMessage = (TextMessage) message;
                System.out.println("Message Received:" + textMessage.getText());
            }
        }
        catch (JMSException ex)
        {
            AppLog.getInstance().getEjbLog().error("Deal with message JMSException", ex);
            mdc.setRollbackOnly();
        }
        catch (Exception ex)
        {
            AppLog.getInstance().getEjbLog().error("Deal with message Exception", ex);
            mdc.setRollbackOnly();
        }
    }
}


POJO

package com.outblaze.pointsystem.model;

/**
 * the message for active MQ
 * @author whiskey.yang
 */
public class MessageType
{

    /**
     * the type for batch adjust all loyalty user balance
     */
    public static final String QUEUE_BALANCE_LOYALTY_ADJUST_WHOLE = "queueBalanceLoyaltyAdjustWhole";
    /**
     * the type for batch adjust specified loyalty user balance
     */
    public static final String QUEUE_BALANCE_LOYALTY_ADJUST_SPECIFIED = "queueBalanceLoyaltyAdjustSpecified";
}

======================================================


客户端代码:
======================================================
import com.outblaze.pointsystem.utils.AppLog;
import java.util.HashMap;
import javax.annotation.Resource;
import javax.ejb.Stateless;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;

/**
 * The session for message client
 * @author whiskey.yang
 */
@Stateless
public class MessageClientBean implements MessageClientLocal
{

    @Resource(mappedName = "jms/ActiveMQConnectionFactory")
    private ConnectionFactory deployQueueFactory;

    /**
     * Send the message to deploy queue.
     * @param map HashMap
     * @param queueName the queue name
     * @return boolean if message is sent successfully return true.else return false
     */
    public boolean sendMessageToActiveMQ(HashMap map, String queueName)
    {
        boolean returnflag=false;
        Connection connect = null;
        Session session = null;
        MessageProducer messageProducer = null;
        Queue queue = null;
        try
        {
            connect = deployQueueFactory.createConnection();
            connect.start();
            session = connect.createSession(false, javax.jms.Session.AUTO_ACKNOWLEDGE);
            queue = session.createQueue(queueName);
            messageProducer = session.createProducer(queue);
            javax.jms.ObjectMessage objMessage = session.createObjectMessage();
            objMessage.setObject(map);
            messageProducer.send(objMessage);
            AppLog.getInstance().getEjbLog().info("success send message to queueName:" + queueName + ".............................................");
            returnflag=true;


//            javax.jms.ObjectMessage objMessage = session.createObjectMessage();
//            objMessage.setObject(map);
//            ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616"); 
//                   Connection connection = factory.createConnection();     
//                   Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 
//                   Topic topic = session.createTopic("TestTopic"); 
//                   MessageProducer publisher = session.createProducer(topic); 
//                   publisher.setDeliveryMode(DeliveryMode.NON_PERSISTENT); 
//               connection.start(); 
//               for(int x=0;x<5;x++){ 
//              TextMessage message = session.createTextMessage("Test message "+x); 
//              System.out.println("Sending message: "+message.getText()); 
//              publisher.send(message); 
        }
        catch (JMSException ex)
        {
            AppLog.getInstance().getEjbLog().error("send message to active MQ JMSException:" + ex);
        }
        catch(Exception ex)
        {
            AppLog.getInstance().getEjbLog().error("send message to active MQ Exception:" + ex);
        }
        finally
        {
            try
            {
                if (messageProducer != null)
                {
                    messageProducer.close();
                }
                if (session != null)
                {
                    session.close();
                }
                if(connect!=null)
                {
                    connect.close();
                }
                
            }
            catch (JMSException ex)
            {
                AppLog.getInstance().getEjbLog().error("Finished sending message to active MQ. But colse the resource exception:" + ex);
            }

        }
        return returnflag;
    }
}

 

0
1
分享到:
评论

相关推荐

    Glassfish + josso 单点登录范例

    ### Glassfish + Josso 单点登录实现及MD5加密技术详解 #### 一、引言 在现代企业级应用中,单点登录(Single Sign-On, SSO)已成为提高用户体验、增强安全性的重要手段之一。本文将详细介绍如何利用Glassfish应用...

    glassFish+postgres+NetBeans j2ee开发指南

    最后,文档提到了一些参考资料,包括GlassFish的官方网站,这是获取关于GlassFish最新信息和社区支持的渠道。 综合来看,这篇文章是一份全面的JavaEE开发入门指南,覆盖了从基础概念到环境配置,再到快速入门和实际...

    GlassFish+josso单点登录

    ### GlassFish + Josso + MySQL 实现单点登录详解 #### 一、引言 随着企业信息化建设的深入,多系统间的用户身份认证与管理变得日益复杂。为了解决这一问题,单点登录(Single Sign-On,简称SSO)技术应运而生。...

    Wicket 8.x参考指南(中文+英文)-20181119

    Wicket 是一个 Java 语言的 Web 开发框架,与 Struts,WebWork,Tapestry 相类似。 其特点在于对 Html 和代码进行了有效的分离(有利于程序员和美工的合作),基于规则的配置(减少了 XML 等配置文件的使用),学习...

    LearningRoom:jsp新手开发小案例;开发环境,netbeans+glassfish+postgresql+jsp(java8)

    这个案例涵盖了使用Java 8语言、NetBeans IDE、GlassFish应用服务器以及PostgreSQL数据库进行Web应用程序开发的基础知识。让我们详细了解一下这些关键组件及其在Web开发中的作用。 首先,Java Server Pages(JSP)...

    soapjms测试例子使用activemq和glassfish中的jar包

    这个测试例子是关于如何利用Apache ActiveMQ和GlassFish服务器中的JAR包来实现SOAPJMS的。ActiveMQ是流行的开源消息代理,而GlassFish是一个开源的应用服务器,支持多种Java应用规范,包括JMS。 在开始之前,我们...

    ActiveMQ教程+配置借鉴.pdf

    - 与常见的 J2EE 服务器(如 Geronimo、JBoss 4、GlassFish 和 WebLogic)兼容,方便集成。 - 对于测试,可以轻松调用内嵌 JMS 提供商。 5. **竞争对手**: - 开源 JMS 提供商,如 JBossMQ、JBoss Messaging、...

    Active MQ教程+配置

    4. **广泛的应用服务器兼容性**:经过了诸如Geronimo、JBoss 4、GlassFish和WebLogic等主流J2EE服务器的测试。此外,通过JCA 1.5资源适配器的配置,可以使ActiveMQ自动部署到任何兼容J2EE 1.4的商业服务器上。 5. **...

    glassfish安装手册及源文件

    《Glassfish安装手册及源文件详解》 Glassfish是一款开源的应用服务器,它是Java EE平台的实现,为企业级应用提供了一套完整的开发、部署环境。在本文中,我们将深入探讨如何安装Glassfish,以及如何利用Ant工具...

    ActiveMQ讲义.ppt

    ActiveMQ还具有广泛的服务器兼容性,可以部署在常见的J2EE服务器上,如Geronimo、JBoss 4、GlassFish和WebLogic,通过JCA 1.5资源适配器实现自动化部署。它支持多种传输协议,如in-VM、TCP、SSL、NIO、UDP、JGroups...

    apache-activemq-5.11.2

    ⒋ 通过了常见J2EE服务器(如 Geronimo,JBoss 4,GlassFish,WebLogic)的测试,其中通过JCA 1.5 resource adaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容J2EE 1.4 商业服务器上 ⒌ 支持多种传送协议:in-VM,...

    ActiveMQ简单教程

    ActiveMQ 的功能强大,可以轻松集成到使用 Spring 框架的系统中,并且兼容多种常见的 J2EE 服务器,如 Geronimo、JBoss、GlassFish 和 WebLogic。此外,ActiveMQ 支持多种传输协议,包括 in-VM、TCP、SSL、NIO、UDP...

    glassfish集群搭建手册

    标题《Glassfish集群搭建手册》指的是利用Oracle提供的Glassfish应用服务器软件进行集群配置的详细指南。此手册涵盖了在不同场景下通过图形化界面和命令行方式搭建集群的整个过程,并且描述了如何配置集群环境以支持...

    glassfish安装配置文档

    GlassFish 安装配置文档 GlassFish 是一个基于 Java 的开源应用服务器,提供了一个强大且灵活的平台来部署和管理基于 Java 的应用程序。本文档将指导 readers 通过安装和配置 GlassFish 服务器,并将其与 Eclipse ...

    activemq-ra-3.1-M1.jar.zip

    此JAR文件是ActiveMQ的资源适配器,它允许应用程序服务器如JBoss、WebLogic或Glassfish等与ActiveMQ进行通信,以便在分布式环境中实现异步消息传递。资源适配器是Java EE平台的一部分,它提供了一种标准的方式来集成...

    glassfish-3.1.2.2.zip

    《深入解析Glassfish 3.1.2.2与Java EE 6的融合应用》 Glassfish 3.1.2.2是一款由Oracle公司开发的开源应用服务器,它是Java EE 6规范的重要实现者,提供了全面的支持和丰富的功能,为开发者提供了构建企业级Web...

    Glassfish部署web项目

    ### Glassfish部署Web项目知识点详解 #### 一、概述 **Glassfish** 是一款开源的Java EE应用服务器,由Oracle公司维护。它基于Java EE标准,支持多种Java EE技术,如EJB、JPA、JSF等。由于其强大的功能和良好的...

    linux下实现glassfish自动启动

    在Linux环境下,Glassfish服务器的自动化启动是系统管理员和开发者常用的需求,这有助于提升服务器管理效率,确保服务的持续性和稳定性。Glassfish是Oracle公司提供的一个开源Java EE应用服务器,它支持各种Web应用...

    Glassfish安装和启动

    ### Glassfish安装与启动详解 #### 一、简介 GlassFish 是一款开源的应用服务器,它遵循Java EE标准,被广泛应用于开发、测试和生产环境中。本文档将详细介绍如何安装和启动GlassFish应用服务器。 #### 二、安装前...

Global site tag (gtag.js) - Google Analytics