Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何绕过karaf中的默认aries jndi查找_Java_Osgi_Ibm Mq_Apache Karaf_Apache Servicemix - Fatal编程技术网

Java 如何绕过karaf中的默认aries jndi查找

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

我试图在代码中查找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,pJndiLDAPserver);
ctx=新的初始上下文(jndiContext);
ConnectionFactory lResult=(ConnectionFactory)ctx.lookup(pJndiCFname);
我面临的问题是-

  • 当我执行ctx.lookup(“xyz”)时,它会给我一个javax.naming.Reference对象,而不是MQconnectionFactory。(与独立的java应用程序一样,同样的代码工作得非常好)
  • 另外,ctx=newinitialcontext(jndiContext)为我提供了一个InitialContext对象,其defaultInitContext为- org.apache.aries.jndi.DelegateContext。理想情况下,它应该将defaultInitiContext作为LdapCtx提供给我(因为我的提供者url是Ldap服务器)
  • 我的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>
    
    
    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>