`

jbpm3.2.2 中启用timer服务

阅读更多
在项目中没有使用hibernate.cfg.xml 配置文件
而是在spring中管理了hibernate的实体映射关系 和数据源

在流程定义文件中的任务中定义timer属性
timer属性
duedate(必须)Timer创建后再要多长时间触发timer里设定的动作
repeat 表示当Timer执行之后再每隔多久再触发执行一次Timer


如何启用jbpm3.2.2的timer服务

在web.XML中,使用JobExecutorServlet来启动
<!-- JbpmJobExecutorServlet --> 
  <servlet>
<servlet-name>JobExecutorServlet</servlet-name>
<servlet-class>
org.jbpm.job.executor.JobExecutorServlet
</servlet-class>
<load-on-startup>3</load-on-startup>
  </servlet>
  <servlet-mapping>
<servlet-name>JobExecutorServlet</servlet-name>
<url-pattern>/jobs</url-pattern>
  </servlet-mapping>


由于没有hibernate的配置文件
所有会出现异常

解决办法:
修改JobExecutorServlet

package org.jbpm.job.executor;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Collection;
import java.util.Iterator;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.jbpm.JbpmConfiguration;
import org.springframework.web.context.support.WebApplicationContextUtils;
import org.springmodules.workflow.jbpm31.JbpmTemplate;

public class JobExecutorServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

JbpmConfiguration jbpmConfiguration;
//修改了JobExecutorServlet里获取JbpmConfiguration的方式
public void init() throws ServletException {
JbpmTemplate jbpmTemplate = (JbpmTemplate) WebApplicationContextUtils
.getWebApplicationContext(this.getServletContext()).getBean(
"jbpmTemplate");
jbpmConfiguration = jbpmTemplate.getJbpmConfiguration();
CustomJobExecutor.setJbpmConfiguration(jbpmConfiguration);
jbpmConfiguration.startJobExecutor();
}

protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<body>");
out.println("<h2>JBoss jBPM Scheduler Servlet</h2><hr />");
Collection threads = jbpmConfiguration.getJobExecutor().getThreads()
.values();
Iterator iter = threads.iterator();
while (iter.hasNext()) {
Thread thread = (Thread) iter.next();
out.println("<h4>" + thread.getName() + "</h4>");
out.println("<b>isAlive</b>:" + thread.isAlive());
}
out.println("</body>");
out.println("</html>");
}
}


添加CustomJobExecutor.JAVA
package org.jbpm.job.executor;

import org.jbpm.JbpmConfiguration;

public class CustomJobExecutor extends JobExecutor{
public static JbpmConfiguration jbpmConfig;
public synchronized void start() {
jbpmConfiguration = jbpmConfig;
super.start();
}
public static void setJbpmConfiguration(JbpmConfiguration config){
jbpmConfig=config;
}
}

在spring的配置文件中加入以下bean
<!-- JbpmTemplate是在Spring中访问Jbpm相关方法的接口对象,利用JbpmTemplate我们可以快速操作Jbpm里提供的方法接口 -->
  <bean id="jbpmTemplate"      class="org.springmodules.workflow.jbpm31.JbpmTemplate">
<constructor-arg index="0" ref="jbpmConfiguration" />
  </bean>


修改 jbpm.CFG.XML
<bean name="jbpm.job.executor" class="org.jbpm.job.executor.JobExecutor">
    <field name="jbpmConfiguration"><ref bean="jbpmConfiguration" /></field>
    <field name="name"><string value="JbpmJobExector" /></field>
    <field name="nbrOfThreads"><int value="1" /></field>
    <field name="idleInterval"><int value="5000" /></field>
    <field name="maxIdleInterval"><int value="3600000" /></field> <!-- 1 hour -->
    <field name="historyMaxSize"><int value="20" /></field>
    <field name="maxLockTime"><int value="600000" /></field> <!-- 10 minutes -->
    <field name="lockMonitorInterval"><int value="60000" /></field> <!-- 1 minute -->
    <field name="lockBufferTime"><int value="5000" /></field> <!-- 5 seconds -->
  </bean>


  <bean name="jbpm.job.executor" class="org.jbpm.job.executor.CustomJobExecutor">
    <field name="jbpmConfiguration"><ref bean="jbpmConfiguration" /></field>
    <!--field name="jbpmConfiguration"><ref bean="jbpmConfiguration" /></field-->
    <field name="name"><string value="JbpmJobExector" /></field>
    <field name="nbrOfThreads"><int value="1" /></field>
    <field name="idleInterval"><int value="5000" /></field>
    <field name="maxIdleInterval"><int value="3600000" /></field> <!-- 1 hour -->
    <field name="historyMaxSize"><int value="20" /></field>
    <field name="maxLockTime"><int value="600000" /></field> <!-- 10 minutes -->
    <field name="lockMonitorInterval"><int value="60000" /></field> <!-- 1 minute -->
    <field name="lockBufferTime"><int value="5000" /></field> <!-- 5 seconds -->
  </bean>

源地址:http://yang52081.iteye.com/blog/172222
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics