繁体   English   中英

Java EE中的长寿命线程

[英]Long living threads in Java EE

我需要编写具有这些特征的Java系统。

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

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

为了给出我需要做什么的上下文,我需要编写一个应用程序代码,使其在启动时创建一些负责执行轮询任务的对象。 我还需要一个使用这些对象来处理其请求的Web服务。

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

如果您确实不需要Application Server,则可以在J2SE环境中提供Web服务 对于线程问题,您可能需要看一下Executor框架,利用该框架可以轻松地通过线程池备份线程,并计划Runnable定期进行工作(例如每5秒钟一次)。 但是,这通常与Java EE容器不能很好地结合使用,因为不鼓励自己生成线程。

您可以编写一个实现Thread的类,然后在Singleton范围内从该类创建一个对象,只要系统正在运行,它就将一直存在。 Spring是实现此目标的绝佳框架。

http://static.springsource.org/spring/docs/3.0.x/reference/beans.html#beans-factory-scopes-singleton

如果要使用Java EE,则应考虑使用EJB Timer Service

您可以使用Spring Timer任务来维护您的轮询功能。 宣告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>jdoe@test.test</value>
     </list>
  </property>
</bean>

在这里,您要在启动时初始化的任何对象都可以定义为Spring Singleton Bean。 这应该解决您的目的,而无需太多复杂的编码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM