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