我正在运行 A 服务,该服务有一个 X 类。我将在使用此类 X 的同一台计算机上部署另一项服务 B 。如何确保重复使用相同的服务实例 A 而不是其他服务。
PS:用JAVA编写的服务。
添加:这两项服务都是Axis2服务。服务B是热部署的。服务B使用Y类,它是X类的扩展。
答案 0 :(得分:1)
我们可以尝试区分类,对象和服务。
你有类似的东西吗?
@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调用更昂贵。
如果你没有选择一起部署这两个服务类,那么只能这样做。
备选方案2:
重构实施。只需将代码移动到工人类中即可。
@ 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
}
}
答案 1 :(得分:0)
我知道A使用的是X类和B的对象。
配置两个webServices 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
}
}
答案 2 :(得分:0)
不知道java,但你可以在你试图使用的对象上使用singleton pattern。
编辑:我认为你应该让类X实现单例模式...