Java 将外部数据导入web应用程序

Java 将外部数据导入web应用程序,java,jsf,web-applications,Java,Jsf,Web Applications,我是一名经验丰富的应用程序开发人员,现在必须开发一个我没有太多经验的web应用程序 我正在从事一个有许多分布式服务器组件的项目。它目前有一个客户端应用程序,用于监视这些组件、查看报警和日志等。每个服务器机器的状态通过tcp/ip上的专有协议传递 当前基于UI的应用程序有一个线程,该线程持续监视套接字连接中的消息,并在收到消息后将所有内容的当前状态存储在内存中,然后将其显示给用户 我的问题是如何在web应用程序环境中实现类似的功能。我的第一个想法是在服务器启动时创建一个类似的comms线程,然后当

我是一名经验丰富的应用程序开发人员,现在必须开发一个我没有太多经验的web应用程序

我正在从事一个有许多分布式服务器组件的项目。它目前有一个客户端应用程序,用于监视这些组件、查看报警和日志等。每个服务器机器的状态通过tcp/ip上的专有协议传递

当前基于UI的应用程序有一个线程,该线程持续监视套接字连接中的消息,并在收到消息后将所有内容的当前状态存储在内存中,然后将其显示给用户

我的问题是如何在web应用程序环境中实现类似的功能。我的第一个想法是在服务器启动时创建一个类似的comms线程,然后当用户请求数据时,根据内存中的数据建立响应,但是阅读web应用程序启动自己的线程是不好的做法

我读过一些关于在web应用程序中使用Quartz或TimerTask来运行定期计划任务的文章,但这项任务更具连续性。还是这样吗

我正在使用JSF在Linux上运行Tomcat,用Java开发web应用程序。哦,应用程序将有少量并发用户。(最多25个,但更可能是2或3个)

方法1

使用是好的。建议不要使用TimerTask

方法2


我假设web应用程序具有某种数据库。由于您需要根据用户请求显示状态,所以您可以编写一个独立的守护程序应用程序(不是web应用程序),该应用程序读取服务器状态并更新web应用程序可见的表,这不是实时的。当用户提出请求时,可参考此表以生成输出

为什么要让这成为一个服务器问题?在客户端(浏览器)中,您可以轮询当前状态并根据需要调整显示。这样做可以消除很多复杂性


至于你的客户端将如何更新,这取决于你的应用程序。如果您只允许使用现代浏览器,那么您可以查看HTML5 WebSocket。其他选项包括使用AJAX部分更新屏幕或完全刷新屏幕。

更好的方法是使用消息驱动bean(Message Driven Bean,MDB)。web应用程序可以将消息发布到MDB,然后MDB完成所有需要执行的操作;)。连接到后端JSF组件(查询MDB设置的某种信号(在DB或缓存中)的AJAX的少量组合将实现类似的行为。的确,消息传递是一种更好的方法,但由于他使用的是Tomcat Web服务器而不是J2EE应用服务器,这是不可能的。TomEE+可能是一个选项:)。否则,我只会使用JBossAS7,它也是非常轻量级的。很好的选择,但仍然需要离开/更改现有的Tomcat服务器。由@ChillyMc决定。我不受使用Tomcat的限制,并愿意接受其他建议。除了已经在学习web应用程序之外,我更担心J2EE环境中的学习曲线!