2016-06-23 51 views
8

我在覈心Java和Java EE方面有一些經驗。我閱讀了關於SO的各種問題以瞭解Java EE究竟是什麼?並在這樣幾個答案是:what-exactly-is-java-eewhat-is-java-eeJava EE - 誰實現了規範?

我有些疑惑:

1)如果Java EE的只是一個規範,誰不執行呢?應用服務器(如JBOSS,GlassFish)是否實現了這些規範? 2)如果我正確的話EJB規範是由EJB容器實現的,我相信EJB容器是Application Server的一部分。現在,當我們作爲開發人員編寫EJB代碼時,我們究竟在做什麼?我的疑問是,EJB容器實現了EJB規範,那麼我們是否覆蓋EJB的某些「規範部分」呢?怎麼來,EJB的某些部分是由EJB容器實現的,還有一些開發人員正在編寫的東西?或者是EJB的某些部分必須由EJB容器提供,還有一部分是由開發人員開發的?我很難理解這一點。

請任何人都可以幫助理解這一點?

+2

1)已經在重複答案。 2)我們,Java EE開發人員,只是Java EE API的最終用戶。 – BalusC

回答

8

任何人都可以實現java ee規範(JSR342)或任何其他的jsr。當他們這樣做時,他們可以(在購買並通過Compatibility Test Suite後)宣稱與規格兼容。有許多供應商的應用服務器是compatible with java ee,但沒有供應商實現完整的Java ee規範。例如,glassfish(java ee參考實現)使​​用Red Hat的CDI實現。有時候,供應商沒有實現java ee規範的任何部分,他們抓住glassfish,添加供應商特定的庫,並以他們的名字發佈它。要聲明兼容性,他們仍然需要通過認證過程並運行CTS。

要找出實施該規範的所有供應商並不容易,因爲並非所有的供應商都通過認證過程。例如,Apache CXF不是自己認證的,而是被認證爲紅帽JBoss的一部分。

每個規範都有一個API和一個書面PDF,它們都定義了每個實現的強制行爲。這是編寫EJB代碼時使用的。例如,當你創建一個EJB:

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

@Singleton註解是規範的一部分,但MySingleton類是你的EJB代碼,這不是規範的一部分。 EJB容器知道該如何處理該類。

+0

非常感謝您的意見,是有道理的。 – CuriousMind

+0

優秀的答案 – StuPointerException

1

是的,像RedHat這樣的EJB容器(應用服務器)供應商在他們的產品(比如JBoss)中實現了J2EE規範。

他們沒有做的是實現任何業務邏輯(如果你願意的話,就是「管道」)。這就是應用程序開發人員進來的地方。

就像Apache HTTPD或nginx一樣實現HTTP協議規範,但這並不是網站製作的。

1

任何人都可以實現J2EE規範,儘管我不建議你自己試試。您是對的,這通常由應用程序服務器實現,以便您可以在符合J2EE的容器上運行您的應用程序。還有一些開源庫,當它們合併並添加到Tomcat中時,將實現該規範(請參閱tomee)。

當你編寫你的應用程序時,你正在利用J2EE環境的好處,它將允許你編寫複雜的應用程序並專注於你的特定需求的需求。

1

在Java規範的案例(Java EE,JSF和其他JSR)中,您通常在制定規範時創建了參考實現(在Java EE的情況下爲Glassfish),那麼您有其他提供者可以創建自己的實現規範(通常聲稱它在某種程度上「更好」)。

您作爲開發人員然後編寫代碼,可以使用規範提供的工具,這些工具可以在任何兼容的實現上正確運行。

1

1)應用服務器實現了規範,在發佈服務器時,他們將提供它們實現的細節。請參考這個link,它指定了JBOSS 7實現的各種JSR。

2)當我們只是使用應用服務器提供的任何實現時,那麼實例將從服務器提供的實現中獲取。而如果我們已經超越了某個班級,那麼我們的班級將被提供給我們的業務。