Java EE中的长生存线程
我需要使用这些特性对Java系统进行编码。Java EE中的长生存线程
- 当系统启动时,需要创建一些需要在系统运行时永久生存的对象。同样在对象的构造函数中,将创建新线程,并且在系统运行时这些线程也需要存活。
- 系统需要公开将使用在启动时创建的对象的Web服务。
为了给出我需要做什么的背景,我需要编写一个应用程序,当它启动时,它会创建一些负责执行轮询任务的对象。另外我需要一个使用这些对象来处理请求的Web服务。
如何在Java中实现这些功能?我正在考虑使用Java EE来实现Web服务,也是因为我打算实现一个使用Web服务的Web界面。但是我所拥有的大问题是,如何在Java EE中实现自应用程序启动后永远存在的线程?
如果你不是真的需要一个应用程序服务器,你可以provide the webservice also in a J2SE environment。对于线程问题,您可能希望看看the Executor framework,通过它您可以轻松地通过线程池备份您的线程,并安排Runnable按照正常工作(例如每5秒)进行工作。但是,这通常不会与Java EE容器很好地混合,因为自己产卵的线程不受欢迎。
您可以编写一个实现Thread的Class,稍后使用Singleton范围创建该类的对象,只要系统正在运行,它就会存活。 Spring是一个很好的框架来实现这一点。
http://static.springsource.org/spring/docs/3.0.x/reference/beans.html#beans-factory-scopes-singleton
你可以使用的是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>
在这里,你想在启动时被初始化可以定义为春季辛格尔顿豆的任何对象。这应该可以解决你的目的,不需要太复杂的编码。