0

Apache CXF を使用して実装された Web サービスを使用して相互に通信するクライアント サーバー アプリケーションのサーバー部分を構築しています。

アプリケーションでは、Web アプリケーションがデプロイされたときに作成され、停止またはアンデプロイされるまで存続するオブジェクトが必要です。

と呼びましょうMyBackend backend

http://myserver.com/service1また、やなどのさまざまな Web サービスも必要ですhttp://myserver.com/service2

  1. クライアントからのリクエストを受け、
  2. それらをbackendオブジェクトに渡し、
  3. MyBackendメソッドの戻り値をクライアントに送り返します。

の同じインスタンスを使用する次の 2 つのクラスを作成する予定ですMyBackend

@Path("/service1")
public class MyWebService1 {
    private MyBackend backend = ...;

    @POST
    @Produces("text/plain")
  public String performOperation1(@FormParam("request") final String aRequest)
  {
    return backend.doSomething();
  }
}


@Path("/service2")
public class MyWebService2 {
    private MyBackend backend = ...;

    @POST
    @Produces("text/plain")
  public String performOperation2(@FormParam("request") final String aRequest)
  {
    return backend.doSomethingDifferent();
  }
}

質問:

  1. このように Web サービスを実装すると、MyBackendインスタンスの状態はさまざまな Web サービス呼び出し間で保持されますか (上記で説明したように、アプリケーションがアプリ コンテナー内で実行される限り、このオブジェクトは有効である必要があります)。
  2. インスタンスをどこで作成および初期MyBackend化できますか (データベースへの接続のために初期化が長く続く可能性があることを考慮して) ?
  3. バックエンド オブジェクトのシャットダウン プロシージャはどこにありますか (データベースへの接続の切断など)。
4

1 に答える 1

2

これを処理するには、Spring と依存性注入を使用することを強くお勧めします。Bean を定義してMyBackendから、それをサービス Bean に注入できます。

<bean id="myBackend" class="com.whatever.MyBackend"/>

<bean id="service1Bean" class="com.whatever.MyWebService1">
  <property name="backend" ref="myBackend"/>
</bean>

<jaxrs:server id="service1" address="/">
  <jaxrs:serviceBeans>
    <ref bean="service1Bean" />
  </jaxrs:serviceBeans>
</jaxrs:server>
于 2013-04-23T10:16:55.737 に答える