マジセミドライブ

ウェビナー関連のニュースやITサービス&ツールの最新情報を随時配信します。

OSS情報

2020.01.01

【OSS情報アーカイブ】Jetty

【OSS情報アーカイブ】Jetty

※当記事に記載されている情報は、古くなっている場合があります。オフィシャルサイトで最新情報をご確認ください。

コンテンツ

「Jetty」とは

概要

Jetty(ジェッティ)とは、JavaベースのWebサーバサーブレットコンテナです。

静的および動的コンテンツを提供する「HTTPサーバ機能」およびJavaサーブレットを動作させる「サーブレットコンテナ機能」を提供します。

「軽量動作」「高スケーラビリティ」「完全非同期処理」「コンポーネント指向」などの特徴があります。

基本説明

Jetty(Eclipse Jetty)は「HTTPサーバ」「HTTPクライアント」「javax.servletコンテナ」を提供するオープンソースプロジェクトです。

「スタンドアロン」または「組み込みインスタンス化」で利用でき、多くのオープンソースプロダクトで組込み用途としても利用されています。

Jettyプロジェクトは『使いやすさと長年のサーブレット開発との互換性を維持しながら最大のパフォーマンスを提供するWebプロトコルを大容量の低遅延でサポートすること』および『Webアプリケーションのデプロイメントのための堅実な伝統的ディストリビューション』を目標としています。

主要開発元

JettyはEclipse Foundationの一環としてフリーでオープンソースのプロジェクトとして開発されています。

→Jetty →doc →Chapter 35. Contributing to Jetty

経緯

1995年

Jettyの初版がリリースされました。Tomcatよりも長い歴史を持ちます。

2009年から

Jettyプロジェクトは、開発プロセスを改善し、プロジェクトのライセンスとコミュニティを拡大するために、Eclipse Foundationにコアコンポーネントを移行しました。

その後、「Jetty 9」からプロジェクトはEclipse Foundationに完全に移行しています。

オフィシャルサイト情報

■オフィシャルサイト

→eclipse.org →jetty

■ライセンス情報

Jettyのライセンスは「デュアルライセンス(Apache License 2.0+Eclipse Public License 1.0)」です。

詳細について、こちらを参照ください。
→Jetty →Licence

■ダウンロード

→Jetty →Eclipse Jetty Downloads

■導入事例

Eclipse Jetty Powered製品は、Jettyの多様性とそのコミュニティの多様性を示しています。

→Jetty →Powered by Jetty

同様製品

同様な機能を提供する製品として、次のようなものがあります。

オープンソース製品:「Apache Tomcat」「GlassFish」「WildFly」など。

Java EE実装

Jettyは「Java EE仕様」を実装しており、主にサーブレット仕様の側面を実装しています。

Java EEプラットフォームの最近のリリースでは、多くの開発者がJava EEの傘下にある多くのテクノロジのサブセットしか必要としないことを認識して、Webプロファイルが導入されました。

Jetty自体はすべてのWebプロファイルテクノロジに対応できるわけではありませんが、Jettyアーキテクチャではサードパーティの実装をプラグインしてニーズに合わせてカスタマイズされたコンテナを作成できます。

→Jetty →doc →Chapter 1. Introducing Jetty →Jetty and Java EE Web Profile

対応プロトコル

・HTTP/1.1—RFC 7230
・HTTP/2—RFC 7540
・WebSocket—RFC 6455、JSR 356
・FastCGI
・OSGi
・JMX
・JNDI
・JAAS など

組込み用途

Jettyは、効率的に組み込めることを意図して開発されており、コンポーネント指向技術としての長い歴史を持ちます。

フットプリント(メモリ専有容量)が小さいため、さまざまな対象に対して組み込み型Webサービスを提供するのに適しています。

・アプリケーションサーバ
・Javaアプリケーション
・各種ツール
・各種フレームワーク
・大規模クラスタ
・デバイス類 など

「Jetty」の高スループット性能

Jettyは各種高速化技術を搭載することで、高スループット性能を実現しています。

非同期サーバ

Jettyでは、非同期サーブレット+非同期HTTPサーバとして、クライアントからのリクエストに対し、待機が非同期に行われるため、スケーラビリティとサービス品質が大幅に向上します。

非同期HTTPクライアント

Jettyは、非同期HTTPクライアントとして、自身から外部のサーバに向けて、HTTPリクエストを非同期に送受信できます。

「HTTP/2プロトコル」サポート

Jettyは、RFC 7540で定義されている「HTTP/2プロトコル」のクライアントとサーバの両方の実装をサポートしています。

「HTTPヘッダ圧縮」「HTTP/2サーバプッシュ通信」「HTTPパイプライン」などの仕組みにより従来プロトコルよりも高速な通信が可能です。

→Jetty →doc →Part III. Jetty Administration Guide →Chapter 16. HTTP/2

「FastCGI」サポート

■「FastCGI」とは

概要

「FastCGI」は、Webサーバと通信するために使用されるネットワークプロトコルです。

FastCGIサーバは、動的Web言語(PHP、Python、Ruby、Perlなど)によって生成されたWebコンテンツの配信にも使用されます。

FastCGIをサポートするWebサーバとして、「Apache」「Nginx」「Jetty」などがあります。

基本的な仕組み

①Webサーバはプロキシとして機能し、クライアント(ブラウザ)から受信したHTTP要求をFastCGIサーバに転送されるFastCGI要求に変換して、FastCGIサーバに渡します。

②FastCGIサーバは、動的Web言語インタプリタを起動します。

③動的Web言語インタプリタは、FastCGI要求に含まれる情報からWebコンテンツ(HTML)を生成します。

④FastCGIサーバは、作成されたWebコンテンツをWebサーバに返されるFastCGI応答にフォーマットして、Webサーバに渡します。

⑤WebサーバはFastCGI応答をHTTP応答に変換してからクライアントに返します。

■Jettyでの「FastCGI」構成

Jettyは、FastCGIをサポートするWebサーバとして機能するように構成できます。

これによりユーザーは「HTTP/2などのJetty機能」「JettyがHTTP/2プッシュに対して提供する独自のサポート」「Jettyのスケーラビリティ」「サーブレット」「JSPなどのJava Web標準に対するJettyのネイティブサポート」などを利用できます。

HTTP/2対応のクライアントからのHTTP/2要求を待ち受け、それらをFastCGI要求としてFastCGIサーバに転送する場合は、http2モジュールを有効にする必要があります。

→Jetty →doc →Part III. Jetty Administration Guide →Chapter 17. FastCGI Support

「Jetty」のMavenプラグイン

「Apache Maven」とは

■概要

Apache Mavenは、Java用プロジェクト管理ツールです。

Apacheライセンスにて配布されているオープンソースソフトウェアとして利用できます。

Apache Mavenはソフトウェアプロジェクト管理ツールとして、プロジェクトオブジェクトモデル(POM)の概念に基づいて、リポジトリからプロジェクトの「ビルド」「レポート作成」「ドキュメント管理」などを実施できます。

■主な機能

プラグイン拡張によりさまざまな機能を利用できます。

・プロジェクトサイト生成
・ソースコードのコンパイル
・テスト
・テストレポート生成
・Javadoc生成
・JAR生成
・WAR/EARファイル生成
・サーバへのデプロイ など

→maven.apache.org

→OSSxCloudNews →オープンソースの運用管理・運用自動化/Apache Mavenとは

「Jetty Mavenプラグイン」による開発効率化

概要

Jetty Mavenプラグインを利用することで、Webアプリケーション開発プロジェクトを効率化でき、開発時間を節約できます。

自動デプロイ

Mavenのデフォルトに従って構造化されているWebアプリケーションプロジェクトを追加できます。

プラグインは定期的にプロジェクトの変更をスキャンして変更がないかどうかを確認し、発見した場合は、自動的にWebアプリケーションを再デプロイします。

IDEを使用してプロジェクトに変更を加えると、実行中のWebコンテナによって自動的に変更が行われ、すぐにテストできるようになります。

→Jetty →doc →Chapter 23. Maven and Jetty →Configuring the Jetty Maven Plugin

プロダクション環境非推奨

Jettyプロジェクトでは、Jetty Mavenプラグインのプロダクション環境での使用を推奨していません。

Jetty Mavenプラグインは開発に非常に役立ちますが、プラグインが機能するためには、多くの内部Maven APIとMaven自体を活用する必要があります。

そのため、Jettyプロジェクトでは、「伝統的なディストリビューション配備アプローチ」もしくは「組み込みJetty」の使用を推奨しています。

「Jetty」のアーキテクチャ

コネクタおよびハンドラの調整

Jettyサーバは、「接続を受け付けるコネクタの集まり」と「接続からのリクエストを処理してレスポンスを生成するハンドラの集まり」との間の配管部分として機能するもので、スレッドプールからのスレッドが処理を実行します。

サーブレットAPI

Jettyの要求/応答はサーブレットAPIから派生していますが、サーブレットAPIの全機能は適切なハンドラを設定した場合にのみ利用可能です。

リクエストのセッションAPIはリクエストが渡されない限り非アクティブセッションハンドラです。

サーブレットなしのJettyサーバ構築

サーブレット自体の概念は、サーブレットハンドラによって実装されています。

サーブレットが必要ない場合は、サーブレット要求/応答APIの使用によるオーバーヘッドはほとんどありません。

したがって、サーブレットを使用せずに、コネクタとハンドラのみを使用してJettyサーバを構築できます。

さまざまなコンポーネント構成を実現

Jettyは「コネクタとハンドラのツリー構築」および「個々の設定」に関する機能を提供します。

Jettyコンポーネントは単純なPOJO(Plain Old Java Object)であるため、さまざまな方法でコンポーネント構成を実現できます。

 

参考元サイト

※定期的にメンテナンスを実施しておりますが、一部情報が古い場合がございます。ご了承ください。

この記事のタグ一覧

おすすめの記事

【デジタル寺田の3分用語解説】 生成AIを悪用した「 サイバー攻撃 」とは?🕷️

デジタル寺田の3分用語解説

2024.12.16

【デジタル寺田の3分用語解説】 生成AIを悪用した「 サイバー攻撃 」とは?🕷️

生成AIの進化により、フィッシング詐欺やマルウェア作成が高度化・自動化しており、「 サイバー攻撃 」が進化しています。詐欺メールの信憑性が高まり、ターゲットに合わせた攻撃も可能です。また、無害な画像にマルウェアを隠す技術や、脆弱性を自動で攻撃するシステムも登場しているため、企業は最新のセキュリティ対策が不可欠です。

【デジタル寺田の3分用語解説】「 ダイバーシティ 」&「 インクルージョン 」(D&I)とは?🤝

デジタル寺田の3分用語解説

2024.12.16

【デジタル寺田の3分用語解説】「 ダイバーシティ 」&「 インクルージョン 」(D&I)とは?🤝

「 ダイバーシティ 」(多様性)と「 インクルージョン 」(包括性)は、性別や年齢、国籍、価値観、経験など、人々の持つ様々な違いを認識し、それを尊重しながら誰もが能力を最大限に発揮できる環境を作る考え方です。単に違いを受け入れるだけではなく、それを活かして共に成長していくことを目的としています。

【デジタル寺田の3分用語解説】 米司法省、Google社に対して「 Chrome の売却 」を要求🌐

デジタル寺田の3分用語解説

2024.12.16

【デジタル寺田の3分用語解説】 米司法省、Google社に対して「 Chrome の売却 」を要求🌐

米司法省は、Googleに対してWebブラウザ「 Chrome 」の売却を要求しています。これは、Googleの市場独占行動が競争を排除していると問題視したものです。Googleはこれに反論し「セキュリティや経済への悪影響」を警告しています。今後の裁判の行方に注目が集っています。