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

如果qmanager JNDI是在多个tomcat context.xml中定义的,MQ JNDI异常

祖波光
2023-03-14

我在同一个tomcat JVM中部署了两个应用程序。每个应用程序都有自己的context.xml:-app1.xml-app2.xml在每个app*.xml中,我定义了MQ jndi资源:

<!-- JMS configuration FOR MQSeries - The connection factory -->
 <Resource
      name="jms/JMSQueueConnectionFactory"
      auth="Container"
      type="com.ibm.mq.jms.MQQueueConnectionFactory"
      factory="com.ibm.mq.jms.MQQueueConnectionFactoryFactory"
      description="JMS Queue Connection Factory for sending messages"
      CCDTURL="file:///apps/mqm_opt/creds/AMQCLCHL_XA.TAB"
      QMGR="***Example***QM01***Example***" UCP="Y"/>

在我的任何战争中,我都没有MQ或jms JAR。它们位于MQ客户端安装中。然后,我使用catalina.properties的shared.loader在类路径中添加了:

shared.loader=${catalina.home}/shared/*.jar,/opt/mqm/java/lib/*.jar

当单独部署时,每个应用程序都很好。但是,当它们一起部署在同一个jvm中时,在其中一个应用程序启动时,我会得到一个空指针:

Jul 29, 2015 6:15:14 PM org.apache.naming.NamingContext lookup
WARNING: Unexpected exception resolving reference
java.lang.NullPointerException
        at com.ibm.msg.client.jms.internal.JmsFactoryFactoryImpl.getInstance(JmsFactoryFactoryImpl.java:169)
        at com.ibm.msg.client.jms.admin.JmsConnectionFactoryImpl.setProviderFactory(JmsConnectionFactoryImpl.java:176)
        at com.ibm.mq.jms.MQConnectionFactory.<init>(MQConnectionFactory.java:286)
        at com.ibm.mq.jms.MQQueueConnectionFactory.<init>(MQQueueConnectionFactory.java:76)
        at com.ibm.mq.jms.MQQueueConnectionFactoryFactory.getObjectInstance(MQQueueConnectionFactoryFactory.java:73)
        at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:141)
        at javax.naming.spi.NamingManager.getObjectInstance(Unknown Source)
        at org.apache.naming.NamingContext.lookup(NamingContext.java:842)
        at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
        at org.apache.naming.NamingContext.lookup(NamingContext.java:830)
        at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
        at org.apache.naming.NamingContext.lookup(NamingContext.java:830)
        at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
        at org.apache.naming.NamingContext.lookup(NamingContext.java:830)
        at org.apache.naming.NamingContext.lookup(NamingContext.java:167)
        at org.apache.naming.SelectorContext.lookup(SelectorContext.java:156)
        at javax.naming.InitialContext.lookup(Unknown Source)
        at org.springframework.jndi.JndiTemplate$1.doInContext(JndiTemplate.java:154)
        at org.springframework.jndi.JndiTemplate.execute(JndiTemplate.java:87)
        at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:152)
        at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:178)
        at org.springframework.jndi.JndiLocatorSupport.lookup(JndiLocatorSupport.java:95)
        at org.springframework.jndi.JndiObjectLocator.lookup(JndiObjectLocator.java:105)
        at org.springframework.jndi.JndiObjectFactoryBean.lookupWithFallback(JndiObjectFactoryBean.java:201)
        at org.springframework.jndi.JndiObjectFactoryBean.afterPropertiesSet(JndiObjectFactoryBean.java:187)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1545)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1483)

共有1个答案

太叔天宇
2023-03-14

根据http://TomCat.apache.org/TomCat-8.0-doc/jndi-resources-howto.html#using_resources中的说明,我建议TomCat中的资源应该遵循以下内容。

<Resource name="jms/MyJMSCF" auth="Container"
          type="com.ibm.mq.jms.MQConnectionFactory"
          factory="org.apache.naming.factory.BeanFactory"
          hostName="my.host.name"
          transportType="1"/>  <!-- 1 means client mode -->

MQConnectionFactory应该是兼容的bean样式的对象;有很多配置选项-完整的JavaDoc是http://www-01.ibm.com/support/knowledgecenter/api/content/ssfksj_8.0.0/com.ibm.mq.JavaDoc.doc/wmqjmsclasses/com/ibm/mq/jms/mqconnectionfactory.html

MQQueueConnectionFactoryFactory对象仅由JNDI使用,通过javax.naming.Referencable接口重新膨胀对象存储。

 类似资料:
  • 我有一个tomcat应用服务器,我的DB连接是在上下文中定义的。xml并以JNDI的形式获取数据源。 而不是在上下文中硬编码用户名和密码。xml。我想在aws secret manager中存储db凭据,并使用从aws secret manager检索到的db凭据创建数据源。 为此,我创建了以下自定义ComboPooledDataSource类。 之后,我根据上面的实现创建了一个jar文件,并将其

  • 我是相当新的JNI善良,所以请告诉我,如果我是愚蠢的。 我试图将一个自定义异常从C扔到Java层,该层由字符串和整数构成。我无法让ThrowNew()工作,因为它只需要一个字符串参数。我能找到的每个自定义异常的例子都使用ThrowNew()!!Grrrrr 我猜我需要构造一个,并用“扔(jthrowable obj)”扔出去,但我不确定...这和“扔新()”一样吗?? 例如,这就是我需要的: 如果

  • 我需要在我的数据库中创建多个多对多的关系。 有一个“主”表,我们称之为“项目”。 然后有3个表包含“选项”。 假设我们有:品类、地域、用户。这些保存的唯一信息是项目的名称和ID。 可以将多个类别、区域和用户分配给多个项目。 因此,我有两个选项来创建这种关系: 1)为每个'选项'表创建关系表。每个表包含两列:project_id和category_id、region_id或user_id。使用这种方

  • 问题内容: jQuery是否有任何语法方法来定义多个CSS属性,而无需像这样将所有内容都放在右边: 如果您有20条这样的代码,那么您将很难阅读,有什么解决方案吗? 例如,通过jQuery API,jQuery可以理解并返回正确的值 和 请注意,对于DOM表示法,属性名称周围的引号是 可选的 ,但对于CSS表示法,由于名称中的连字符,因此 必须 使用引号。 问题答案: 即使您有1个或更多,也最好只使

  • 在我的webflux应用程序中,我想通过WebClient发送一些请求。我想处理所有条件(200、401、403和...response ),然后向客户端响应一个json。对于错误状态代码,我想使用@RestControllerAdvice,所以我必须抛出一个自定义异常,然后在控制器建议中处理自定义json。参见示例代码: 现在异常处理程序如下: Webclient获得一个包含json主体的401

  • 本文向大家介绍如果hashMap的key是一个自定义的类,怎么办?相关面试题,主要包含被问及如果hashMap的key是一个自定义的类,怎么办?时的应答技巧和注意事项,需要的朋友参考一下 考点:集合 使用HashMap,如果key是自定义的类,就必须重写hashcode()和equals()。