2013-04-26 61 views
0

我是Jax-ws的新手,我有一個簡單的客戶端/服務器應用程序。我有一個接口,一個實現它的Scheduler類,以及一個將我的調度器發佈到localhost的發佈者類。我生成了存根,並有一個客戶端調用我的調度器上的方法。到目前爲止沒有問題。jax web服務,更新端點

當我想更改我的調度程序類時出現問題。如果我只保存更改並再次運行客戶端,則客戶端將使用舊的調度程序。如果我嘗試重新發布,我得到一個BindException,因爲這個端口已經在使用了(我知道它是,我正在使用它!)。我發現唯一的解決方法是每次發佈到不同的端口並更新存根到新端口,但這是一個可怕的解決方案。

是否有更簡單的方法來更新代碼並讓客戶端使用新的更改?

這裏是我的客戶:

package assignment2; 

import assignment2.endpoint.SchedulerInterface; 
import assignment2.endpoint.SchedulerService; 

public class Client { 
    public static void main(String [] args){ 
     SchedulerService service = new SchedulerService(); 
     SchedulerInterface scheduler = service.getSchedulerPort(); 
     System.out.println(scheduler.getSchedule("Tuesday")); 
    } 
} 

與發佈:

package assignment2; 

import javax.xml.ws.Endpoint; 

import assignment2.endpoint.Scheduler; 

public class Publisher { 
    public static void main(String [] args){ 
     Endpoint.publish("http://localhost:8082/WS/Scheduler", new Scheduler()); 
    } 
} 

任何幫助表示讚賞,如果需要,我可以提供任何其他代碼。

回答

1

更簡單的方法是重新發布以前發佈的服務。爲了做到這一點,你必須阻止它;所以不是

Endpoint.publish("http://localhost:8082/WS/Scheduler", new Scheduler()); 

僅保留端點對象的引用,並停止它,當時間來了:

Endpoint ep = Endpoint.create(new Scheduler()); 
ep.publish("http://localhost:8082/WS/Scheduler"); 
.. 
//STOP SIGNAL ARRIVED 
ep.stop(); 

這樣你就可以在同一端口上再次綁定,然後就重新運行客戶端(的當然,Scheduler類的更新必須是向後兼容的,即不允許更改接口)。