2014-07-04 5 views
0

에서 호출됩니다ClassNotFoundException가 처음 메시지는 내가 다음과 같은 간단한 메시지 콩을 구동 한 웹 로직

@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) 

답변

1

동일한 오류가 발생하여 내 정규화 된 Java 클래스와 동일한 MDB 이름을 지정하여 해결했습니다. com.yourpackagename.PriceMessageBean 귀하의 제안에 대한

@MessageDriven(name="com.yourpackagename.PriceMessageBean", 
       mappedName ="jms/priceQueue") 
public class PriceMessageBean implements MessageListener { 
+0

감사합니다 : 귀하의 경우

,이에 평균 이름을 변경하는 것을 의미한다. 이 작업을 수행하는 더 좋은 방법이 있어야하지만 솔루션이 작동하는 것 같습니다. –