2017-05-11 57 views
1

從WAS 7.0遷移到WAS Liberty Base時遇到問題。我在WAS Liberty Base中部署了EAR文件。將JMS Messaging中的mdb-3.2添加到server.xml時,EJB MDB Bean上出現以下運行時錯誤。WAS Liberty - EJB - bean沒有不帶參數的公共構造函數&java.lang.NoClassDefFoundError

[ERROR ] CNTR5007E: The com.companyname.appname.AdminMDBBean bean class for the AppEAR#AppEJB.jar#AdminMDBBean bean does not have a public constructor that does not take parameters. 
[ERROR ] CNTR4002E: The AppEJB.jar EJB module in the AppEAR application failed to start. Exception: com.ibm.ws.exception.RuntimeError: com.ibm.ejs.container.EJBConfigurationException: EJB class com.companyname.appname.AdminMDBBean must have a public constructor that takes no parameters : AppEAR#AppEJB.jar#AdminMDBBean 
    at com.ibm.ws.ejbcontainer.runtime.AbstractEJBRuntime.startModule(AbstractEJBRuntime.java:641) 
    at [internal classes] 
Caused by: com.ibm.ejs.container.EJBConfigurationException: EJB class com.companyname.appname.AdminMDBBean must have a public constructor that takes no parameters : AppEAR#AppEJB.jar#AdminMDBBean 
    at com.ibm.ws.ejbcontainer.jitdeploy.EJBUtils.validateEjbClass(EJBUtils.java:350) 
    ... 1 more 
Caused by: java.lang.NoClassDefFoundError: com.companyname.appname.domain.HealthMonitorMessage 
    at java.lang.J9VMInternals.prepareClassImpl(Native Method) 
    at java.lang.J9VMInternals.prepare(J9VMInternals.java:291) 
    at java.lang.Class.getConstructor(Class.java:531) 
    at com.ibm.ws.ejbcontainer.jitdeploy.EJBUtils.validateEjbClass(EJBUtils.java:341) 
    ... 1 more 

server.xml中

<server description="new server"> 
    <featureManager> 
     <feature>jsp-2.3</feature> 
     <feature>adminCenter-1.0</feature> 
     <feature>jdbc-4.1</feature> 
     <feature>jndi-1.0</feature> 
     <feature>wasJmsServer-1.0</feature> 
     <feature>wasJmsClient-2.0</feature> 
     <feature>mdb-3.2</feature> 
    </featureManager> 

AdminMDBBean.Java

@MessageDriven(name = "AdminMDBBean", activationConfig = { @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue") }) 
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) 
public class AdminMDBBean implements MessageListener { 
    private Logger logger; 
    public AdminMDBBean() 
    { 
     logger = Logger.getLogger(this.getClass().getName()); 
    } 

    /** 
    * Method to receive and process the messages from the queue. 
    */ 

public void onMessage(Message message) {....} 
+0

看來你已經從你的'AdminMDBBean'中編輯了一些相關的信息。堆棧跟蹤指出根本原因是無法找到類com.companyname.appname.domain.HealthMonitorMessage。 「AdminMDBBean」的實際副本是否引用「HealthMonitorMessage」類? –

+0

感謝Andy的幫助。是的,AdminMDBBean的實際副本引用HealthMonitorMessage類。我更新了代碼並提供了完整的方法。謝謝你的時間。 – Siv

+0

「HealthMonitorMessage」類位於何處?與你的mdb類相同的jar? – Gas

回答

相關問題