Ho un progetto Java EE 5 che utilizza JBoss 5.1 e un problema come questo. Devo fare una specie di ricerca run-time per alcuni EJB in MDB utilizzando una stringa risultante dal contenuto del messaggio. È solo una specie di modello di localizzazione del servizio utilizzato negli MDB. Ora, poiché gli MDB iniziano a consumare subito dopo l'implementazione, ho un sacco di NameNotFoundException
poiché l'ordine di implementazione implicito non funziona bene qui (ricerca in fase di esecuzione). Cosa ne pensi? È possibile farlo davvero bene usando EJB 3.0? È anche accettabile per me utilizzare qualsiasi materiale specifico del fornitore (JBoss 5.1) se risolve il problema.Ricerca run-time per EJB in MDB che consuma subito dopo la distribuzione
Alcuni frammento di codice per visualizzare la situazione:
@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'
}
}
Idea veloce: se il consumo è transazionale, è possibile rifiutare il tx su "NameNotFoundException", avere un ragionevole criterio di riprova e sperare che gli EJB siano stati distribuiti la prossima volta? –
È qualcosa, ma si noti che se avrò milioni di messaggi in attesa in coda (che è il mio caso in realtà), ognuno verrà inizialmente elaborato per rifiutare semplicemente tx. Il database probabilmente si inginocchierà. Ad ogni modo ottiene un carico enorme all'avvio dell'applicazione. –
Puoi incollare qui uno snippet di codice .. come stai effettuando la ricerca. qual è la tua definizione della classe MDB? – user1428716