martedì 21 giugno 2011

Java EE6 Alternative, una configurazione flessibile per le applicazioni aziendali


di Jelle Victoor

Un'altra grande caratteristica di Java EE 6 è l'uso di alternative.L'idea di base è consentono di specificare una alternativa per un oggetto iniettata.Prendete questo caso, per esempio.
Stiamo sviluppando la nostra front-end della nostra applicazione.Gli schermi dipendono da una connessione al database, ma il database non è pronto per lo sviluppo.Forniamo una implementazione 'alternativa' per questo momento.
È possibile specificare un modello che e iniettare.Con questo approccio è necessario modificare il cablaggio della classe.

1.pubblici interfaccia CustomerService {
2.Lista findAllCustomers ();
3.}

L'implementazione sarebbe simile a questo.

01.pubblici classe CustomerServiceImpl implementa CustomerService {
02.
03.@ PersistenceContext
. 04privati ​​EntityManager em;
05.
06.@ Override
07.pubbliche Lista findAllCustomers () {
08.query query = em.createNamedQuery ( "Customer.findAll" , Cliente. classe );
. 09ritorno query.getResultList ();
10.}
11.}

E l'implementazione mock come questo.

1.pubblici classe CustomerServiceMock implementa CustomerService {
2.
3.@ Override
4.pubbliche Lista findAllCustomers () {
5.restituire Arrays.asList ( nuovo Cliente ( "Geraldo" ), nuovi clienti ("Scruffy" ), nuovi clienti ( "Haddock" ));
6.}
7.
8.}

Nella tua classe che utilizza questo servizio, si può semplicemente iniettare.

1.@ Iniettare privato CustomerService customerservice;

Quando si tenta di eseguire questo, darà un errore:

'Dipendenze ambiguo per il tipo [CustomerService] con qualificazioni [@ Default] al punto di iniezione [[settore] @ Iniettare privato be.styledideas.blog.alternative.web.CustomerBackingBean.customerService].Possibili dipendenze [[Managed Bean [classe be.styledideas.blog.alternative.CustomerServiceMock] con qualificazioni [@ @ Ogni predefinita], Managed Bean [classe be.styledideas.blog.alternative.CustomerServiceImpl] con qualificazioni [@ @ Ogni Default]] ].Si prega di consultare server.log per maggiori dettagli. '

Il contenitore non sa cosa attuazione deve essere iniettato.Dovremo segnare l'implementazione mock.Lo facciamo con l'aggiunta della alternativa annotazione su di esso.

1.@ Alternative
2.pubblici classe CustomerServiceMock implementa CustomerService {
3.
4.@ Override
5.pubbliche Lista findAllCustomers () {
6.restituire Arrays.asList ( nuovo Cliente ( "Haddock" ), nuovi clienti ("Geraldo" ), nuovi clienti ( "Scruffy" ));
7.}
8.}

Quando noi oggi iniziamo il nostro server, c'è solo una implementazione che si qualifica per questo punto di iniezione, cioè la classe CustomerServiceImpl.
Questo non è ciò che vogliamo ottenere, vogliamo essere in grado di iniettare il nostro mock per il tempo che non riesce a connettersi al database.
Nel nostro file beans.xml (standard CDI) si aggiunge questo:

1. xml version = "1.0" encoding = "UTF-8" ?>
2.< fagioli xmlns = " http://java.sun.com/xml/ns/javaee "
5.< alternative >
6.< classe > be.styledideas.blog.alternative.CustomerServiceMock classe >
7. alternative >
8. fagioli >

Ogni volta che si corre il nostro codice, avremo una implementazione mock in cui si usa il servizio al cliente.Grazie questa è configurato in un file xml, possiamo cambiare questo senza dover fare la ricompilazione della nostra applicazione.
Accanto, decorator

Corso Java - Corsi Java - Corsi programmazione Java

Corso programmazione Android - Certificazione Android


Nessun commento:

Posta un commento

Nota. Solo i membri di questo blog possono postare un commento.