将Glassfish 3连接到外部ActiveMQ 5代理

介绍

在ONVZ,我们将Glassfish 3用作开发和生产应用服务器,我们对其性能和稳定性以及周围的广大社区感到非常满意。 我很少遇到在stackoverflow或java.net上没有匹配解决方案的问题。 作为我们开源策略的一部分,我们还运行了一个定制的ActiveMQ群集,称为“ ONVZ Message Bus”。

为了使消息驱动Bean和其他EJB能够使用ActiveMQ消息代理与之交互并从ActiveMQ消息代理产生消息,而无需考虑Glassfish随附的内部OpenMQ代理,必须安装ActiveMQ资源适配器。 对我来说幸运的是,Sven Hafner写了一篇博客文章,介绍如何在Glassfish 3中运行嵌入式ActiveMQ 5代理 ,我能够提取连接到外部代理所需的信息。 这篇博客文章描述了如何使它起作用。

安装ActiveMQ资源适配器

  • 在开始Glassfish之前,将以下库从ActiveMQ安装目录或其他位置复制到Glassfish
    • 将“ slf4j-api-1.5.11.jar”从ActiveMQ“ lib”目录复制到Glassfish“ lib”目录
  • 从以下位置下载资源适配器(activemq-rar-5.5.1.rar)
  • 在Glassfish中部署资源适配器
    • 在Glassfish管理控制台中, 转到“应用程序”,然后单击“部署”
  • 创建资源适配器配置
    • 在Glassfish管理控制台中, 转到“资源”,然后单击“资源适配器配置”
  • 创建连接器连接池
    • 在Glassfish管理控制台中, 转到“资源”,“连接器”,“连接器连接池”
  • 创建管理对象资源
    • 在Glassfish管理控制台中, 转到“资源”,“连接器”,“管理对象资源”

现在,我们已经准备好一切(实际上在JNDI中),以开始使用标准Java EE消息驱动Bean处理消息。 您刚刚创建的“连接器连接池”导致ConnectionFactory在JNDI中注册,而“管理对象资源”导致JMS目标。 当您转到“资源”,“ JMS资源”时,可以在管理控制台中找到这些对象。 在我使用的Glassfish版本(3.1.1)中,管理控制台存在一个错误,该错误导致连接工厂和目标仅在菜单中可见,而在页面右侧不可见。

创建和部署消息驱动Bean

  • 在您喜欢的IDE中创建一个新的Java Enterprise项目,并创建一个包含以下内容的消息驱动Bean:
package com.example.activemq.glassfish;

import javax.ejb.*;
import javax.jms.*;

@MessageDriven(
        activationConfig = {
            @ActivationConfigProperty(propertyName = 'destinationType', propertyValue = 'javax.jms.Queue'),
            @ActivationConfigProperty(propertyName = 'destination', propertyValue = 'jms/queue/incoming')
        }
)
public class ExampleMessageBean implements MessageListener {

    public void onMessage(Message message) {
        try {
         System.out.println('We've received a message: ' + message.getJMSMessageID());
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }
}

Glassfish会将您的bean连接到已配置的队列,但是它将尝试使用连接到嵌入式OpenMQ代理的默认ConnectionFactory进行连接。 这不是我们想要的,所以我们将指示Glassfish使用哪个ConnectionFactory。

  • 在META-INF文件夹中添加一个名为glassfish-ejb-jar.xml的文件,并插入以下内容:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE glassfish-ejb-jar PUBLIC '-//GlassFish.org//DTD GlassFish Application Server 3.1 EJB 3.1//EN' 'http://glassfish.org/dtds/glassfish-ejb-jar_3_1-1.dtd'>
<glassfish-ejb-jar>
    <enterprise-beans>
        <ejb>
            <ejb-name>ExampleMessageBean</ejb-name>
            <mdb-connection-factory>
                <jndi-name>jms/connectionFactory</jndi-name>
            </mdb-connection-factory>
            <mdb-resource-adapter>
                <resource-adapter-mid>activemq-rar-5.5.1</resource-adapter-mid>
            </mdb-resource-adapter>
        </ejb>
    </enterprise-beans>
</glassfish-ejb-jar>
  • 将MDB部署到glassfish

Glassfish现在使用ActiveMQ ConnectionFactory,一切都很好。 使用ActiveMQ Web控制台将消息发送到称为“ jms / queue / incoming”的队列,或使用其他工具发送消息。 Glassfish会捕获所有sysout语句并将其打印在默认的glassfish日志文件中。

参考: 如何通过我们的JCG合作伙伴 Geert Schuring在Geert Schuring博客上将Glassfish 3连接到外部ActiveMQ 5代理


翻译自: https://www.javacodegeeks.com/2012/06/connect-glassfish-3-to-external.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值