2016-06-23 17 views
8

Ho una certa esperienza nel core Java e Java EE. Ho letto le varie domande su SO per capire che cosa sia esattamente Java EE? E poche risposte a SO sono: what-exactly-is-java-ee, what-is-java-eeJava EE - chi implementa le specifiche?

ho qualche dubbio:

1) Se Java EE è solo una specifica, che non li implementa? I server delle applicazioni (come JBOSS, GlassFish) implementano queste specifiche?

2) Se sono corretto, la specifica EJB è implementata dal contenitore EJB e ritengo che EJB Container sia parte di Application Server. Ora, quando noi sviluppatori scriviamo un codice EJB, cosa stiamo facendo in realtà? Il dubbio che ho è, il contenitore EJB implementa la specifica EJB, quindi stiamo ignorando alcune "parti specifiche" dell'EJB? Come mai, alcune parti di EJB sono implementate dal contenitore EJB e qualcosa che gli sviluppatori stanno scrivendo? O è che una parte del bean deve essere fornita dal contenitore EJB e una parte deve essere sviluppata dagli sviluppatori? Sto avendo difficoltà nel capire questo.

Per favore qualcuno può aiutare a capire questo?

+2

1) È già stata data una risposta nel duplicato. 2) Noi, sviluppatori Java EE, siamo solo utenti finali dell'API Java EE. – BalusC

risposta

8

Chiunque può implementare la specifica java ee (JSR342) o qualsiasi jsr che ne faccia parte. Quando lo fanno, possono (dopo aver acquistato e superato lo Compatibility Test Suite) dichiarare di essere compatibili con le specifiche.Esiste un numero di fornitori con i loro server applicazioni che sono compatible with java ee, ma nessun fornitore implementa le specifiche java ee complete. Ad esempio, glassfish (l'implementazione di riferimento di java ee) utilizza l'implementazione di Red Hat CDI. A volte, il fornitore non implementa alcuna parte delle specifiche java ee, prende il glassfish, aggiunge le loro librerie specifiche del produttore e lo rilascia sotto il loro nome. Per richiedere la compatibilità, devono comunque passare attraverso il processo di certificazione ed eseguire CTS.

Per scoprire tutti i fornitori che implementano le specifiche non è così facile, dal momento che non tutti passano attraverso il processo di certificazione. Ad esempio, Apache CXF non è certificato da solo, ma viene certificato come parte di JBoss di Red Hat.

Ogni specifica ha un'API e un pdf scritto, entrambi i quali definiscono il comportamento obbligatorio di ciascuna implementazione. Questo è quello che usi quando scrivi il codice EJB. Per esempio, quando si crea un EJB:

import javax.ejb.Singleton; 
@Singleton 
public class MySingleton{ 
    ... 
} 

@Singleton annotazione è parte della specifica, ma MySingleton classe è il codice EJB, non è parte della specifica. Il contenitore EJB quindi sa cosa fare con la classe.

+0

Grazie mille per i tuoi commenti, ha senso. – CuriousMind

+0

Ottima risposta – StuPointerException

1

Sì, i fornitori di contenitori EJB (server applicazioni) come RedHat implementano le specifiche J2EE nei loro prodotti (come JBoss).

Quello che non fanno è implementare qualsiasi logica di business (solo il "plumbing" se lo si desidera). Ecco dove arrivano gli sviluppatori di applicazioni.

Proprio come Apache HTTPD o nginx implementano le specifiche del protocollo HTTP, ma questo non fa un sito web.

1

Chiunque può implementare la specifica J2EE, sebbene non consiglierei di provare a farlo da soli. Hai ragione, questo è generalmente implementato dai server delle applicazioni in modo che tu possa eseguire l'applicazione su un contenitore compatibile J2EE. Esistono anche librerie open source che, se combinate e aggiunte a Tomcat, implementeranno le specifiche (vedi tomee ad esempio).

Quando si scrive l'applicazione si stanno sfruttando i vantaggi dell'ambiente J2EE che consente di scrivere applicazioni complesse e concentrarsi sulle esigenze dei requisiti specifici.

1

Nei casi di specifiche Java (Java EE, JSF, altre JSR) di solito si ha un'implementazione di riferimento creata durante la stesura delle specifiche (Glassfish in caso di Java EE), quindi si hanno altri provider che possono creare la propria implementazione di lo spec (spesso sostenendo che è "migliore" in qualche modo).

Come sviluppatore, si scrive codice che può utilizzare le funzionalità fornite dalle specifiche, che funzionerebbero correttamente su qualsiasi implementazione conforme.

1

1) I server delle applicazioni implementano le specifiche e durante il rilascio dei server forniranno i dettagli della loro implementazione. Per un riferimento, vedere questo link, che specifica i vari JSR implementati da JBOSS 7.

2) Quando si utilizza solo un'implementazione fornita dal server delle applicazioni, l'istanza verrà prelevata dall'implementazione fornita dal server. Considerando che se abbiamo superato una classe, la nostra classe ignorata verrà fornita per le nostre operazioni.