gpt4 book ai didi

glassfish - 如何以编程方式创建 jms Topic 和 TopicConnectionFactory?

转载 作者:行者123 更新时间:2023-12-02 19:20:45 24 4
gpt4 key购买 nike

有人知道是否可以以编程方式创建主题及其连接工厂吗?目前,我使用 glassfish 管理实用程序来创建我的主题及其连接工厂。如果我无法在代码中创建它,glassfish/openmq 是否有我可以使用的默认主题和 conn 工厂?

最佳答案

如果您只想避免在管理员中手动创建资源,您可以简单地使用文件“glassfish-resources.xml”(GF 3.1,请参阅 http://docs.oracle.com/cd/E18930_01/html/821-2417/giyhh.html )部署它们。

您需要一个像这样的管理对象资源(针对某个主题):

<admin-object-resource enabled="true" jndi-name="jms/myTopic"
object-type="user" res-adapter="jmsra" res-type="javax.jms.Topic">
<property name="Name" value="physicalTopic"/>
</admin-object-resource>

请注意,如果您实现多个主题,且其消息不应混淆,则必须对主题使用不同的“名称”值(此处:“physicalTopic”)。

此外,您还需要一个引用 javax.jms.TopicConnectionFactory 类型的连接器连接池的连接器资源。

如果您不打算使用部署描述符来动态创建资源 glassfish-resources.xml 似乎是最好的方法。

请注意,以这种方式部署的资源属于应用程序范围:http://docs.oracle.com/cd/E18930_01/html/821-2417/giydj.html

“glassfish-resources.xml”是 GF 3.x 的文件,对于 GF 2.x 是“sun-resources.xml”。如果您使用的是 NetBeans,则该文件位于项目 View 中的“服务器资源”文件夹中。注意:如果您使用NetBeans部署,“服务器资源”中的glassfish-resources.xml仅由NetBeans使用! NetBeans 知道如何创建这些资源并执行此任务。如果您在没有 NetBeans 的情况下将 EAR 直接部署到 Glassfish(这对于生产环境来说很可能如此),您必须在以下位置提供 glassfish-resources.xml:

  • EJB 模块的 META-INF 或模块范围资源的 WAR 的 WEB-INF
  • 您的企业应用程序的 META-INF,用于获取应用程序范围的资源在 NetBeans 中,您可以通过将文件放入项目 View 的“Configuration Files”文件夹(文件系统中的 src/conf/)来完成此操作。

您可以使用 NetBeans 的 [新建消息驱动 Bean] 向导轻松创建此资源定义(只需通过选择 [新建 ...] 添加 MBean)。在向导中选择“项目目标”> [添加]。完整的 3.1 示例如下所示:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE resources PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Resource Definitions//EN" "http://glassfish.org/dtds/glassfish-resources_1_5.dtd">
<resources>
<admin-object-resource enabled="true" jndi-name="jms/myDestination" res-type="javax.jms.Topic" res-adapter="jmsra">
<property name="Name" value="PhysicalTopic"/>
</admin-object-resource>
<connector-connection-pool name="jms/myDestinationFactoryPool" connection-definition-name="javax.jms.TopicConnectionFactory" resource-adapter-name="jmsra"/>
<connector-resource enabled="true" jndi-name="jms/myDestinationFactory" pool-name="jms/myDestinationFactoryPool" />
</resources>

这是 MBean 注释:

@MessageDriven(mappedName = "java:app/jms/myDestination", activationConfig =
{
@ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"),
@ActivationConfigProperty(propertyName = "subscriptionDurability", propertyValue = "Durable"),
@ActivationConfigProperty(propertyName = "clientId", propertyValue = "NewMessageBean"),
@ActivationConfigProperty(propertyName = "subscriptionName", propertyValue = "NewMessageBean")
})
public class NewMessageBean implements MessageListener
{
[...]

警告:仅当您使用应用程序范围的资源时,mappedName 中的“java:app/”才是正确的。您可以在 glassfish-resources.xml 的定义中保留“java:app/”。 GF 部署指南说:“应用程序范围的资源 JNDI 名称以 java:app 或java:模块。如果 JNDI 名称中未指定这些前缀之一,则会添加它。”

您还可以通过使用“name”而不是“mappedName”来引入另一个间接级别。然后,您必须提供一个名为“application-client.xml”的文件,其中(逻辑)名称映射到 JNDI“物理”位置。

关于glassfish - 如何以编程方式创建 jms Topic 和 TopicConnectionFactory?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8412513/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com