我正在運行一項服務A它有一個類X。我打算在使用此類的同一臺機器上部署另一種服務BX。我怎樣才能確保相同的服務實例A被重用,而不是另一個。 PS:使用JAVA編寫的服務。如何重用Web服務的實例?
添加:這兩個服務都是Axis2服務。服務B是熱部署的。服務B使用類別X的延伸類別Y.
我正在運行一項服務A它有一個類X。我打算在使用此類的同一臺機器上部署另一種服務BX。我怎樣才能確保相同的服務實例A被重用,而不是另一個。 PS:使用JAVA編寫的服務。如何重用Web服務的實例?
添加:這兩個服務都是Axis2服務。服務B是熱部署的。服務B使用類別X的延伸類別Y.
難道我們試圖區分類,對象和服務。
你有這樣的事情嗎?
@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.你問如何做到這一點。它可以完成。您只需在實現中編寫JAX-WS客戶端調用。不過,我強烈建議不要這樣。服務調用可能比簡單的Java調用更昂貴。
只有在y6ou沒有選擇將兩個服務類一起部署的情況下才能執行此操作。
替代方案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
}
}
我知道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的,但你可以使用一個singleton pattern在您要使用的對象。
編輯:我想你應該有X類實現Singleton模式...
謝謝你的回覆! 我想從B調用A.目標是使用相同的代碼庫和基礎結構,即 - 重新使用已經運行的實例。 – 2009-09-30 10:31:46
好的,我明白了。我會稍微修改我的答案。 – djna 2009-09-30 10:37:08