我只需要和想法来解决这种情况:我们制作了一个Swing应用程序来通过串口捕获数据,这个捕获会触发一些警报(以JPane呈现),同时这些信息存储在数据库中提供一些统计数据(使用JFreechart和JasperReports)。现在,我们希望在Web基础界面中呈现相同的信息,我们正在考虑通过Apache Tomcat 7应用程序的JSF + Primefaces。
统计数据不是问题,我们关注的是如何通知Web应用程序串口发生事件以显示与客户浏览器中显示的Swing应用程序捕获相同的警报?最终用户希望保留两种格式:本地视图(Swing)和用于管理器目的的Web视图。
我们的建议是正确的吗(Swing - > JSF + Primefaces)?还有其他选择吗?
感谢任何想法的进展
答案 0 :(得分:0)
我找到了解决问题的方法。我离开这里找到了我找到的解决方案,首先: 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用于将WS与Managedbean进行通信:
@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应用程序中的按钮,计数器都会在每台连接的机器中更新,这就是最终应用程序的想法。但是,为什么我必须重新部署Web应用程序才能使swing应用程序中的ws-client能够找到它?我是否在GF服务器中缺少任何配置以避免这种行为?