Jakarta Tomcat/Embed
Web アプリケーションを作りたい。ユーザに Servlet コンテナをセットアップさせる手間を省くために、 Servlet コンテナ込みで配布したい。 Tomcat をフルで配布するのは容量が大きすぎる。
そんなときは Embed Tomcat を利用しましょう。というわけで、 Embed Tomcat の使い方です。ここでは Embed Tomcat 5.5.12 を使用します。
catalina.home システム プロパティを参照するようです。 java コマンドで指定するか、以下のように設定するといいでしょう。
何も指定しないと、カレント ディレクトリを catalina.home とするようです。
org.apache.catalina.startup.Embedded クラスが組み込み Tomcat サーバを表します。次のようにインスタンスを生成します。
このインスタンスに、エンジン、レルム、コネクタなどなどを追加します。
Tomcat の Servlet エンジンです。 org.apache.catalina.Engine インターフェイスのがエンジンを表します。次のようにインスタンスを生成します。
エンジン上の仮想ホストです。この上でコンテキストを公開することになります。 org.apache.catalina.Host インターフェイスがホストを表します。次のようにインスタンスを生成します。
Embedded#createHost() メソッドの、第 1 引数はホストの名前、第 2 引数はホストの実際のディレクトリ パス (この場合は、カレント ディレクトリからの相対パス) です。
Web アプリケーションです。 org.apache.catalina.Context インターフェイスがコンテキストを表します。次のようにインスタンスを生成します。
Embedded#createContext() メソッドの、第 1 引数はコンテキストのホスト上のパス、第 2 引数は実際のディレクトリ パス (この場合は、ホストのディレクトリからの相対パス) です。
レルムは org.apache.catalina.Realm インターフェイスが表しますが、 org.apache.catalina.realm パッケージに格納されているレルム パッケージを参照するべきです。
よく使用されるメモリ レルムは org.apache.catalina.realm.MemoryRealm クラスです。ありがちな、 conf/tomcat-users.xml を使用するアレです。次のようにインスタンス化します。
MemoryRealm#setPathname() メソッドで任意の XML ファイルを使用することもできます。
TCP/IP ベースのコネクタです。 org.apache.catalina.connector.Connector クラスがコネクタを表します。次のようにインスタンス化します。
Embedded#createConnector() メソッドの、第 1 引数はバインドする IP アドレス (null の場合は全てのアドレス) 、第 2 引数はリスンするポート番号、第 3 引数は SSL をサポートしたコネクタを生成するかどうか (true で SSL をサポートしたコネクタを生成) です。
とりあえず、以上で設定完了です。次に起動します。
このメソッドは Tomcat が起動したら処理が戻ります。 main スレッドが終了しても Tomcat のスレッドは生きているので、ちゃんと Tomcat を終了させる必要があります。
これで Tomcat は終了します。具体的には、以下のように組み合わせて使うといいでしょう。
そんなときは Embed Tomcat を利用しましょう。というわけで、 Embed Tomcat の使い方です。ここでは Embed Tomcat 5.5.12 を使用します。
サーバの基底ディレクトリ
catalina.home システム プロパティを参照するようです。 java コマンドで指定するか、以下のように設定するといいでしょう。
System.setProperty("catalina.home", "C:/embed-tomcat");
何も指定しないと、カレント ディレクトリを catalina.home とするようです。
組み込みサーバ (Embedded クラス)
org.apache.catalina.startup.Embedded クラスが組み込み Tomcat サーバを表します。次のようにインスタンスを生成します。
Embedded embedded = new Embedded();
このインスタンスに、エンジン、レルム、コネクタなどなどを追加します。
エンジン
Tomcat の Servlet エンジンです。 org.apache.catalina.Engine インターフェイスのがエンジンを表します。次のようにインスタンスを生成します。
Engine engine = embedded.createEngine(); engine.setName("uguu"); // エンジンの名前。 engine.setDefaultHost("uguu-host"); // 既定のホスト。 embedded.addEngine(engine);
ホスト
エンジン上の仮想ホストです。この上でコンテキストを公開することになります。 org.apache.catalina.Host インターフェイスがホストを表します。次のようにインスタンスを生成します。
Host uguuHost = embedded.createHost("uguu-host", webapps"); engine.addChild(uguuHost);
Embedded#createHost() メソッドの、第 1 引数はホストの名前、第 2 引数はホストの実際のディレクトリ パス (この場合は、カレント ディレクトリからの相対パス) です。
コンテキスト
Web アプリケーションです。 org.apache.catalina.Context インターフェイスがコンテキストを表します。次のようにインスタンスを生成します。
Context rootCtx = embedded.createContext("", "ROOT"); uguuHost.addChild(rootCtx);
Context managerCtx = embedded.createContext("/manager", "manager"); uguuHost.addChild(managerCtx);
Embedded#createContext() メソッドの、第 1 引数はコンテキストのホスト上のパス、第 2 引数は実際のディレクトリ パス (この場合は、ホストのディレクトリからの相対パス) です。
レルム
レルムは org.apache.catalina.Realm インターフェイスが表しますが、 org.apache.catalina.realm パッケージに格納されているレルム パッケージを参照するべきです。
よく使用されるメモリ レルムは org.apache.catalina.realm.MemoryRealm クラスです。ありがちな、 conf/tomcat-users.xml を使用するアレです。次のようにインスタンス化します。
MemoryRealm realm = new MemoryRealm(); embedded.setRealm(realm);
MemoryRealm#setPathname() メソッドで任意の XML ファイルを使用することもできます。
コネクタ
TCP/IP ベースのコネクタです。 org.apache.catalina.connector.Connector クラスがコネクタを表します。次のようにインスタンス化します。
Connection conn = embedded.createConnector((InetAddress) null, 8080, false); embedded.addConnector(conn);
Embedded#createConnector() メソッドの、第 1 引数はバインドする IP アドレス (null の場合は全てのアドレス) 、第 2 引数はリスンするポート番号、第 3 引数は SSL をサポートしたコネクタを生成するかどうか (true で SSL をサポートしたコネクタを生成) です。
起動、終了
とりあえず、以上で設定完了です。次に起動します。
embedded.start();
このメソッドは Tomcat が起動したら処理が戻ります。 main スレッドが終了しても Tomcat のスレッドは生きているので、ちゃんと Tomcat を終了させる必要があります。
embedded.stop();
これで Tomcat は終了します。具体的には、以下のように組み合わせて使うといいでしょう。
embedded.start(); System.in.read(); embedded.stop();
参照
2005年12月24日(土) 06:05:30 Modified by uguuxp