問題を解決する方法を見つけました。最初に見つけたソリューションをここに残しました。 1. ソリューションをテストするために、Tomcat 7、Netbeans 7.3、および PrimeFaces 3.5 の代わりに Glassfish 3.1.2.2 を使用しました。 2. このチュートリアルに基づいてサンプル アプリケーションを作成しました。3. PrimeFaces デモページの PimePush Counter サンプルを実装しました。4. シリアル ポート キャプチャのアクションをシミュレートするボタンを備えた Swing アプリケーションを作成しました。このアプリは ws を使用して Web アプリケーションにコンテンツをプッシュします。5. GF では、comet と 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));
}
}
ここでは、WS と Managedbean との通信に使用される EJB を示します。
@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 デモとまったく同じです。
私が作ったswingアプリケーションのボタンを押すたびに、接続されている各マシンでカウンターが更新されます。これが最終的なアプリケーションのアイデアです. しかし繰り返しになりますが、swing アプリケーションの ws-client が Web アプリケーションを見つけられるようにするために、なぜ Web アプリケーションを再デプロイする必要があるのでしょうか? その動作を回避するために、GF サーバーに欠けている構成はありますか?