I was getting an odd exception when I was trying to create yet another Message Driven Bean. I have used standard configuration as we already had on the project, but I could not start the EAR. The exception I was getting - java.lang.Object is not an interface, was not really helpful.
[5/21/15 10:27:54:531 CEST] 000000cb SharedEJBRunt E WSVR0040E: addEjbModule failed for mySpecialServer_Server.jar
com.ibm.ejs.container.ContainerException: Failed to start mySpecial_Server_EAR#mySpecial_Server.jar#MySpecialMDB; nested exception is:
java.lang.IllegalArgumentException: java.lang.Object is not an interface
at com.ibm.ejs.container.EJSContainer.startBean(EJSContainer.java:1495)
at com.ibm.ws.ejbcontainer.runtime.AbstractEJBRuntime.startBean(AbstractEJBRuntime.java:1722)
at com.ibm.ws.ejbcontainer.runtime.SharedEJBRuntimeImpl.startBean(SharedEJBRuntimeImpl.java:638)
at com.ibm.ws.runtime.component.WASEJBRuntimeImpl.startBean(WASEJBRuntimeImpl.java:583)
MDB implementation snippet
package my.special;
import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.Message;
import javax.jms.MessageListener;
@MessageDriven(activationConfig = { @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue") })
public class MySpecialMDB implements MessageListener {
EJB Descriptor
<message-driven id="MySpecialMDB ">
<ejb-name>MySpecialMDB</ejb-name>
<ejb-class>my.special.MySpecialMDB</ejb-class>
<transaction-type>Bean</transaction-type>
<message-destination-type>javax.jms.Queue</message-destination-type>
</message-driven>
The best part was, that the exact same implementation of already existing Bean was not causing any trouble.
To fix it add
<messaging-type>
to descriptor