我需要编写具有这些特性的Java系统。
- 当系统启动时,它需要创建一些在系统运行时需要永久生存的对象。同样在对象的构造函数上,将创建新线程,并且这些线程也需要在系统运行时生存。
- 系统需要公开将使用在启动时创建的对象的Web服务。
为了给出我需要做什么的上下文,我需要对应用程序进行编码,该应用程序在启动时会创建一些负责执行轮询任务的对象。此外,我需要一个使用这些对象来处理其请求的Web服务。
如何在Java中实现这些?我正在考虑使用Java EE来实现Web服务,还因为我计划实现一个使用Web服务的Web界面。但是我遇到的大问题是,如何在Java EE中实现自应用程序启动以来永久存在的线程?
答案 0 :(得分:2)
如果您真的不需要应用程序服务器,可以provide the webservice also in a J2SE environment。对于线程问题,您可能需要查看the Executor framework,您可以通过线程池轻松备份线程并安排Runnable重新开始工作(比如说每5秒)。但是,这通常不会与Java EE容器混合得很好,因为不鼓励自己产生线程。
答案 1 :(得分:2)
您可以编写一个实现Thread的类,稍后使用Singleton范围从该类创建一个对象,只要系统正在运行,它就会存在。 Spring是实现这一目标的一个很好的框架。
http://static.springsource.org/spring/docs/3.0.x/reference/beans.html#beans-factory-scopes-singleton
答案 2 :(得分:2)
如果您使用Java EE方式,则应考虑EJB Timer Service。
答案 3 :(得分: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>jdoe@test.test</value>
</list>
</property>
</bean>
此处,您希望在启动时初始化的任何对象都可以定义为Spring Singleton bean。这应该解决您的目的,而无需太多复杂的编码。