Java 新的MQConnectionFactory()在JBoss中抛出NullPointerException

Java 新的MQConnectionFactory()在JBoss中抛出NullPointerException,java,jboss,jms,ibm-mq,Java,Jboss,Jms,Ibm Mq,我正在尝试执行以下命令: MQConnectionFactory connFactory = new MQConnectionFactory(); 我得到一个空指针异常,我似乎无法跟踪。我在下面附上了堆栈跟踪 java.lang.NullPointerException at com.ibm.msg.client.jms.internal.JmsFactoryFactoryImpl.getInstance(JmsFactoryFactoryImpl.java:169) at com.i

我正在尝试执行以下命令:

MQConnectionFactory connFactory = new MQConnectionFactory();
我得到一个空指针异常,我似乎无法跟踪。我在下面附上了堆栈跟踪

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:165)
  at com.ibm.mq.jms.MQConnectionFactory.<init>(MQConnectionFactory.java:271)
  at com.foundation.agent.plugin.JMSClient.createConnection(JMSClient.java:154)
  at com.foundation.agent.plugin.JMSClient.launch(JMSClient.java:108)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  at java.lang.reflect.Method.invoke(Method.java:597)
java.lang.NullPointerException
位于com.ibm.msg.client.jms.internal.jmsfactoryfactorympl.getInstance(jmsfactoryfactorympl.java:169)
位于com.ibm.msg.client.jms.admin.jmsconnectionfactorympl.setProviderFactory(jmsconnectionfactorympl.java:165)
位于com.ibm.mq.jms.MQConnectionFactory。(MQConnectionFactory.java:271)
在COM.Fas.Actudi.Pux.jMSCLITEN.CRATATECONNECT(JMSCLIONT.java:154)
在COM基础上。代理。插件。JMSCLITEN.EngEngt(JMSCLIONT.java:108)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)中
位于java.lang.reflect.Method.invoke(Method.java:597)
我正在使用类加载器加载调用
新MQConectionFactory()
的类,因此我怀疑某些JBoss JMS库可能导致了这种情况

更多信息:

  • com.ibm.mq.runtime_7.0.1.0\lib
罐子:

  • com.ibm.mq.headers.jar
  • com.ibm.mqjms.jar
  • jms.jar
  • com.ibm.mq.jar
  • 连接器.jar
  • jta.jar
  • com.ibm.mq.jmqi.jar
  • dhbcore.jar
  • providerutil.jar
  • com.ibm.mq.pcf.jar
  • fscontext.jar

您似乎正在使用WMQ的v7.0.1.0。您是否按照中的说明配置了类路径?假设是标准安装,运行时类路径中唯一需要的jar是com.ibm.mqjms.jar。标准安装中大约有10个JAR,我在您的列表中没有看到,因此我不确定您是否列出了CLASSPATH变量中的内容或java/lib中的内容,但这不是我在任何情况下都希望看到的列表。如果您从某处获取jar文件,请尝试使用第169行的JmsFactoryFactoryImpl反编译代码,您可以看到上面几行有跟踪输出。在我的系统上,除了与您相同的异常,system err上的跟踪输出(在我的例子中是Tomcat的catalina.out)显示了以下内容:

      WorkQueueMananger Contents
                           --------------------------

|   Maintain ThreadPool size     :-  false
|   Maximum ThreadPool size      :-  -1
|   ThreadPool inactive timeout  :-  0
|   unavailable -                :-  com.ibm.msg.client.commonservices.CSIException: JMSCS0002
使用该代码,您可以转到:

即使在添加了所有必需的jar之后,我也面临同样的问题。最后,将我的JDK从IBM JDK更改为Oracle/Sun JDK后,问题得到了解决。看起来IBM JDK(独立)没有足够的东西来创建连接工厂。

我没有尝试使用XA功能,我不确定我是否使用了资源适配器,因为我没有定义或部署和EJB。基本上,我正在jboss中启动一个线程,该线程将使用连接工厂构建连接。。。在我看来,某些jms属性导致MQConnectionfactory尝试将自己实例化为XA事务工厂,而我没有这样做的许可证,这可能是错误的。话虽如此,我不知道该怎么做,也不知道该如何克服……我只列出了我从IBM/WebSphere MQ/eclipse/plugins/com.ib.MQ.runtime_7.0.1.0/lib添加的我需要的JAR,我是否应该包括一些其他jar,这些jar可能会导致jboss默认为我想要的其他jar?从WMQ Explorer安装中获取jar可能有效,也可能无效。WMQ Explorer捆绑了它需要的特定功能,并且可能使用非公共API调用。如果你能让它在dev中以这种方式工作,那就去做吧。但是,对于生产,我只会安装响应中链接的完整WMQ客户端。这是IBM将支持的配置,包括跟踪、诊断和可用于测试安装的示例实用程序。即使您不一定需要这些,如果您打开支持事件,IBM也可能需要它们。定义连接工厂时,您可以选择要定义的类型。它可以是CF、TCF、QCF、XACF、XAQCF或XACF。如果在代码中实例化对象,这取决于API调用之前设置的环境。如果在JNDI中执行此操作,则取决于JNDI对象定义。安装完整的客户机代码并包含dev kit选项后,会有带JNDI查找和不带JNDI查找的示例程序。Rob,首先感谢您的帮助!这就是我使用JNDI的障碍,我无法通过新的MQConnectionFactory()。使用JNDI将如何绕过我不能新建它的事实?导致空指针的属性是否仍然不正确?(如果我错了,请让我知道)另外,如果您有更多的上下文,我尝试运行一个客户端,只是为了连接到托管MQ服务器的第三方,我真的还需要在任何地方进行完整安装吗?如何检查您当前使用的JDK?我很确定我使用的是Oracle/Sun JDK,因为这是我经常下载的。但是有没有办法检查呢?