2011-09-30 38 views
1

我正在创建一个JBoss服务器来部署一个Java应用程序,它将成为一个类似REST的servlet,从请求中提取数据并将它们放入SQL数据库。JBoss服务器上的Java应用程序中的“主循环”

我的主要问题:是否可以在JBoss服务器上设置一个类,该类不是基于请求运行的,而更像是一个主循环。即只是一个会“睡眠”的循环,然后检查一些信息,然后做一些事情或再次入睡。

基本上我试图做的是将一堆数据写入文件,一旦该文件填满某个点,一次写入数据库以减少连接开销。

我最好的猜测是我可以用循环编写任何类的类,并让它以我想要的方式运行(只要我的“睡眠”技术是正确的,以允许servlet在相同的JBoss时间跑)。

我不知道但是如何让主循环不断运行;只需在构造函数中调用它?我知道如何让服务器在服务器上运行的唯一方法是在web.xml中设置映射并主动向服务器发送网页请求信息... 是否有更好的(更容易阅读的)服务比JBoss和Java进行类似事先知道

谢谢,我已经搜索相当难的是这样的一个解释,但似乎我缺少正确的关键字...

回答

3

@Startup有一个look@Singleton豆。

总之,你可以写这样的事情:

@Startup @Singleton 
public class MainLoopBean { 

    @PostConstruct 
    public void mainLoop() { 
    } 

} 

理想情况下,你应该对夫妇这与timer service。当一些工作量完成并且你想暂停时,只需安排稍后调用的方法并返回即可。

+0

感谢您在进一步审查时的快速回复,这是我正在寻找的! – Adam

+0

不客气!很高兴它有帮助。 :) – Behrang

1

如果连接开销真的影响到您的性能,您可以在JBoss中更改连接池设置。这将使应用程序变得更简单,更健壮和可扩展。写入一个文件不会扩展到多个并行连接。它还需要比直接写入数据库更多的IO。

+0

好,我们还没有观察任何实际的数据,但性能问题。但是,这个想法是一群客户端(将在我们所有最终用户的机器上运行)将每个会话的一堆数据推送到这个分析数据库。我只是想,许多连接被打开和关闭是没有必要的。 虽然关于具有多个连接的单个文件,这是一个很好的观点。写一个“线程安全”的文件I/O将会困难得多。 – Adam

1

你为什么要考虑循环?为什么不设置一个JMS队列和一个监听器呢,就这样,一旦发生什么事情,你就可以回应。不需要循环,没有特殊的钩子,什么都不需要。另外,如果你真的有兴趣做更复杂的事情,可以看看Java连接器体系结构,它也为你提供了这些类型的钩子。

相关问题