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

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

花健
2023-03-14

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

因此,通过MQ Explorer,我尝试在“JMS Administed Objects”中添加初始上下文,对于所定位的JNDI命名空间,我不想使用LDAP服务器或文件系统,我选择“Other”选项(选中下面的图像),并提供com.ibm.ejs.ns.JNDI.cninitialContextFactory(我还尝试了com.ibm.websphere.naming.wsninitialContextFactory),提供的url定义为IIOP:// :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");

提前谢了。

共有1个答案

巩子实
2023-03-14

如果您想从JBoss EAP7连接到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/”目录中。

<?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>
 类似资料:
  • 我有两个集合。如果集合2中的1号和2号在集合1中指定的一定范围内,我正在尝试将集合2的文档添加到集合1中。集合1中的FYI ObjectId和集合2中的ObjectId指的是两个不同的项目/产品,因此我无法在此id上加入两个集合。 集合1中的示例文档: 集合2中的示例文档: 我想要输出: 我认为使用管道的查找阶段可以工作。我的代码当前如下: 但是运行上面的没有给我输出。我做错了什么吗??

  • 版本信息 角度:1.5.8火基:3.2.1角度:2.0.1 测试用例 预期行为 创建具有指定起点的查询。 实际行为

  • 我能够在本地实例上成功执行JMX文件,但在远程系统(从属)上执行失败。我使用的是最新版本的捷视通。这是我第二次面对这个问题。 你能告诉我这里有什么遗漏吗。我最初认为这是因为我已将脚本从“执行”中关闭,但这里并非如此。 我的脚本(JMX)有一个事务控制器(在线程组下),带有一些超文本传输协议请求。 从命令行执行的代码如下所示。当我从 Run 执行时,它的结果相同 sh Jmeter.sh -n -t

  • 问题内容: 当我尝试使用以下命令触发构建时,出现以下错误: 卷曲http:// jenkins_server:port / jenkins / job / job_name / build?token = token_name 输出: 需要验证 <-您的身份验证为:您所在的匿名 组: 权限,你需要有(但没有):hudson.model.Hudson.Read …这是暗示:hudson.securi

  • 出现问题: 通过ssh到远程服务器,我有: 节点由NVM安装。另外,我让node使用16.9.1,它没有改变任何东西。通过ssh(Login-shell)可以很好地工作。 GEMFILE: 错误 rake STDERR:纱线需要安装Node.js4.0或更高版本 我所做的一切 谢了!克里斯

  • 我在服务器上得到的日志是“user[]from host localhost not have administration access#]”,但我已经更改了管理密码并用它登录。所以我不明白为什么我的用户是空的。而且,尽管我认为这与此无关,但它说证书已经过期。