Domanda

Ho un mucchio di stateless EJB 3.0 fagioli chiamando l'altro in catena. Si consideri, BeanA.do (messaggio) -> BeanB.do () -> BeanC.do () -> BeanD.do (). Ora mi piacerebbe accedere ai dati dei messaggi da BeanD.do (). soluzione ovvia è far passare il messaggio come parametro a tutto ciò che fanno () chiama (in realtà è così che funziona la società), ma voglio qualche soluzione più bello.

C'è una sorta di contesto chiamata? E posso associare dati arbitrari con esso?

Quello che mi piacerebbe fare, è semplicemente messo messaggio nel BeanA.do (messaggio) in una certa memoria locale associata a chiamata di funzione di fagioli e recuperarlo in BeanD.do ().

Tutte le idee?

È stato utile?

Soluzione

non credo ci sia qualcosa nelle specifiche EJB che fornisce tale funzionalità. Se siete su un application server specifico, si può essere in grado di utilizzare cose specifiche application server (credo JBoss consente di aggiungere cose a un contesto di chiamata). si può anche essere in grado di falsificare qualcosa usando JNDI.

personalmente, questo sembra (a me) come una cattiva progettazione. ho potuto vedere facendo questo se si ha un po 'di codice nel mezzo non si poteva controllare, ma perché farlo altrimenti? si stanno facendo la logica codice molto difficile da seguire perché avete un mucchio di dati "magiche", che appare solo nella funzione.

Altri suggerimenti

Si potrebbe avere una classe con metodi get / set statici che accedono a un campo ThreadLocal statico. Tuttavia vorrei prendere consigli di James e considerare molto attentamente se si vuole accoppiare i tuoi EJB a quella classe. Sicuramente ricontrollare tuoi documenti application server come io non sono sicuro se si utilizza ThreadLocals in un ambiente EJB è supportato.

Ho esattamente lo stesso problema. La parte ironica è che questo è facile da fare con sapone in JAX-WS o JAX-RPC, ma difficile da fare con EJB.

sto discutendo se rinunciare sull'uso dei EJB interfacce locale o remoto, e invece passando messaggi tramite JMS, il che rende anche questo facile.

Ci sono casi legittimi in cui siano necessari, e non rappresenta un difetto di progettazione.

Questo è ciò che Seam fornisce. E 'un po' imbarazzante per essere in esecuzione con web-services puri (cioè senza web GUI front end). Tuttavia, sono riuscito, e funziona meravigliosamente.

Ho bisogno di utilizzare il contesto di chiamata in JAX WS. Brent dice "La parte ironica è che questo è facile da fare con sapone in JAX-WS o JAX-RPC, ma difficile da fare con EJB."

Potete per favore fatemelo sapere come utilizzare il contesto di chiamata in JAX WS

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top