マジセミドライブ

ウェビナー関連のニュースや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)であるため、さまざまな方法でコンポーネント構成を実現できます。

 

参考元サイト

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

この記事のタグ一覧

おすすめの記事

【IT用語解説】「 デジタルヒューマン 」とは😊

IT用語解説

2024.01.26

【IT用語解説】「 デジタルヒューマン 」とは😊

【IT用語解説】「 デジタルヒューマン 」として、「デジタルヒューマンとは何か?」「どのようにして作成できるのか?」「私たちの世界にどのような影響を与えているのか?」などについて、まとめています。

【AIツール実験室】チャットAI対抗「添削能力」選手権🏆

AIツール実験室

2023.12.27

【AIツール実験室】チャットAI対抗「添削能力」選手権🏆

各チャットAIの「添削能力」について比較確認をしています。 「ChatGPT4と同等の添削能力を発揮した無料チャットAI」にご注目ください。 また、 ChatGPTカスタマイズ機能「GPTs」を利用して作成した GPTs文章添削機能「添削師匠さん✍️」を紹介しています。 課金勢は試しに使ってみてください。

AIツール関連 記事リストポータル

AIツール

2023.10.05

AIツール関連 記事リストポータル

AI 関連の記事をまとめたポータルページです。