Domanda

Come sto imparando JSF2, ho capito che non sono sicuro di quello che i componenti di supporto deve essere. Dal punto di vista progettuale, qual è la differenza tra EJB e @ManagedBeans?

Alla fine ho intenzione di usare JPA, quindi EJB è una scelta naturale per livello di business. E 'una buona pratica da usare EJB direttamente dal JSF (come spiegato href="http://www.adam-bien.com/roller/abien/entry/ejb_3_1_killed_the" qui )?

Al momento sto appoggiato verso l'utilizzo @ManagedBeans per i componenti che non hanno bisogno di accedere a livello di business (ad esempio view helpers) o trattano dati di richiesta / sessione. Per altri scopi, ad esempio messa in vendita di qualcosa in una griglia, vorrei accedere direttamente EJB.

E 'questo un buon progetto? Devo utilizzare @ManagedBeans per tutti i fagioli che sostengono per il bene della separazione dello strato pulito, anche se in alcuni casi hanno solo delegano a EJB?

È stato utile?

Soluzione

Domanda molto valida, ma credo che la risposta dipende dalla "rigidità" del metodo per il vostro progetto. V'è infatti un po 'di ridondanza tra JSF supporto di fagioli e EJB sia come implementare alcune attività logica.

In una ideale Utilizzo di funzioni JSF con converters, rendered, validator, ecc il backing bean potrebbero effettivamente essere il codice della logica di business pulito. Ma in pratica una certa logica di presentazione relative perdite di frequente in esso.

Questa logica di presentazione legate dovrebbe idealmente non essere in EJB. Questa logica di presentazione relativi può dipendere dal pacchetto facce, ma non necessario. E 'quello che non che lo rendono presentazione-correlata o meno.

Un modello a componenti unificato ha alcuni vantaggi però. Ed è l'approccio adottato dalla Seam e Spring . In entrambi i casi, componente affari con dichiarativa delle transazioni, ecc può essere utilizzato direttamente in JSF (primavera non usa EJB, ma fornire un modello simile). EJB puristi sarebbe però dire che si dovrebbe dissociarsi i due.

Quindi, per me è in ultima analisi, una questione di gusto e la dimensione del progetto. Posso immaginare che per un piccolo progetto / medie utilizzando EJB in JSF funziona bene. Per il progetto più grande in cui questa severità è critica, assicuratevi di non avvitare gli strati.

Altri suggerimenti

In Java EE 6 v'è una certa sovrapposizione tra i vari fagioli gestiti: JSF gestito fagioli (@ManagedBean), CDI gestito fagioli (@Named) e fagioli EJB (@Stateless, @Statefull, @Singleton)

.

Nella struttura vista non vedo alcun vantaggio particolare per attaccare con @ManagedBean. La variante CDI @Named sembra essere in grado di fare lo stesso e più, ad esempio offrire l'accesso al campo di applicazione di conversione.

Il pensiero corrente sembra essere che alla fine il modello a componenti EJB sarà anche essere montato come un insieme di annotazioni CDI. Soprattutto membro esperto del gruppo Reza Rahman accenna spesso a questo. Vedi per esempio Dependency Injection in Java EE 6 - Parte 1

Per il momento ciò non è avvenuto, i fagioli in modo EJB rimane il posto più facile per mettere la logica di business, soprattutto quando APP viene utilizzato per la persistenza.

Tuttavia, anche se non CDI otterrà le funzionalità di EJB, IMHO è ancora una buona pratica di utilizzare un fagiolo separato per il concetto di "backup fagiolo" e un fagiolo separato per il "business logic".

Il backing bean può essere davvero sottile, solo che contiene alcuni riferimenti per modellare oggetti e servizi (EJB). I metodi di azione del backing bean può delegare quasi direttamente ai servizi, ma il loro valore aggiunto è di fornire all'utente un feedback (aggiungendo FacesMessages in caso di successo o il fallimento) e facendo piccole modifiche dell'interfaccia utente (ad esempio l'impostazione di un valore booleano false che mostrava una certa finestra di dialogo) .

I Servizi (business logic) non devono sapere nulla di qualsiasi presentazione particolare. Essi dovrebbero essere altrettanto bene utilizzabile da fagioli JSF backing, JAX-RS, servlet, stand-alone client remoti Java SE o qualsiasi altra cosa.

Anche se tutti i fagioli diventerebbero fagioli CDI, allora questo non cambia questa divisione di base di responsabilità.

Interessante articolo, non si sapeva di questo. Tuttavia, per me questo articolo puzza più simile a uno sproloquio verso JSF gestito fagioli. E 'anche tight-coppie EJB con JSF. E 'forse interessante in piccole applicazioni (personali), ma probabilmente non in applicazioni SOA del mondo reale in cui si desidera avere il controllo completo sopra è stato servito l'EJB.

Per quanto quale usare per per quello, vorrei solo bastone per @ManagedBean per indicare un modello JSF --che è legato a una o più specifiche viste JSF. È perfettamente possibile utilizzare @EJBs per la logica non-JSF specifici business e / o datamodels. Si può iniettare @EJBs in un modello JSF e delegare in modalità di azione e forse anche getter / setter, ma non si dovrebbe fare il contrario, cioè non definire il modello JSF in un @EJB, questo porta ad accoppiamento stretto e renderebbe @EJBs inutilizzabile fuori del contesto JSF. Per quanto riguarda, il vostro disegno suona bene, a patto che si guarda di non importare nulla dal pacchetto javax.faces nella classe @EJB.

Chiamando EJB dal XHTML, si stanno introducendo accoppiamento stretto tra la scelta di implementazione nella vista e di business di livello.

Se si utilizza un bean gestito per chiamare un EJB, [o addirittura, mettere in un business delegato], si sarà in grado di cambiare il vostro livello di business completamente alla primavera senza intaccare lo strato di vista (XHTML).

È tecnicamente possibile, e molto facile per voi per (JSR 299) in grado di utilizzare EJB come bean gestito, e questo è probabilmente quello che questi fornitori voglio che tu faccia - ottenere incollati allo specifiche. Ma se questa è una cosa giusta da fare? -. No

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