我正在构建客户端 - 服务器应用程序的服务器部分,它使用Web服务相互通信,使用Apache CXF实现。
在应用程序中,我希望有一个对象,它是在部署Web应用程序时创建的,直到它被停止和/或取消部署为止。
我们称之为MyBackend backend
。
我还希望拥有不同的网络服务,例如http://myserver.com/service1
和http://myserver.com/service2
,
backend
对象和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();
}
}
问题:
MyBackend
实例的状态是否会在不同的Web服务调用中保留(如上所述,只要应用程序在内部运行,我就需要此对象存活app容器)?MyBackend
实例(考虑到由于与数据库的连接,初始化可以持续很长时间)?答案 0 :(得分:2)
我强烈建议使用Spring和依赖注入来处理这个问题。您可以定义一个MyBackend
bean,然后将其注入服务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>