我有以下简单的消息驱动Bean:
@MessageDriven( mappedName ="jms/priceQueue")
public class PriceMessageBean implements MessageListener {
private Logger logger = Logger.getLogger(
PriceMessageBean.class.getCanonicalName());
@Override
public void onMessage(Message message) {
logger.info("Message");
try {
PriceUpdate update = (PriceUpdate) (((ObjectMessage)message).getObject());
logger.info("Size: " + update.getPreciousList().size());
} catch (JMSException jms) {
logger.info("Error: " + jms.getMessage());
}
}
}
它按预期工作。但是,第一次收到消息时,我得到以下异常。似乎weblogic正在尝试加载与EJB同名的类。如果我设置了不同的名称(使用name =" myMDB"),weblogic会尝试加载名为" myMDB"的类。关于如何避免这种异常的任何想法?
java.lang.ClassNotFoundException: PriceMessageBean
at weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:297)
at weblogic.utils.classloaders.GenericClassLoader.findClass(GenericClassLoader.java:270)
at weblogic.utils.classloaders.ChangeAwareClassLoader.findClass(ChangeAwareClassLoader.java:64)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:179)
at weblogic.utils.classloaders.ChangeAwareClassLoader.loadClass(ChangeAwareClassLoader.java:43)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:270)
at com.oracle.injection.provider.weld.WeldBeanManager.newBeanInstance(WeldBeanManager.java:116)
at com.oracle.injection.provider.weld.WeldWebWithEjbBeanManager.newBeanInstance(WeldWebWithEjbBeanManager.java:30)
at weblogic.ejb.container.injection.InjectionBasedEjbComponentCreator.getBean(InjectionBasedEjbComponentCreator.java:75)
at weblogic.ejb.container.manager.BaseEJBManager.createNewBeanInstance(BaseEJBManager.java:209)
at weblogic.ejb.container.manager.BaseEJBManager.allocateBean(BaseEJBManager.java:235)
at weblogic.ejb.container.manager.MessageDrivenManager.createBean(MessageDrivenManager.java:280)
at weblogic.ejb.container.pool.MessageDrivenPool.createBean(MessageDrivenPool.java:169)
at weblogic.ejb.container.pool.MessageDrivenPool.getBean(MessageDrivenPool.java:92)
at weblogic.ejb.container.internal.MDListener.execute(MDListener.java:553)
at weblogic.ejb.container.internal.MDListener.transactionalOnMessage(MDListener.java:488)
at weblogic.ejb.container.internal.MDListener.onMessage(MDListener.java:385)
at weblogic.jms.client.JMSSession.onMessage(JMSSession.java:4659)
at weblogic.jms.client.JMSSession.execute(JMSSession.java:4345)
at weblogic.jms.client.JMSSession.executeMessage(JMSSession.java:3821)
at weblogic.jms.client.JMSSession.access$000(JMSSession.java:115)
at weblogic.jms.client.JMSSession$UseForRunnable.run(JMSSession.java:5170)
at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:545)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)
答案 0 :(得分:1)
我遇到了同样的错误,我通过命名我的MDB与完全限定的java类相同来解决它。
在您的情况下,这意味着将平均名称更改为: com.yourpackagename.PriceMessageBean
@MessageDriven( name="com.yourpackagename.PriceMessageBean",
mappedName ="jms/priceQueue")
public class PriceMessageBean implements MessageListener {