Message Driven Bean, kurumsal uygulamalarda asenkron mesajları ele alan java bean’dir. MDB, EJB konteynır tarafından tetiklenir. Session veya Entity bean’lerden farklı olarak direk istemci tarafından tetiklenmez. MDB tarafında alınan ileti JMS tarafından yollanır yani ileti JMS kuyruk ya da başlık yapısına gelince, MDB sınıfı EJB konteynır tarafından tetiklenir.
MDB iki tane arayüz (interface) implement etmelidir.
· javax.jms.MessageListener
Bu interface’te onMessage() metodunu tanımlanmaktadır. İleti kuyruk/başlık (queue/topic) yapısına set edilmişse, EJB konteynır MDB’nin onMessage() metodunu tetikler ve iletiyi yollar.
· javax.ejb.MessageDrivenBean
EJB yaşam döngüsünü içeren bir arayüz tanımıdır.
ejbCreate(), EJB konteynır MDB’yi yaratmak istediginde çağırır.
ejbRemove(), EJB konteynır MDB’yi silmek istediginde çağırır. EJB havuzundan siler.
setMessageDrivenContext(), EJB konteynırı tarafından gerekli verilerin yollamasını sağlar.
MDB sınıfı;
· Home ya da Remote arayüzlere sahip değil,
· Yaşam döngüsü kısadır, Stateless Session Bean’lere benzemektedir.
· EJB 2.0’da asenkron mesajlaşma için tasarlanmıştır.
MDB konfigürasyonu ejb-jar.xml de yapılır. Konfigürasyon aşağıdaki gibidir.
MDB sınıfının adı, dizin bilgisi, transaction tipi, ....
MDB nesnesi istemci tarafından doğrudan çağrılmaz. EJB konteynır JMS kuyruk/başlık (queue/topic) yapısına set edilen iletiyi MDB’nin onMessage() metodunu çağırarak iletiyi parametre geçer. Yukarıda değinildiği gibi MDB iki tane arayüzü implement etmek zorundadır. MDB sınıfının iskelet yapısı aşağıdaki gibidir.
public class MyMDB implements MessageDrivenBean, MessageListener{
private transient MessageDrivenContext ctx = null;
public MyMDB(){}
public void setMessageDrivenContext(MessageDrivenContext ctx){
this.ctx = ctx;
}
public void ejbCreate(){}
public void ejbRemove(){}
public void onMessage(Message message){
System.out.println("MDB Message received: "+ message.toString());
}
}