2009-05-26 5 views
15

Revisione alcuni testi d'esame passati per un esame si concentrano principalmente sulla progettazione di componenti-oriented e J2EE, mi sono imbattuto alla seguente domanda:EJB - Home/Remote e LocalHome/interfacce locali

Un'indagine preliminare di scenario 3 : "Richiesta di scambio" suggerisce che due EJB forniranno una soluzione adeguata: un bean di sessione chiamato EnterExchangeRequest per controllare l'elaborazione e un bean di entità chiamato ExchangeRequest per rappresentare le proprietà persistenti della richiesta. Discutere il ruolo delle seguenti interfacce:

  • casa
  • remoto
  • LocalHome
  • locale

e come avrebbero fornito l'accesso ai servizi del EJB sopra descritti.

Potrei provare a spiegare come le interfacce Home e Remote si adattano all'immagine. Ho anche sentito il docente dire che si potrebbe sostituire Home per LocalHome e Remote per Local (perché?), Ma perché mi chiedono di discutere il ruolo di tutti e quattro allo stesso tempo?


faccio ad avere ragione quando dico, il contenitore EJB (l'application server) vedrebbe che l'interfaccia è Home o Remote e poi decidere che il fagiolo puo 'live' su qualsiasi macchina in cluster, mentre nel caso le interfacce sono LocalHome e Local il contenitore saprà che i bean non possono essere distribuiti su più macchine e quindi li manterranno "vivi" in una sola macchina?


Sono totalmente perso in questa giungla di Java aziendale. Sto vivendo un BeanOverflow. Potresti dirmi quali delle mie supposizioni sono sbagliate, evidenziare i miei equivoci e gli errori.

Grazie a tutti coloro che sono disposti ad aiutarmi con queste interfacce EJB.

P.S. Nota che non ti sto chiedendo di rispondere alla domanda dal documento di esame passato. Solo curioso se hai qualche idea su cosa potrebbero essere dopo aver chiesto questo.

+10

confuso? entra nel club. – Cheeso

+0

I feel you men, sto avendo BeanOverflow in :) –

risposta

6

Home è responsabile della creazione del telecomando (un po 'come il suo costruttore) e LocalHome e Local hanno lo stesso rapporto.

In ogni caso il contenitore ti fornisce un proxy che fa riferimento alla classe EJB reale che scrivi.

Se dovessi indovinare, la domanda cercata era l'uso del remote per il bean di sessione e locale per il bean di entità.

In ogni caso, sebbene questi concetti possano ancora esistere, le cose sono state semplificate molto meglio in EJB3.

MODIFICA: in risposta al commento, con EJB3, la classe bean stessa può implementare direttamente le interfacce home e remote (per i bean di sessione). Vengono creati EJB con una singola annotazione.I bean con stato hanno un paio di altre annotazioni per gestire i problemi di stato. I bean di entità non hanno un'interfaccia Home e non hanno bisogno di un'interfaccia locale, puoi interagire direttamente con l'oggetto java. Esiste un EntityManager che recupera i bean di entità corretti in base a una query e che EntityManager viene iniettato tramite un'annotazione.

Questo tipo di somma lo riassume in un paragrafo. Ci sono ottimi tutorial sul web per questa roba, ma gli EJB in generale risolvono una classe di problemi che è difficile apprezzare a meno che non si tratti del problema. Non sono l'unico modo per risolverlo, ma a meno che tu non abbia a che fare con questo tipo di programmazione, solo leggerne qualcosa non ti aiuterà davvero a relazionarti.

+0

Potrebbe anche fornire uno schizzo di come sono state semplificate le cose in EJB3? Sarebbe bello saperlo. –

+0

Ri: EDIT, le classi bean non devono implementare l'interfaccia home. La mia spiegazione delle semplificazioni sarebbe: In EJB 3, JPA sostituisce efficacemente i bean di entità, ma se usi bean di entità, devi comunque utilizzare un'interfaccia home. I bean di sessione stateless non hanno bisogno di un'interfaccia home e, se uno non è definito, l'interfaccia aziendale può essere cercata direttamente da JNDI e memorizzata nella cache. Anche i bean di sessione con stato non necessitano di un'interfaccia home, ma se non viene utilizzata un'interfaccia home, la ricerca JNDI deve essere utilizzata come "factory". –

7

Come sottolineato da Yishay, Home/Remote e LocalHome/Local sono collegati tra loro e l'interfaccia Home funziona come un costruttore.

I fagioli locali sono legati alla JVM in cui vivono, non è possibile accedervi dall'esterno. È possibile accedere ai bean remoti da altre JVM.

Io uso un approccio simile: utilizzo sempre le orecchie. Fagioli per l'orecchio Faccio fagioli locali, Fagioli destinati all'uso da parte di altre orecchie che faccio a distanza. Ma è possibile utilizzare i fagioli locali in altre orecchie, purché siano distribuiti nella stessa JVM

+2

Per spec. EJB, "L'accesso a un bean enterprise tramite la vista client locale è richiesto solo per il supporto dei client locali inclusi nella stessa applicazione del bean enterprise che fornisce la vista client locale.Le implementazioni conformi di questa specifica possono facoltativamente supportare l'accesso alla vista client locale di un bean enterprise da un client locale incluso in un'applicazione diversa. [...] Le applicazioni che fanno affidamento sull'accesso inter-applicazione alla vista client locale non sono portabili. " –