写下一些配置过程遇到的问题 (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); //退出后再恢复成原来的类加载器
}