2016-06-23 5 views
8

私はコアJavaとJava EEの経験があります。私は、Java EEとは何かを理解するために、SOに関するさまざまな質問を読んでいますか?そして、SOにはいくつかの答えは、次のとおりです。what-exactly-is-java-eeJava EE - 誰が仕様を実装していますか?

what-is-java-ee私はいくつかの疑問を持っている:

1)は、Java EEはそれらを実装しないだけの仕様ですか?アプリケーションサーバ(JBOSS、GlassFishなど)はこれらの仕様を実装していますか?

2)私が正しいとすれば、EJB仕様はEJBコンテナによって実装されており、EJBコンテナはアプリケーションサーバの一部であると確信しています。さて、私たちが開発者として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は単独で認定されておらず、Red Hatの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プロトコル仕様を実装していますが、Webサイトではありません。

1

誰でもJ2EE仕様を実装することができますが、自分でやり直すことはお勧めしません。そうです、これは一般にアプリケーションサーバーによって実装されているため、J2EE準拠のコンテナでアプリケーションを実行できます。オープンソースライブラリもあります。これを組み合わせてTomcatに追加すると、仕様が実装されます(例えば、tomeeを参照してください)。

アプリケーションを書くときには、複雑なアプリケーションを記述したり、特定の要件のニーズに焦点を当てたりできるJ2EE環境の利点を利用しています。

1

Java仕様のケース(Java EE、JSF、その他のJSR)では、仕様書作成中に作成された参照実装(Java EEの場合はGlassfish)があり、次に独自の実装を作成できる他のプロバイダがあります。仕様(何らかの形で「より良い」と主張することが多い)。

開発者は、仕様に従って提供されている機能を使用できるコードを作成します。これは、すべての準拠の実装で正しく動作します。

1

1)アプリケーションサーバーは仕様を実装し、サーバーのリリース中に実装の詳細を提供します。参考文献として、linkを参照してください。JBOSS 7で実装されているさまざまなJSRが指定されています。

2)アプリケーションサーバーによって提供される実装を使用している場合、インスタンスはサーバーによって提供される実装から取得されます。一方、クラスをオーバーライドすると、オーバーライドされたクラスが操作上提供されます。

関連する問題