[英]How can I reuse an instance of a webservice?
我运行的服务A的类别为X。 我将在使用此类X的同一台计算机上部署另一个服务B。 如何确保服务A的同一实例被重用,而不是另一个。
PS:用JAVA编写的服务。
添加:这两个服务都是Axis2服务。 服务B已热部署。 服务B使用了Y类,它是X类的扩展。
我们能否尝试区分类,对象和服务。
你有这样的东西吗?
@javax.jws.WebService
public class ServiceAAA{
public String echo(String arg) {
// some really nice code here
}
}
而你想添加
@javax.jws.WebService
public class ServiceBBB{
public String superEcho(String arg) {
// even more code here
// which needs to reuse the code from A's echo()
}
}
显然,我们不想在这两种实现之间进行剪切和粘贴。 我们如何重用?
选择1:
直接从B呼叫A。您正在询问该怎么做。 可以做到的。 您只需在实现中编写一个JAX-WS客户端调用的代码即可。 但是,我强烈建议不要这样做。 服务调用可能比简单的Java调用更昂贵。
仅当y6ou无法选择将两个服务类一起部署时,才执行此操作。
选择2:
重构实现。 只需将代码移到worker类中即可。
@ javax.jws.WebService公共类ServiceAAA {
MyWorker worker = new Worker();
public String echo(String arg) {
return worker.doSomething(arg) ;
}
}
@ javax.jws.WebService公共类ServiceBBB {
MyWorker worker = new Worker();
public String superEcho(String arg) {
worker.doSomething(arg) ;
// and some morestuff
}
}
我知道A也会使用X类,而B也会使用。
将两个Web服务A和B配置为使用对象X的相同实例。可以通过多种方式来完成此配置,例如:
setX(x)
将其分配给每个webService。 例:
@javax.jws.WebService
public class A implements WebService {
public static final X x = new X();
public void methodA() {
// use x
}
}
@javax.jws.WebService
public class B implements WebService {
private Y y = new Y(A.x);
public void methodB() {
// use y that uses x.
y.methodY();
}
}
public class Y {
private final X x;
public Y(X x) {
this.x = x;
}
public void methodY() {
// use x, it is the same instance as in A
}
}
不懂Java,但是您可以在尝试使用的对象上使用单例模式 。
编辑:我认为您应该让X类实现单例模式...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.