[英]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.