Java 如何绕过karaf中的默认aries jndi查找
我试图在代码中查找connectionFactory,该代码作为servicemix(karaf)中osgi包的一部分部署Java 如何绕过karaf中的默认aries jndi查找,java,osgi,ibm-mq,apache-karaf,apache-servicemix,Java,Osgi,Ibm Mq,Apache Karaf,Apache Servicemix,我试图在代码中查找connectionFactory,该代码作为servicemix(karaf)中osgi包的一部分部署 final Hashtable jndiContext=new Hashtable(); put(Context.INITIAL_Context_工厂,“com.sun.jndi.ldap.LdapCtxFactory”); jndiContext.put(Context.SECURITY_身份验证,“无”); put(Context.PROVIDER_URL,pJndiL
final Hashtable jndiContext=new Hashtable();
put(Context.INITIAL_Context_工厂,“com.sun.jndi.ldap.LdapCtxFactory”);
jndiContext.put(Context.SECURITY_身份验证,“无”);
put(Context.PROVIDER_URL,pJndiLDAPserver);
ctx=新的初始上下文(jndiContext);
ConnectionFactory lResult=(ConnectionFactory)ctx.lookup(pJndiCFname);
我面临的问题是-
<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>
javax.jms
javax.jms-api
2
com.ibm.mq.osgi
JAVA
9.0.0.0
com.ibm.msg.client.osgi.jms
预请求
9.0.0.0
com.ibm.msg.client.osgi
jms
9.0.0.0
com.ibm.msg.client.osgi.commonservices
j2se
9.0.0.0
com.ibm.mq.osgi
所有客户
9.0.0.0
com.ibm.mq.osgi
allclientprereqs
9.0.0.0
com.ibm.msg.client.osgi
免入息审查
9.0.0.0
com.ibm.msg.client.osgi.wmq
免入息审查
9.0.0.0
com.ibm.msg.client.osgi.wmq
预请求
9.0.0.0
com.ibm.msg.client.osgi
wmq
9.0.0.0
com.csg.npms.pilatus
普通皮拉图斯
0.1-1快照
假如
org.ops4j.pax.logging
pax日志api
1.8.5
假如
org.osgi
org.osgi.core
4.3.1
假如
javax.ws.rs
javax.ws.rs-api
2.0-m09
假如
com.fasterxml.jackson.core
杰克逊数据绑定
2.1.4
假如
同样的com.ibm依赖项已作为karaf捆绑包的一部分安装
因此,关于第2点,我如何绕过Karaf(org.apache.aries.jndi.DelegateContext)中的默认jndi aries查找,以便它为我提供LdapContextFactory对象而不是DelegateContext。我是否缺少任何JAR作为karaf中mq的一部分。这是错误的关键部分:
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.apache.qpid.jms.client
的包无法解析,因为它导入包javax.jms
,但没有其他包导出包javax.jms
。在OSGi中,每个导入都必须与该包的导出相匹配。此外还有一个版本限制:您需要版本[1.1.0,2.0.0)
,即至少1.1.0但小于2.0.0
我建议使用Maven Central提供的以下捆绑包:。虽然我不知道如何绕过karaf中的默认jndi查找,但我自己目前正在努力解决这一问题,试图找出如何让它使用我需要的初始上下文工厂,但我能够通过实例化它使MQ连接工厂正常工作直接通过蓝图中的bean,然后您可以将其命名并从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应用程序中获得连接工厂的一种快速方法。您在karaf中安装了哪些功能?错误表明您尚未安装jms api。通常,此api是在您安装类似ActiveMQ的jms客户端时安装的。@rollstuhlfahrer“需要编辑”…你能帮OP指出正确的方向吗?你能自己改变它吗?(附言:不需要回复我,因为我甚至不是这个话题的初学者)@ChristianSchneider-我已经在karaf中安装了jndi和jms功能。主要问题是osgi捆绑包无法在其路径上找到ibm mq和javax类。ibm mq可能有点难以工作。上次尝试时我花了不少精力。我读到ibm在某个时候开始生产捆绑包。所以我希望它更容易不w但我没有更新的经验。嗨,尼尔……您提到的上述maven捆绑包解决了这个版本错误,但是它找不到任何ibm mq jar。例如,MQConnectionFactory mq=new MQConnectionFactory()现在提供了(一些java链接)异常。我面临的问题是这些javax jms和ibm mq JAR如何与osgi捆绑包集成。如果osgi能够正确找到这些JAR和类,它将永远不会在查找连接工厂时返回我引用对象查看此链接。即使这样也没有帮助!:(有人了解karaf和mq jars集成吗?需要紧急帮助!!我已经编辑了这个问题。有人可以帮忙吗。
<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>