У меня есть проект Java EE 5 с использованием JBoss 5.1 и проблема вроде этого. Мне нужно выполнить поиск во время выполнения для некоторых EJB в MDB, используя строку, которая получается из содержимого сообщения. Это просто своего рода шаблон локатора сервисов, используемый в MDB. Теперь, поскольку MDB начинают потреблять сразу после развертывания, у меня есть много NameNotFoundException
, так как неявный порядок развертывания здесь не работает (поиск во время выполнения). Что вы думаете об этом? Возможно ли это сделать с помощью EJB 3.0? Для меня также приемлемо использовать любые специфические для вендора вещи (JBoss 5.1), если это устраняет проблему.Поиск времени для EJB в MDB, потребляющем сразу после развертывания
Некоторые фрагмент кода, чтобы визуализировать ситуацию:
@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'
}
}
Быстрая идея: если вы выполнили транзакцию потребления, возможно, вы отклоните tx на 'NameNotFoundException', получите разумную политику повтора и надеетесь, что EJB развернутся в следующий раз? –
Это что-то, но заметьте, что если у меня будут миллионы сообщений, ожидающих в очередях (это действительно мой случай), каждый из них будет сначала обработан, чтобы просто отклонить tx. База данных, вероятно, преклонит колени. Это в любом случае получает огромную нагрузку на запуск приложения. –
Можете ли вы вставить фрагмент кода здесь .. как выполняется поиск. Каково определение вашего класса MDB? – user1428716