JBoss 5.1 kullanan Java EE 5 projesi ve bunun gibi bir sorun var. Mesaj içeriğinden kaynaklanan bir dize kullanarak MDB'lerde bazı EJB'ler için çalışma zamanı araması yapmak zorundayım. MDB'lerde kullanılan bir çeşit servis konum belirleyici. Şimdi, MDB'ler dağıtımdan hemen sonra tüketmeye başladıkları için, örtük dağıtım sırası burada çalışmadığından (çalışma zamanı araması) çok fazla NameNotFoundException
var. Bu konu hakkında ne düşünüyorsun? EJB 3.0 kullanarak gerçekten iyi yapılabilir mi? Sorunu çözmesi durumunda herhangi bir satıcıya özgü malzeme (JBoss 5.1) kullanmam da kabul edilebilir.MDB'deki EJB'ler için çalışma zamanı araması, dağıtımdan hemen sonra tüketiyor
durumu görselleştirmek için bazı kod parçacığı:
@MessageDriven(mappedName="jms/Queue")
public class MessageBean implements MessageListener {
@Resource
private MessageDrivenContext mdc;
public void onMessage(Message msg) {
final String beanName = // extract somehow the bean's name from 'msg'
final Context ctx = new InitialContext();
final Object obj = ctx.lookup(beanName); // NameNotFoundException
// do something with 'obj'
}
}
Hızlı fikir: Tüketimi işlemselleştirdiyseniz, belki de 'NameNotFoundException' öğesindeki tx'i reddedebilir, mantıklı bir yeniden deneme politikasına sahip olabilir ve EJB'lerin bir dahaki sefere konuşmasını umut edebilirsiniz. –
Bu bir şey, ancak kuyruklarda bekleyen milyonlarca iletiye sahip olacağımı fark ettim (bu benim durumum aslında), her biri başlangıçta tx'i reddetmek için işlenecek. Veritabanı muhtemelen diz çökecek. Zaten uygulama başlangıçta büyük bir yük alır. –
Burada bir kod parçacığı yapıştırabilirsiniz .. nasıl arama gerçekleştiriyorsunuz. MDB sınıf tanımınız nedir? – user1428716