Los message-driven beans son componentes detalladas en EJB 2.0 que pueden recibir y consumir mensajes asíncronamente. Un message-driven bean es invocado por el container como resultado de la recepción de un mensaje enviado por un cliente utilizando Java Message Service (JMS).
Un cliente no ejecuta directamente un message-driven bean, si no que sólo debe utilizar la API de JMS para enviar mensajes. Por esto, un message-driven bean no tiene una clase home ni interfaz local o remota ni retorna valores o excepciones al cliente. El cliente no espera que su mensaje sea respondido si no que continúan su ejecución una vez enviado.
Los message-driven beans sólo reciben mensajes JMS, sin conocer de antemano la información sobre contenido del mensaje recibido. Por esta razón sólo tienen un método con lógica de negocio llamado onMessage(), que recibe un Message JMS que puede representar todos los tipos de mensajes existentes en JMS como mensajes de bytes, de texto y de objetos serializables. Luego hay que discriminar el tipo de mensaje recibido utilizando el operador instanceOf.
Los message-driven beans son stateless ya que no mantienen estados de conversación entre cada procesamiento de mensajes recibidos, por lo cual las instancias de la misma clase son equivalentes entre sí y deben implementar solo un método ejbCreate() sin parámetros.