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

如何在karaf中绕过默认ARIS jndi查找

章学义
2023-03-14

我试图查找一个连接工厂在一个代码,部署为osgi捆绑在servicemix(karaf)的一部分

final Hashtable<String, Object> jndiContext = new Hashtable<String, Object>();
jndiContext.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
jndiContext.put(Context.SECURITY_AUTHENTICATION, "none");
jndiContext.put(Context.PROVIDER_URL, pJndiLDAPserver);
ctx = new InitialContext(jndiContext);
ConnectionFactory lResult = (ConnectionFactory) ctx.lookup(pJndiCFname);

我面临的问题是-

  1. 当我做ctx的时候。lookup(“xyz”)-它给了我一个javax对象。命名。引用而不是MQconnectionFactory。(与独立的java应用程序一样,同样的代码也可以很好地工作)

我的pom中有以下依赖项。xml-

    <dependency>
        <groupId>javax.jms</groupId>
        <artifactId>javax.jms-api</artifactId>
        <version>2.0</version>
    </dependency>
    <dependency>
        <groupId>com.ibm.mq.osgi</groupId>
        <artifactId>java</artifactId>
        <version>9.0.0.0</version>
    </dependency>
    <dependency>
        <groupId>com.ibm.msg.client.osgi.jms</groupId>
        <artifactId>prereq</artifactId>
        <version>9.0.0.0</version>
    </dependency>
    <dependency>
        <groupId>com.ibm.msg.client.osgi</groupId>
        <artifactId>jms</artifactId>
        <version>9.0.0.0</version>
    </dependency>
    <dependency>
        <groupId>com.ibm.msg.client.osgi.commonservices</groupId>
        <artifactId>j2se</artifactId>
        <version>9.0.0.0</version>
    </dependency>
    <dependency>
        <groupId>com.ibm.mq.osgi</groupId>
        <artifactId>allclient</artifactId>
        <version>9.0.0.0</version>
    </dependency>
    <dependency>
        <groupId>com.ibm.mq.osgi</groupId>
        <artifactId>allclientprereqs</artifactId>
        <version>9.0.0.0</version>
    </dependency>
    <dependency>
        <groupId>com.ibm.msg.client.osgi</groupId>
        <artifactId>nls</artifactId>
        <version>9.0.0.0</version>
    </dependency>
    <dependency>
        <groupId>com.ibm.msg.client.osgi.wmq</groupId>
        <artifactId>nls</artifactId>
        <version>9.0.0.0</version>
    </dependency>
    <dependency>
        <groupId>com.ibm.msg.client.osgi.wmq</groupId>
        <artifactId>prereq</artifactId>
        <version>9.0.0.0</version>
    </dependency>
    <dependency>
        <groupId>com.ibm.msg.client.osgi</groupId>
        <artifactId>wmq</artifactId>
        <version>9.0.0.0</version>
    </dependency> 
    <dependency>
        <groupId>com.csg.npms.pilatus</groupId>
        <artifactId>pilatus-common</artifactId>
        <version>0.1-SNAPSHOT</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.ops4j.pax.logging</groupId>
        <artifactId>pax-logging-api</artifactId>
        <version>1.8.5</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.osgi</groupId>
        <artifactId>org.osgi.core</artifactId>
        <version>4.3.1</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.ws.rs</groupId>
        <artifactId>javax.ws.rs-api</artifactId>
        <version>2.0-m09</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.1.4</version>
        <scope>provided</scope>
    </dependency>

同样的com。ibm dependency已作为karaf捆绑包的一部分安装。

因此,关于第2点,我如何绕过Karaf(org.apache.aries.jndi.DelegateContext)中的默认jndi aries查找,从而为我提供LdapContextFactory对象,而不是DelegateContext。我是否错过了卡拉夫mq中的任何罐子。

共有2个答案

颜高朗
2023-03-14

虽然我不知道如何绕过karaf中的默认jndi查找,这是我目前正在努力解决的问题,我试图找出如何让它使用我需要的初始上下文工厂,但我能够通过蓝图中的bean直接实例化MQ连接工厂,从而使其工作,然后,您可以将其命名,并将其作为一个普通服务从jndi引用,如下所示:

 <bean id="wmqcf"  class="com.ibm.mq.jms.MQQueueConnectionFactory">
     <property name="hostname" value="my.host">
     ...port, channel, queue manager, etc ...
</bean>

<service interface="javax.jms.ConnectionFactory" ref="wmqcf">
    <service-properties>
       <entry key="osgi.jndi.service.name" value="jms/wmqcf">
    </service-properties>
</srevice>

这样,您就不需要担心任何网桥、池等问题。这是在wmq应用程序中获得连接工厂的一种快速方法

佟和平
2023-03-14

这是错误的关键部分:

Unresolved requirements: [[org.apache.qpid.jms.client [464](R 464.8)] osgi.wiring.package; (&(osgi.wiring.package=javax.jms (version>=1.1.0)(!(version>=2.0.0)))

这表示包名为org。阿帕奇。qpid。jms。无法解析客户端,因为它导入了包javax。jms但是没有其他包导出这个包javax。jms。在OSGi中,每个导入都必须与该包的导出相匹配。此外还有一个版本限制:您需要版本[1.1.0,2.0.0),即至少1.1.0但小于2.0.0。

我建议使用Maven Central的以下捆绑包:https://search.maven.org/#artifactdetails|组织。jboss。spec.javax。jms | jboss-jms-api|1.1|1.0.1。最后的|罐子。

 类似资料:
  • 例如: 是否有一种方法可以指定默认情况下总是添加的所有条件,而不在代码本身中提及它?在Hibernate core中有一个注释,但它不能用于mongo文档。

  • 问题内容: 显而易见的答案是使用,但是我们最近发现这可能不是正确的答案。有人告诉我,结果在某些情况下不同于java.io类使用的实际默认字符集。看起来Java保留了2套默认字符集。有人对这个问题有见解吗? 我们能够重现一个失败案例。这是一种用户错误,但仍可能会暴露所有其他问题的根本原因。这是代码, 我们的服务器要求使用Latin-1中的默认字符集来处理传统协议中的某些混合编码(ANSI / Lat

  • 问题内容: 用例:有一个发布为https:// abcd / zz?wsdl 的Web服务 我想做的就是查询此URI,如果我收到一个有效的WSDL,则返回一个布尔值“ true”,否则返回“ false”。现在,如果我通过Chrome浏览器访问此URL,则必须手动执行一个接受证书警告上,然后下载WSDL。但是如何通过Java / HttpsURLConnection做到这一点 我得到一个错误: 线

  • 我正试图用bde2020提供的图像构建一个轻量级的最小hadoop堆栈(学习目的)。现在,堆栈包括(除其他外) 名称节点 基本上,我从大数据欧洲官方docker撰写开始,并根据他们的留档添加了色调图像 色调的文件浏览器无法访问HDFS: 将所有服务显式放到同一网络上 当我登录到hue的容器时,我可以看到namenode的端口9870是打开的()。50070不是。我认为我的问题与网络无关。尽管编辑了

  • 问题内容: 我修改了一个表格,以这种方式向其中添加状态列 但是,对于创建的任何新ITEM,SQLite似乎都不会将N添加到该列中。语法是否错误,或者SQLite及其对默认值的支持是否存在任何问题。 我正在使用SQLite 3.6.22 问题答案: 对我来说看上去很好。 这是文档。 转储您的模式,并 在调用ALTER TABLE之后但在INSERT之前 验证 表结构是否存在。如果它在事务中,请 确保

  • 我对ActiveMQ非常陌生,希望能在设置tomEE的默认内部ActiveMQ代理方面提供一些帮助。具体来说,任何一本书的样本。xml将非常有用。