2017-02-11 22 views
2

私たちはIBM MQ8にアップグレードしており、プロジェクトには以下の依存関係があります。それはクラスパスにjarファイルを提供するのにもかかわらず、NoDefFoundErrorを与えている、メインプログラムを実行中に次の依存関係は、しかしNoClassDefFoundErrorクラスcom.ibm.mq.headers.internal.HeaderTypeを初期化できませんでした

com.ibm.disthub2.dhbcore 
com.ibm.mq.jmqi 
com.ibm.mqjms 
ibm-jaxrpc-client 
com.ibm.mq 
com.ibm.mq.headers 
com.ibm.mq.pcf 
com.ibm.mq.commonservices 

が存在します。

Caused by: java.lang.NoClassDefFoundError: Could not initialize class com.ibm.mq.headers.internal.HeaderType 
     at com.ibm.mq.headers.pcf.PCFMessage.<init>(PCFMessage.java:77) ~[com.ibm.mq.headers-7.5.0.6.jar:7.5.0.6 - p750-006-160226] 
     at com.ibm.mq.headers.pcf.PCFMessage.<init>(PCFMessage.java:132) ~[com.ibm.mq.headers-7.5.0.6.jar:7.5.0.6 - p750-006-160226] 
     at com.ibm.mq.ese.service.PolicyServiceImpl.policyFromPcf(PolicyServiceImpl.java:575) ~[com.ibm.mq.jmqi-7.5.0.6.jar:7.5.0.6 - p750-006-160226] 
     at com.ibm.mq.ese.intercept.JmqiOpenInterceptorImpl.storeSecurityInfoInSmqiObject(JmqiOpenInterceptorImpl.java:359) ~[com.ibm.mq.jmqi-7.5.0.6.jar:7.5.0.6 - p750-006-160226] 
     at com.ibm.mq.ese.intercept.JmqiOpenInterceptorImpl.readPolicyIfAvailable(JmqiOpenInterceptorImpl.java:321) ~[com.ibm.mq.jmqi-7.5.0.6.jar:7.5.0.6 - p750-006-160226] 
     at com.ibm.mq.ese.intercept.JmqiOpenInterceptorImpl.afterSpiOpen(JmqiOpenInterceptorImpl.java:203) ~[com.ibm.mq.jmqi-7.5.0.6.jar:7.5.0.6 - p750-006-160226] 
     at com.ibm.mq.ese.jmqi.InterceptedJmqiImpl.spiOpen(InterceptedJmqiImpl.java:411) ~[com.ibm.mq.jmqi-7.5.0.6.jar:7.5.0.6 - p750-006-160226] 
     at com.ibm.mq.ese.jmqi.ESEJMQI.spiOpen(ESEJMQI.java:513) ~[com.ibm.mq.jmqi-7.5.0.6.jar:7.5.0.6 - p750-006-160226] 
     at com.ibm.msg.client.wmq.internal.WMQMessageProducer$SpiIdentifiedProducerShadow.initialise(WMQMessageProducer.java:762) ~[com.ibm.mqjms-7.5.0.6.jar:7.5.0.6 - p750-006-160226] 
     at com.ibm.msg.client.wmq.internal.WMQMessageProducer.<init>(WMQMessageProducer.java:995) ~[com.ibm.mqjms-7.5.0.6.jar:7.5.0.6 - p750-006-160226] 
     at com.ibm.msg.client.wmq.internal.WMQSession.createProducer(WMQSession.java:889) ~[com.ibm.mqjms-7.5.0.6.jar:7.5.0.6 - p750-006-160226] 
     at com.ibm.msg.client.jms.internal.JmsSessionImpl.createProducer(JmsSessionImpl.java:1232) ~[com.ibm.mqjms-7.5.0.6.jar:7.5.0.6 - p750-006-160226] 
     at com.ibm.msg.client.jms.internal.JmsQueueSessionImpl.createSender(JmsQueueSessionImpl.java:136) ~[com.ibm.mqjms-7.5.0.6.jar:7.5.0.6 - p750-006-160226] 
     at com.ibm.mq.jms.MQQueueSession.createSender(MQQueueSession.java:153) ~[com.ibm.mqjms-7.5.0.6.jar:7.5.0.6 - p750-006-160226] 
     at com.ibm.mq.jms.MQQueueSession.createProducer(MQQueueSession.java:254) ~[com.ibm.mqjms-7.5.0.6.jar:7.5.0.6 - p750-006-160226] 
     at org.springframework.jms.core.JmsTemplate.doCreateProducer(JmsTemplate.java:1114) ~[spring-jms-4.3.4.RELEASE.jar:4.3.4.RELEASE] 
     at org.springframework.jms.core.JmsTemplate.createProducer(JmsTemplate.java:1095) ~[spring-jms-4.3.4.RELEASE.jar:4.3.4.RELEASE] 
     at org.apache.camel.component.jms.JmsConfiguration$CamelJmsTemplate.doSendToDestination(JmsConfiguration.java:482) ~[camel-jms-2.17.0.jar:2.17.0] 
     at org.apache.camel.component.jms.JmsConfiguration$CamelJmsTemplate.access$100(JmsConfiguration.java:428) ~[camel-jms-2.17.0.jar:2.17.0] 
     at org.apache.camel.component.jms.JmsConfiguration$CamelJmsTemplate$1.doInJms(JmsConfiguration.java:442) ~[camel-jms-2.17.0.jar:2.17.0] 
     at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:484) ~[spring-jms-4.3.4.RELEASE.jar:4.3.4.RELEASE] 
+0

NoClassDefFoundErrorがClassNotFoundExceptionと全く同じではないことに注意してください。 HeaderTypeクラスの正しい初期化を中断した前の例外またはエラーがあったとします。これはクラスパスの問題かもしれないし、まったく別のものかもしれない。 JoshMCによると、allclient.jarはより良い選択肢です。 Spring + Camelを使用している場合、クラスローディングはJavaSEアプリケーションとは異なる可能性があります。 – Calanais

+0

その最後のコメントを思いつくために、ログファイルの "clinit"を検索することをお勧めします。 "クラスを初期化できませんでした"というメッセージは、クラスが静的な初期化に失敗したことを示しているため、HeaderTypeの例外がある可能性があります。スタックトレースの。 – Jarid

答えて

2
  1. あなたはV8または両方にV8にMQサーバーまたはMQクライアントをアップグレードしましたか?
  2. 同じマシンで実行していますか?
  3. スタックトレースは、すべてのjarファイルの文字列が7.5.0.6という文字列を含むように変更されたことを示します。この文字列は、MQ v7.5.0.6 MQクライアントインストールのものであることを示します。 IBMは、v8.0より前の標準インストール場所からjarファイルを移動することはサポートしていません。
  4. MQ v8.0以降では、IBMはどこにでも配置できるJavaのみのインストールを提供しています。
  5. MQ v8.0以降では、フル・クライアントまたはサーバー・インストールのファイルcom.ibm.mq.allclient.jarおよびcom.ibm.mq.traceControl.jarを同じエンタープライズ内の他のサーバーおよび場所に再配置することもできます。上記のファイルには、以前は別々のクラスjarファイル。

名前から7.5.0.6にすべてのjarファイルを削除するとMQ V8.0とIBMが提供する2つのJARファイルに固執することをお勧めされるだろう。

OP @ IMahajanには、Spring、Camel、JavaおよびJMSを含むすべての関連するJARがアップグレードされました。

0

入力いただきありがとうございます。私は解像度が瓶のバージョンであることを発見しました。私はV8にcom.ibm.mq.headersの上位バージョン(HeaderType.Classを含む)を提供し、それをクラスパスに提供しました。出来た。私はmq8がv7.5.0.6と互換性がないと思う。違うと感じたら更新してください。

+0

7.5.0.6のすべてのファイルを削除し、v8を追加しました。 [ナ:1.8.0_92]〜java.lang.Class.getDeclaredConstructors0(ネイティブメソッド)でのjavax/JMS/JMSRuntimeException : によって引き起こさ:java.langでjava.lang.NoClassDefFoundErrorが:しかし、今、そのはに起因する」 を与えます。 ClassNotFoundException:javax.jms.JMSRuntimeException java.net.URLClassLoader.findClass(URLClassLoader.java:381)〜[na:1.8.0_92] at java.lang.ClassLoader.loadClass(ClassLoader.java:424)〜[na :1.8.0_92] at " – IMahajan

+0

ありがとう、私はそれを働かせました。あなたの推薦によると、私は他のすべての瓶を取り除き、それはまた、それがうまくいっているJMSアップグレードを必要としました – IMahajan

+0

はい、それは春とラクダでした。それは春、ラクダ、Javaアップグレード、それゆえJMSを含むすべての関連jarでした。私はあなたの答えにすでに投票しています – IMahajan

関連する問題