当前位置: 首页 > 知识库问答 >
问题:

JBOss for MQ中的JNDI绑定

赏夕
2023-03-14

我需要一点帮助来配置JBoss与MQ一起工作。我已经使用IBM MQ Explorer在MQ中创建了初始上下文,并给出了所有绑定的本地目录,如file:/C:/jndi。我已经为这个初始上下文创建了一个连接工厂。现在JBoss文档说要像这样绑定

    <connection-definition class-name="com.ibm.mq.connector.outbound.ManagedConnectionFactoryImpl" 
                    jndi-name="java:jboss/MQ.CONNECTIONFACTORY.NAME" 
                    pool-name="MQ.CONNECTIONFACTORY.NAME">

我想我遗漏了一些要点。我如何告诉Jboss我的InitialContext绑定在一个目录中。大多数组合我都试过了。可能是我没有正确理解这个概念。有指针吗?

当我尝试从我编写的测试servlet访问此MQ.CONNECTIONFACTORY.NAME时,我会javax.naming.NameNotFoundException。如果我在JavaSE环境中遵循相同的步骤,我就能够成功地建立连接。我对应用程序服务器不熟悉,这个问题可能很天真

问候

共有2个答案

李昌勋
2023-03-14

这是一个重要的问题。我用Spring来做这个,像这样:

<util:properties id="remoteEnv">
    <prop key="java.naming.provider.url">file:${my.config.path}/bindings</prop>
    <prop key="java.naming.factory.url.pkgs">org.jboss.naming:org.jboss.naming.remote.client</prop>
    <prop key="java.naming.factory.initial">com.sun.jndi.fscontext.RefFSContextFactory</prop>
    <prop key="java.naming.security.principal">${mdb.user.name}</prop>
    <prop key="java.naming.security.credentials">${mdb.user.pass}</prop>
</util:properties>
<bean id="remoteJNDITemplate" class="org.springframework.jndi.JndiTemplate">
    <property name="environment" ref="remoteEnv" />
</bean>
<bean id="remoteJmsDestinationResolver" class="org.springframework.jms.support.destination.JndiDestinationResolver">
    <property name="jndiTemplate" ref="remoteJNDITemplate" />
    <property name="cache" value="true" />
</bean>
<jee:jndi-lookup id="senderQueue" jndi-name="MY_QUEUE_NAME" environment-ref="remoteEnv" />
<bean id="xamqconnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiTemplate">
        <ref bean="remoteJNDITemplate"/>
    </property>
    <property name="jndiName" value="MYCONNECTIONFACTORYJNDINAME"/>
    <property name="lookupOnStartup" value="false" />
    <property name="proxyInterface" value="javax.jms.XAQueueConnectionFactory" />
</bean>
<bean id="xaMQSenderJMSTemplate" class="org.springframework.jms.core.JmsTemplate">
    <property name="connectionFactory">
        <ref bean="xamqconnectionFactory" />
    </property>
    <property name="pubSubDomain">
        <value>false</value>
    </property>
    <property name="defaultDestination">
        <ref bean="senderQueue" />
    </property>
    <property name="destinationResolver" ref="remoteJmsDestinationResolver" />
</bean>

然而,使用上面的配置,我们绕过了资源适配器。这没有问题,但是它阻止事务加入JBoss事务,所以JMS消息是立即发送的,而不是提交事务。我还没找到解决办法。

com . sun . JNDI . fs context . reffscontextfactory,用于读取。绑定文件,可以在以下依赖项中找到:

<dependency>
    <groupId>com.sun.messaging.mq</groupId>
    <artifactId>fscontext</artifactId>
    <version>4.6-b01</version>
</dependency>
郭逸清
2023-03-14

通过MQExplorer创建的资源的描述表明,这些资源已被放入由文件系统上下文支持的JNDI中。这很好,但理论上现在需要做的是让JBOSS读取JNDI上下文中的对象,而不是JBOSS提供的普通JNDI提供者。连接定义提取中的设置使用标准JBOSS JNDI上下文。

作为使用JBOSS和WebSphere MQ Resoruce适配器的一个例子,请看这里http://pic . dhe . IBM . com/infocenter/wmqv 7/v7r 5/topic/com . IBM . MQ . dev . doc/q 031810 _。html文件的后缀

这链接到一组示例定义,这些定义在 JBOSS JNDI 上下文中存储 WMQ JMS 管理的对象。

 类似资料:
  • EJB 3.0提供了定义数据库实体关系/映射的选项,如一对一,一对多,多对一和多对多关系。 以下是相关注释 - One-to-One - 对象具有一对一的关系。 例如,乘客可以一次使用单张票。 One-to-Many - 对象具有一对多的关系。 例如,父亲可以有多个孩子。 Many-to-One - 对象具有多对一关系。 例如,多个孩子有一个单身母亲。 Many-to-Many - 对象具有多对多

  • JNDI代表Java命名和目录接口。 它是一组API和服务接口。 基于Java的应用程序使用JNDI进行命名和目录服务。 在EJB的上下文中,有两个术语。 Binding - 这是指为EJB对象分配名称,以后可以使用。 Lookup - 这是指查找并获取EJB的对象。 在Jboss中,会话bean默认以以下格式绑定在JNDI中。 local - EJB-name/local remote - EJ

  • 我对一个问题感到沮丧,我花了几个小时试图解决它!问题是。我试图查找一个已经在我的jboss服务器中声明的主题(MyBestTopic ),但是我有这个异常 在我的java代码中,我试图像这样检索主题: 查看jboss server的启动,我可以看到主题与正确的名称绑定得很好: 最后,当我在jmx控制台上看到jndiView树时,该主题也得到了很好的部署: 相同的java在具有相同部署主题和数据源的

  • 我有两台JBoss服务器,JbossA和JbossB。每个都有自己的JNDI。现在,我在JbossA上有一个名为JMS/Client的JMS,在JbossB上有个名为JMS/Server的JMS。 现在,我希望JbossA上的应用程序能够使用自己的JNDI访问jms/服务器。此外,我希望JbossB上的应用程序使用jndi名称jms/Client1访问jms/Client,并使用自己的jndi。

  • 问题内容: 如何在JBoss EAP 6中将任意字符串绑定到JNDI?我以前是通过以前的EAP版本中的org.jboss.naming.JNDIBindingServiceMgr MBean来完成的。 JBoss EAP 6中是否有与org.jboss.naming.JNDIBindingServiceMgr类似的东西? 我们正在将应用程序从jboss-5.1.EAP迁移到jboss-eap-6.

  • 我能够使用中定义的资源适配器成功读取远程ActiveMQ队列https://developer.jboss.org/wiki/HowToUseOutOfProcessActiveMQWithWildFly使用Wildfly 10。它在单机版中引用了以下配置 为了让代码工作,我在我的监听器上使用了如下MessageDriven注释 这是因为您基本上是将远程jndi名称硬编码到@MessageDriv