繁体   English   中英

使用IBM MQ的远程JNDI查找不起作用

[英]Remote JNDI lookup using IBM MQ doesn't work

我已经通过MQ Explorer在该MQ服务器中的机器A中安装了IBM MQ服务器v9,定义了一个队列管理器和一些队列。 我希望从另一个计算机B上运行的客户端通过JNDI查找此队列管理器及其队列。

因此,通过MQ Explorer,我尝试在“ JMS管理对象”中添加初始上下文,对于所定位的JNDI命名空间,我不想使用LDAP服务器或文件系统,我选择了“其他”选项(请检查下图)并提供com.ibm.ejs.ns.jndi.CNInitialContextFactory (我也尝试过com.ibm.websphere.naming.WsnInitialContextFactory ),提供的URL定义为iiop://<machine_A_IP>:2809

在此处输入图片说明

这是客户端代码:

// Instantiate the initial context
Hashtable<String, String> environment = new Hashtable<String, String>();
environment.put(Context.INITIAL_CONTEXT_FACTORY, "com.ibm.websphere.naming.WsnInitialContextFactory");
environment.put(Context.PROVIDER_URL, "iiop://<machine_A_IP>:2809");
Context context = new InitialDirContext(environment);

// Lookup the connection factory
JmsConnectionFactory cf = (JmsConnectionFactory) context.lookup("testConnectionFactory");

“ testConnectionFactory”是在JMS管理的对象中定义的连接工厂。

当我运行代码时,总是出现错误:

javax.naming.NameNotFoundException:在上下文“ serverlocal:CELLROOT / SERVERROOT”中找不到名称“ testConnectionFactory”。 失败

!!!!!!!!!!!!!!!!! 更新!!!!!!!!!!!!!!!!!!!!!

经过一些调查,我发现com.ibm.websphere.naming.WsnInitialContextFactory确实是特定于Websphere应用程序服务器的。 我直接在java Main类中进行了测试,这可能就是为什么我总是失败的原因。

就我而言,我确实需要将客户端部署到JBoss EAP 7,我可以使用提供程序吗?

我试图在IBM社区中找到一个示例,但是所有内容都与文件系统或LDAP服务器相关。

谁能帮我? 任何建议,将不胜感激!

提前致谢。

如果要从JBoss EAP 7连接到IBM MQ,请使用“文件系统”选项并创建一个.bindings文件。 然后,您可以将该文件复制到EAP服务器。

然后,您可以从JBoss EAP中引用该.binding文件:

    <subsystem xmlns="urn:jboss:domain:naming:2.0">
        <bindings>
            <external-context name="java:global/MQBindings" module="com.ibm.wmqclient75" class="javax.naming.InitialContext" cache="true">
                <environment>
                    <property name="java.naming.factory.initial" value="com.sun.jndi.fscontext.RefFSContextFactory"/>
                    <property name="java.naming.provider.url" value="file:///${jboss.server.data.dir}/bindings/"/>
                    <property name="java.naming.security.authentication" value="none"/>
                </environment>
            </external-context>
        </bindings>
        <remote-naming/>
    </subsystem>

请注意,我将IBM JNDI映射到“ java:global / MQBindings”。 类似“ java:jboss / MQBindings”的东西也可以工作。 “ .bindings”文件位于“ file:/// $ {jboss.server.data.dir} / bindings /”目录中。

该命名上下文使用“ com.ibm.wmqclient75”模块。 模块的module.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.3" name="com.ibm.wmqclient75">
<resources>
<resource-root path="com.ibm.mq.commonservices.jar" />
<resource-root path="com.ibm.mq.headers.jar" />
<resource-root path="com.ibm.mq.jar" />
<resource-root path="com.ibm.mq.jmqi.jar" />
<resource-root path="com.ibm.mqjms.jar" />
<resource-root path="com.ibm.mq.pcf.jar" />

<resource-root path="connector.jar" />
<resource-root path="dhbcore.jar" />
<resource-root path="fscontext.jar"/>
<resource-root path="providerutil.jar"/>
</resources>

<dependencies>
   <!-- add the dependencies required by JMS Bridge code -->
   <module name="javax.api"/>
   <module name="javax.resource.api"/>
   <module name="javax.jms.api"/>
   <module name="javax.transaction.api"/>
   <module name="org.jboss.remote-naming"/>
   <!-- we depend on org.hornetq module since we will send messages to     -->
   <!-- the HornetQ server embedded in the local AS7 instance          
   <module name="org.hornetq"/>  -->
</dependencies>

可以在IBM MQ安装中找到引用的jar文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM