Swing,串口和JSF

时间:2013-05-10 13:23:54

标签: java swing jsf serial-port

我只需要和想法来解决这种情况:我们制作了一个Swing应用程序来通过串口捕获数据,这个捕获会触发一些警报(以JPane呈现),同时这些信息存储在数据库中提供一些统计数据(使用JFreechart和JasperReports)。现在,我们希望在Web基础界面中呈现相同的信息,我们正在考虑通过Apache Tomcat 7应用程序的JSF + Primefaces。

统计数据不是问题,我们关注的是如何通知Web应用程序串口发生事件以显示与客户浏览器中显示的Swing应用程序捕获相同的警报?最终用户希望保留两种格式:本地视图(Swing)和用于管理器目的的Web视图。

我们的建议是正确的吗(Swing - > JSF + Primefaces)?还有其他选择吗?

感谢任何想法的进展

1 个答案:

答案 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服务器中缺少任何配置以避免这种行为?