restlet.org ライブラリを使用して RESTful Web インターフェイスを構築しようとしていますが、対応するサーブレットとは異なり、GenericServlet.init() を補完するものがないことに気付きました。
スタートアップ ロジックを実行するために別のサーブレットを構築する以外に、最初の要求でデータベース ファクトリなどを構築することを回避する組み込みの方法はありますか (また、複数の初期化を回避するために必要なすべての相応のロック)。
サーブレットコンテナで実行したいですか? そうでない場合は、ドキュメントにスタンドアロンで実行する方法が示されています。
public static void main(String[] args) throws Exception {
// Create a new Component.
Component component = new Component();
// Add a new HTTP server listening on port 8182.
component.getServers().add(Protocol.HTTP, 8182);
// Attach the sample application.
component.getDefaultHost().attach("/firstSteps",
new FirstStepsApplication());
// Start the component.
component.start();
}
確かにそこで初期化を行うことができます。
サーブレット アプローチを使用する場合は、新しいサーブレットを作成して拡張してみてください。init メソッドを実装し、スーパー クラスのメソッドを呼び出します。
本当にサーブレット環境でこれを実行したい場合は、Webアプリケーション内に2つのサーブレットを含めることができます。1つはRestletアプリケーション/コンポーネント用で、もう1つは初期化用load-on-startup
です(これまでのところ、URLにマップする必要はありません)。私はあなたがそうする必要がないことを知っているので)。このように、サブクラス化する必要はありませんorg.restlet.ext.servlet.ServerServlet
。そのinitサーブレットにはが含まれているだけなので、これはおそらく簡単だと思いますがinit()
、これは、最初に初期化されるRestletアプリ/コンポーネントに依存しないものに対してのみ機能します。
<context-param>
<param-name>org.restlet.clients</param-name>
<param-value>HTTP HTTPS CLAP FILE</param-value>
</context-param>
<servlet>
<servlet-name>ExampleInit</servlet-name>
<servlet-class>example.TestInitServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>Example</servlet-name>
<servlet-class>org.restlet.ext.servlet.ServerServlet</servlet-class>
<init-param>
<param-name>org.restlet.application</param-name>
<param-value>example.TestApplication</param-value>
</init-param>
<init-param>
<param-name>org.restlet.autoWire</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Example</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
あるいは(またはおそらくこれを補完するものとして)、データベース接続と他のいくつかの構成設定を初期化するためにJNDIを使用する傾向があります。これにより、Restletスタンドアロンサーバーを使用する場合でも、Webアプリ内でRestletを使用する場合でも、同じ構成と読み込みメカニズムを維持できます。
たとえば、サーブレットコンテナ(JettyやTomcatなど)内でのデプロイには、コンテナのJNDI構成を使用しますが、ローカルテスト(スタンドアロンのRestletアプリを使用)には、Jetty JNDIコンテキストファクトリ(個別に取得できます)を使用します。残りの桟橋からのjar)。