2012-09-13 139 views
3

在配置MQ連接工廠後出現低於錯誤的錯誤。WebSphere MQ配置問題

java.lang.ClassCastException:com.ibm.ejs.jms.JMSQueueConnectionFactoryHandle與com.ibm.mq.jms.MQQueueConnectionFactory

我的代碼段不相容在異常指向:

String queueConnectionJndi = props.getProperty(queueConnection + MQ_CONN); queueConnectionFactory = MQQueueConnectionFactory)initialContext.lookup(queueConnectionJndi);

我無法找出其根本原因。

任何機構請幫助我,在此先感謝。

+0

此鏈接是否有幫助:http://www-01.ibm.com/support/docview.wss?uid = swg21238470 – Shashi

+0

@Shashi:我試過使用這種方法,但我仍然有同樣的錯誤。 – srini

回答

0

這是使用MQ罐子和用我的應用程序是不同的,所以這個問題發生。當我糾正類路徑它解決了。對不起,感謝您的幫助。

+0

通過從ActiveMQ依賴關係中排除* geronimo * jar解決了類似問題。 –

+0

@srini:你能告訴我哪裏可以找到MQ的這些WAS罐子。 WAS中有很多jar文件,我很困惑。你能幫我解決嗎? – Som

1

沒有辦法,沒有更多的情況下是肯定的,但它看起來像這樣的方法調用:

initialContext.lookup(queueConnectionJndi); 

將返回類型com.ibm.ejs.jms.JMSQueueConnectionFactoryHandle的對象不能轉換爲com.ibm.mq.jms.MQQueueConnectionFactory。

你能提供更多的上下文嗎?

0

這個Post on old nabble聽起來像一個類似的問題,可能會幫助你。

具體而言,最終答覆將討論刪除可能位於您部署的WAR中的任何jms.jar文件。檢查你的WEB-INF/lib。某些罐子由Websphre容器提供,不應將它們包含在WAR中。

Post on the spring fourm也表明這種性質造成包含在類路徑罐子的問題是不應該存在

刪除下列任​​何一項,如果你發現他們...

naming.jar 
providerutil.jar 
jndi.jar 
jms.jar 
mq.jar 
websphere.jar 
+0

我也試過這個,但仍然出現錯誤 – srini

+0

您的可部署EAR有多複雜?它是否包含多個JAR和WAR,或者只包含一個WAR文件? – Brad

+0

它包含多個JAR和WAR – srini

0

你能重寫代碼以使用JMS標準(ConnectionFactoryQueueConnectionFactory)而不是Websphere MQ特定的實現類?這樣,你就不會被捆綁您的應用程序WebSphere MQ和它移植到其他MQ實現會更容易些......

import javax.jms.QueueConnectionFactory; 
... 

queueConnectionFactory = (QueueConnectionFactory)initialContext.lookup(jndiName); 
+0

我已經試過這個,但在這種情況下,我得到了一些其他異常,如名稱未找到。 – srini

+0

您使用的名稱是什麼,並且您是否通過web.xml引用它? – beny23

0

我經歷了很多嘗試和錯誤找到答案(至少我的問題的答案)。我希望這個解決方案也能解決你的問題。正如從另一篇文章中提到的,不包括jms庫的作品。但是,如何排除jms庫並仍然能夠編譯代碼?這似乎沒有人提到過。解決方案是讓jms庫的範圍「提供」(如果您使用的是Maven或Gradle)。作爲地方提到

「前提是你需要編譯JAR手段,但在運行時已經有一個由環境所提供的,所以你不需要它與你的應用程序打包的一罈。 web應用程序,這意味着JAR文件不會被放入WEB-INF/lib目錄中。「

所以在你的pom.xml添加/更新這些:

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-jms</artifactId> 
    <version>4.3.4.RELEASE</version> 
    <exclusions> 
     <exclusion> 
      <groupId>javax.jms</groupId> 
      <artifactId>javax.jms-api</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 

<dependency> 
    <groupId>javax.jms</groupId> 
    <artifactId>jms</artifactId> 
    <version>1.1</version> 
    <scope>provided</scope> 
</dependency> 

希望這可以幫助那些誰已經受挫,缺乏從互聯網的答案。

刪除所有ibm庫。他們沒用。一旦你部署到Websphere上,它將使用它的庫。