Java EEアプリケーションで、Sun Java WebサーバーなどのWebサーバーを使用して、サーブレット/ jspリクエストを処理し、IBM WebSphereやBEA WebLogicなどのアプリケーションサーバーに転送する必要がありますか。 ?
アプリケーションサーバーはこのようなサーブレットやjspも処理できるため、
このようなサーバーアーキテクチャの長所と短所は何ですか?
Apache Tomcat、Jettyおよび Sun JavaシステムWebサーバーは、Java Web(サーブレット)コンテナのみです。つまり、サーブレット/ JSPのみを実行できます-完全なJava EE APIスタックを提供していません。
そのため、これらは.war
ファイルのみをデプロイでき、.ear
(EJBを含む.jar
モジュールも含む)をデプロイできません。また、JSFやCDIなどの一部のJava EE APIをサポートしていません)。その他の機能/ API。 Java EE6、 .war
ファイルにはEJBが含まれている可能性がある 。 .war
と.ear
の違いに関する詳細情報 であることに注意することが重要です。
すべてJava EEサーバーにはWebコンテナ+ EJBコンテナがあります)(- here および here TomcatおよびJettyはJavaEEサーバーではなく、サーブレット(Web)コンテナであると主張しているだけです。)
JBoss Application Serverは、WebとしてJbossWeb(Apache Tomcatフォーク)を使用しますコンテナ。そのEJBコンテナーは、まあ、JBossです(「JBoss EJBコンテナー」以外の名前はありません)。
その他(IBM WebSphere、Oracle/BEA WebLogic、TomEE、Glassfish)にも、Webコンテナ+ EJBコンテナがあります。
TomEEは明らかにWebコンテナーとしてApache Tomcatを使用しています。 GlassfishもApache Tomcatフォークを使用します。 (はい、Apache Tomcatは非常に人気があるようです:)
以下の説明では、Tomcatを「Web Container」で変更し、JBossを「Fully Capable Java EE Server)」で変更できます(わかりやすくするために製品名を使用しました)。
画像:Java EEサーバーおよびコンテナー-ソース:Java EEチュートリアル。
Java Webサーバー(Tomcatなど))がサーブレット/ JSP呼び出しを処理し、より複雑な要求をJBoss(またはIBM WebSphereまたはBEA WebLogic)などのアプリケーションサーバーに転送することの(欠点)の利点は何ですか)?
TomcatをJBossの前に配置する場合、実際に実行しているのは、Tomcatの前にJBossWeb(Webコンテナ、すべてのWebアプリケーションへの入り口)は常にJBossのEJBコンテナの前にあります。機能について言えば、同じサービスが2回提供されるため、これは冗長です。
Tomcatをbeforeの前に配置する(---)そのEJBコンテナーのみにJBossを使用している場合、JBossは理にかなっています。ここでの選択は、Webコンテナーインプリメンターでの単純なスイッチです。
また、Tomcatが別のネットワークノード(または複数のTomcat /ノード)にあった場合、クラスタリング機能を適用できます(JBossWebとJBossは通常1つとして扱われるため、同じマシンに移動するため、そうしないと適用できませんでした)。 。
veryの共通点はWebサーバーの配置(Apache HTTPDなど)またはIIS)Java Web Containerの前)これには2つの主な動機があります。
セキュリティを強化したい場合は、DMZでWebコンテナーを使用しても意味がありません。アプリケーションがサービスを提供している(つまり、.war
ファイルがデプロイされている)場合、アプリケーションは依然として「脆弱」です。リクエスト/レスポンスを転送するだけの場合は、Apache HTTPDの方がはるかに優れています。
Sun Java Webサーバー、IBM WebSphereアプリケーションサーバー、WebLogic、JBossアプリケーションサーバー、Tomcat、Jetty ...それらはすべてJava Webアプリケーションサーバーそして同じことを行います-WARまたはEARでパッケージ化されたアプリケーションを実行します(EARは「エンタープライズ」用で、1つ以上のWARが含まれています)。
1つのアプリケーションを実行するためにセットアップに2台のサーバーがある場合、展開戦略/設計に問題がある可能性があります。
マルチサーバーセットアップの場合もありますが、それらは通常、Javaアプリケーションサーバーの前にApache HTTPサーバーがある負荷分散およびプロキシセットアップです。
たとえば、ポート8080でアプリケーションを提供するTomcatがあり、http://myserver.com/myapp/
ではなくhttp://myserver.com:8080/myapp/
を使用したいとします。 Javaはポート1024(*)を下回ることができないため、Tomcatだけではそれを行うことはできません。これを実現するには、ポート80にApache HTTP Serverをセットアップし、mod_proxy
を構成して、すべてのトラフィックを/myapp
からhttp://myserver.com:8080/myapp
にリダイレクトする必要があります。
*:正確な数は覚えていませんが、1024前後です。これはLinuxにも当てはまりますが、Windowsには当てはまらない場合があります。Windowsセットアップを使用してからしばらく時間が経っています。
UPDATE:悪いことに、「システムサービスとして実行」の部分を ここで説明 として強調するのを忘れていました。
まあ、Applications Serverにはすでにボード上にサーブレットコンテナが含まれているので、着信httpリクエストを処理するWebサーバーをもう1つ持つのは冗長です。
ただし、このレイヤーが分離されたプロジェクトに取り組んだことがありました。 JBossサーバーのクラスターとTomcatサーバーの個別のクラスターがありました。 Tomcatは、ロードバランシングを使用してRMI経由でJBossを呼び出していました。これは、セキュリティ(JbossサーバーがVPN内にある)とスケーラビリティのために行われました。