2011-05-13 20 views
1

我需要使用这些特性对Java系统进行编码。Java EE中的长生存线程

- 当系统启动时,需要创建一些需要在系统运行时永久生存的对象。同样在对象的构造函数中,将创建新线程,并且在系统运行时这些线程也需要存活。

- 系统需要公开将使用在启动时创建的对象的Web服务。

为了给出我需要做什么的背景,我需要编写一个应用程序,当它启动时,它会创建一些负责执行轮询任务的对象。另外我需要一个使用这些对象来处理请求的Web服务。

如何在Java中实现这些功能?我正在考虑使用Java EE来实现Web服务,也是因为我打算实现一个使用Web服务的Web界面。但是我所拥有的大问题是,如何在Java EE中实现自应用程序启动后永远存在的线程?

回答

2

如果你不是真的需要一个应用程序服务器,你可以provide the webservice also in a J2SE environment。对于线程问题,您可能希望看看the Executor framework,通过它您可以轻松地通过线程池备份您的线程,并安排Runnable按照正常工作(例如每5秒)进行工作。但是,这通常不会与Java EE容器很好地混合,因为自己产卵的线程不受欢迎。

2

你可以使用的是Spring Timer任务来照顾你的轮询功能。声明弹簧计时器任务很简单 -

<bean id="scheduledTask" class="org.springframework.scheduling.timer.ScheduledTimerTask"> 
    <!-- wait 10 seconds before starting repeated execution --> 
    <property name="delay" value="10000"/> 
    <!-- run every 50 seconds --> 
    <property name="period" value="50000"/> 
    <property name="timerTask" ref="sendEmail"/> 
</bean> 
<bean id="sendEmail" class="examples.CheckEmailAddress"> 
    <property name="emailAddresses"> 
    <list> 
     <value>[email protected]</value> 
    </list> 
    </property> 
</bean> 

在这里,你想在启动时被初始化可以定义为春季辛格尔顿豆的任何对象。这应该可以解决你的目的,不需要太复杂的编码。