我使用网络个人资料,但不允许使用Java EE @Schedule 功能。所以,我有几种方法可以解决这个问题:
那么,这是在我的glassfish应用程序中启用调度的最佳方法吗?
由于
答案 0 :(得分:1)
我们在Spring中使用Quartz开源作业调度程序在其他项目上有很多运气,所以我强烈推荐它用于调度。您可以将调度程序配置为从Servlet(可以注入CDI bean)启动,并且计划的作业可以调用EJB无状态会话Bean(您也可以在其中注入CDI bean)。
以下是一些链接 - 希望这有帮助!
答案 1 :(得分:1)
好的,我设法使用弹簧模块。最好使用嵌入式Scheduler J2EE功能,但这不包含在Glassfish Web配置文件中,只包括完整(WTF ??)。由于我的项目是prod,我不想升级到完整项目,特别是因为没有灵活的方法来进行此升级。只有完整服务器替代。非常差的JavaEE ....
因此,首先,我们需要定义一些将按计划运行的功能:
@Scope(value="application")
public class ClosePolisesTimer {
BusinessAttirbuteDAO attributeDAO;
@Scheduled(cron="0 0 0 * * *")
public void doCloseObsolete() {
// ...
}
}
其次,我们应该使用以下配置创建spring配置文件:
<bean id="businessAttributeDAOBean" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:global/KaskoCalculator/BusinessAttirbuteDAO" />
</bean>
<bean id="ClosePolisesTimer" class="com.rstk.kasko.bean.service.ClosePolisesTimer">
<aop:scoped-proxy />
<property name="polisDAO" ref="polisDAOBean" />
<property name="attributeDAO" ref="businessAttributeDAOBean" />
</bean>
<task:annotation-driven scheduler="closePolisExecutor"/>
<task:scheduler id="closePolisExecutor" pool-size="1"/>
这就是全部。我定义EJB bean并使用“aop:scoped-proxy”来初始化我的调度程序。弹簧计划包含在核心弹簧模块中,因此只需要核心弹簧依赖性