0

我正在构建客户端-服务器应用程序的服务器部分,它们使用 Web 服务相互通信,使用 Apache CXF 实现。

在应用程序中,我想要一个对象,该对象在部署 Web 应用程序时创建并一直存在,直到它停止和/或取消部署。

让我们称之为MyBackend backend

我也想拥有不同的网络服务,比如http://myserver.com/service1and http://myserver.com/service2

  1. 接收来自客户的请求,
  2. 将它们传递给backend对象并
  3. 将方法的返回值发送MyBackend回客户端。

我计划创建以下两个类,它们使用相同的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 和依赖注入来处理这个问题。您可以定义一个MyBackendbean,然后将其注入服务 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 回答