在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