为基于控制台的应用程序创建控制台的最佳实践

时间:2012-02-01 17:11:27

标签: java console

为了改进控制台应用程序,我已经提出了一些新功能来跟踪例如线程的状态(这些线程负责监视来自不同源的数据)。所以我想要做的是创建某种机制,这将允许我查询我的应用程序的状态。以下方法是我想要实现的方法:
1)简单的线程监听用户输入并检查一些变量或在监视线程上调用一些函数。实现起来相当简单,但至少有一个问题我没有看到绕过它的方法:应用程序可以运行monthes,如果我想访问使用SSH运行它的机器,将无法使用我的“控制台“
2)创建一些RMI或一些套接字接口,可以通过另一个简单的程序连接,发送命令和接收响应。在我看来,最合适的方法,更难以实施,但可以是非常强大的 3)最后和最简单的问题,不是控制台,但可以满足我的需要是将数据写入某个文件并在读取文件后。我没有执行此操作,因为它根本不是交互式的。

问题是:除了提供的应用程序之外,还有更好的方法来实现某些Java应用程序的控制台吗?

非常感谢,
谢尔盖。

3 个答案:

答案 0 :(得分:2)

我不明白你拒绝选项1的原因。

现在很容易托管一个小型Web服务器来发布这些统计数据。只需使用小仪表板运行嵌入式jetty实例。

如果您不想重新发明轮子,JMX bean会免费提供大量这些线程统计信息。

CodaHale是与JMX和Graphite

等工具集成的另一种解决方案

答案 1 :(得分:0)

最佳解决方案类似于您对RMI的想法。如果您愿意,可以使用不同的技术,但允许应用程序接受新监控连接的想法至关重要。

文件库解决方案(就像你在#3中概述的那样)成为文件丢失,磁盘空间不足等的牺牲品。像你在#1中提到的解决方案成为不能正确处理来自不同用户空间的访问的受害者。

使用RMI(或类似的,如CORBA,SOAP,Web服务等),您可以获得适当的网络,允许人们在不同的机器上(或仅在不同的进程空间中)进行通信。这是很多价值(和一些代码),但它远没有工作一半完成的头痛。

答案 2 :(得分:0)

如果通过控制台你的意思是一个控制台应用程序(即读取stdin并写入stdout),那么你可以尝试linux命令屏幕,它可以创建一个可以从实际终端分离的虚拟终端。因此,例如,可以在屏幕上启动程序,分离,注销,稍后返回ssh,附加到之前的屏幕会话,问题仍在运行。

那就是说,我认为使用监控页面在tomcat / jetty中进行战争是一个更好的主意。