我找到了解決問題的方法。我在這裏留下了我找到的解決方案,第一個: 1.爲了測試解決方案,我使用了Glassfish 3.1.2.2而不是Tomcat 7,Netbeans 7.3和PrimeFaces 3.5 2.我根據這個tutorial做了一個示例應用程序。 3.我實現了PrimeFaces演示頁面的PimePush Counter示例。 4.我做了一個Swing應用程序,用一個按鈕來模擬串行端口捕捉的動作,這個應用程序使用ws來推送Web應用程序中的內容。 5. GF支持啓用彗星和Web套接字。
但是,有一個問題,每次我重新啓動Glassfish時,都需要取消部署應用程序,並且他們需要重新部署才能使Web服務可用。爲什麼這個?,我錯過了一些事件?
下面的代碼:
的WS類:
@WebService(serviceName = "BotonService")
@Stateless
public class BotonService {
private boolean push = false;
@EJB
private ServiceShare servicio;
/**
* This is a sample web service operation
*/
@WebMethod(operationName = "hello")
public String hello(@WebParam(name = "name") String txt) {
return "Hello " + txt + " !";
}
/**
* Web service operation
*/
@WebMethod(operationName = "setPush")
public void setPush(@WebParam(name = "push") boolean push) {
this.push = push;
servicio.setPush(push);
servicio.firePush();
}
/**
* Web service operation
*/
@WebMethod(operationName = "getPush")
public Boolean getPush() {
return this.push;
}
}
這裏ManagedBean類:
@Stateless
@ManagedBean(name = "globalCounter")
@ApplicationScoped
public class GlobalCounterBean implements Serializable {
private int count;
private String CHANNEL = "/counter";
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public synchronized void increment() {
count++;
PushContext pushContext = PushContextFactory.getDefault().getPushContext();
pushContext.push(CHANNEL, String.valueOf(count));
}
}
而且這裏的EJB使用與Managedbean溝通WS:
@Stateless
public class ServiceShare {
@EJB
private GlobalCounterBean counter;
private boolean push = false;
public boolean getPush() {
return push;
}
public void setPush(boolean push){
this.push = push;
}
public void firePush(){
if(this.push){
counter.increment();
}
}
}
JSF頁面與PrimeFaces演示中的頁面完全相同。
每當我按下我製作的搖擺應用程序中的按鈕,計數器就會在每臺連接的機器上更新,這就是最終應用程序的想法。但是,爲什麼我必須重新部署Web應用程序,以便swing應用程序中的ws-client可以找到它?有沒有我在GF服務器中缺少的配置來避免這種行爲?
看起來合理 - Primefaces擁有[comet support](http://www.primefaces.org/showcase/ui/home.jsf),我猜這將是至關重要的,因爲服務器需要通知clinets關於異步事件。 – dratewka 2013-05-10 14:04:59
好的,但我該如何將異步事件發送到Web應用程序? – 2013-05-10 14:13:38
那麼這取決於這些事件的數量。一種可能性是創建託管在您的服務器上的Web服務,該應用程序可以調用該服務來通知事件。另一種可能性是在Web服務器的單獨線程上運行端口監視邏輯。 – dratewka 2013-05-10 20:04:13