【问题标题】:Generation of binding file Message Queue Broker 4.5生成绑定文件 Message Queue Broker 4.5
【发布时间】:2019-09-19 22:54:27
【问题描述】:

我正在运行创建 DefaultMessageListenerContainer bean 的 Tomcat。为此,它指的是使用jndiTemplate bean 的connectionFactory bean,它使用imq/imq_admin_objects 所在的路径。

bean定义如下

<bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
  <property name="connectionFactory" ref="connectionFactory"/>
  <property name="destination" ref="destination"/>
  <property name="messageListener" ref="transactionMessageListener"/>
  <property name="sessionTransacted" value="true"/>
  <property name="concurrentConsumers" value="1"/>
</bean>

<!-- JMS configuration -->
<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
  <property name="environment">
    <props>
      <prop key="java.naming.factory.initial">
        com.sun.jndi.fscontext.RefFSContextFactory
      </prop>
      <prop key="java.naming.provider.url">
        file:///var/imq/imq_admin_objects
      </prop>
    </props>
  </property>
</bean>

<bean id="connectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiTemplate" ref="jndiTemplate"/>
  <property name="jndiName" value="factory"/>
</bean>

问题是没有生成这样的文件夹。我正在为 JMS 使用 Message Queue Broker 4.5。在运行服务时,它只创建一个 var/mq 目录。我希望它生成一个 imq 文件夹,该文件夹将包含用于创建 JMS 的相应绑定文件。

【问题讨论】:

  • 嗨乔希,它是消息队列代理。更多信息:javaee.github.io/openmq
  • 谢谢。最初的问题正文有一个阻止程序而不是经纪人的错字。我将其从 [mq] 重新标记为 [openmq]。

标签: java spring jms openmq


【解决方案1】:

我相信您在这里的期望是不正确的。为com.sun.jndi.fscontext.RefFSContextFactory 引用的文件系统对象存储必须已经存在。它不会为您创建它。您必须创建并提供它,这样 bean 才能正确初始化并且 JNDI 查找可以正常工作。

绑定文件包含详细信息,例如 JNDI 查找名称以及如何通过网络连接到服务器(例如主机名、端口等)。这些详细信息必须由管理员提供。 JNDI 实现不能自己想出它们。

如果您从Open MQ 4.5 Documentation 页面链接browse the "Developer’s Guide for Java Clients" 并检查标题为"Using the Java API" 的第2 章,您将在“获取连接工厂”部分看到这一点:

通常,连接工厂由 Message Queue 管理员创建并预配置,使用Oracle GlassFish Server Message Queue 管理指南中“Administrative Tasks and Tools”中描述的管理工具以及任何属性设置适用于连接到特定的 JMS 提供程序。然后将工厂放置在一个公开可用的受管对象存储中,您可以在其中使用 Java 命名和目录接口 (JNDI) API 按名称访问它。

在文档的更下方,您会找到an example of how to look up a connection factory object in the JNDI object store。此示例与您一样使用文件系统对象存储,并特别说明:

C:/imq_admin_objects 所代表的目录必须已经存在;如有必要,您必须先创建目录,然后再在代码中引用它。

简而言之,您必须创建受管理的文件系统对象存储并使其公开可用,以便 JNDI 客户端可以使用它。

【讨论】:

  • 感谢您回复贾斯汀。问题是,在我启动服务时,在 var 目录中创建了 mq 文件夹。我希望它在我启动服务时也会生成一个 imq 文件夹。
猜你喜欢
  • 2023-04-06
  • 2021-05-01
  • 1970-01-01
  • 2012-02-19
  • 2019-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多