jsf2+spring3+jpa 在jboss 6.1.0上的JMS配置遇到的問題(採用jboss hornetq訊息中介軟體)

ab1355531發表於2012-03-19

寫下一些配置過程遇到的問題 (application.xml裡怎麼配置什麼的網上很多,就不寫了)



<jee:jndi-lookup id="jmsConnectionFactory" jndi-name="java:ConnectionFactory"></jee:jndi-lookup>


遇到"ConnectionFactory not bound"的錯誤,可是在jboss jmx-console上檢視jndi name 是有ConnectionFactory,說明有bound的


解決辦法:把伺服器的deployment設定為 user workspace metadata,而不是jboss deploy folder

(斯認為是部署的順序不同導致的,放在jboss deploy folder(在jboss 6.10下是\${JBOSS_HOME}\server\default\deploy),部署application.xml的時候可能connectionfactory還沒有bound,而程式部署在use workspace metadata時,是先部署完jboss伺服器的一些東西,再部署程式的.還未研究jboss啟動過程部署的順序,有了解的同學希望解答)


自己定義了一個存放訊息的類Msg

訊息實體採用ObjectMessage

傳送訊息objectMessage.setObjcet(msg)的時候沒有問題,傳送成功

但在訊息監聽器onMessage()收到訊息的時候呼叫ObjectMessage.getObjce()方法的時候報  "class not found :packageName.Msg "之類的錯誤,百度google好像是jboss horneqt 自帶的類載入器的問題


解決辦法:

ClassLoader originalTCCL = Thread.currentThread().getContextClassLoader();  
Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader()); //設定類載入器為當前的類載入器
try {
if(message instanceof ObjectMessage)
{
msg=(ChatMessage) ((ObjectMessage) message).getObject();
//處理msg

}
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
Thread.currentThread().setContextClassLoader(originalTCCL);  //退出後再恢復成原來的類載入器
}



相關文章