jBPM4 on Weblogic 10.3

1. Weblogic 10.3 的配置
将 dom4j.jar, slf4j-api.jar, slf4j-jdk14.jar 放在Weblogic当前使用的Domain下面的lib目录下。

PS:
jBPM4的lib中带有slf4j-log4j12.jar及slf4j-jdk14.jar。slf4j-api.jar默认使用log4j,当
slf4j-log4j12.jar不存在时则使用jdk14.jar。此次我们使用jdk的log机制,故不将slf4j-log4j12.jar放入
web工程或weblogic的lib目录

需要将antlr.jar配置入 Weblogic 当前 Domian 下的
setDomainEnv.sh (.bat for windows),在其中 "PRE_CLASSPATH="
后添加antlr.jia的路径。我这里使用的是antlr-2.7.6.jar

需要在setDomainEnv.sh (.bat for windows) 文件末设置JAVA_OPTIONS
JAVA_OPTIONS="${JAVA_OPTIONS} -Djavax.xml.parsers.SAXParserFactory=com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl"
export JAVA_OPTIONS
如此设置是由于错误
org.xml.sax.SAXNotRecognizedException: SAX feature ‘http://apache.org/xml/features/validation/dynamic‘ not recognized.
该错误产生的原因是Weblogic扩展的SAX中有一个方法重载的Bug,粗心的开发人员漏掉了"c",这里推荐同事11.xu的博文://TODO

需要在应用的META-INF/weblogic-application.xml中配置如下
<weblogic-application>

<prefer-application-packages>
<package-name>antlr.*</package-name>
</prefer-application-packages>

</weblogic-application>

进行这些配置的原因是服务器报出classDefNotFoundException,主要是因为 Weblogic 中有相同的包并且包的版本不统一,现有工程无法使用 Weblogic 中的 jar 包

2. 应用的配置
由于在jBPM4中使用了异步调用(async)、定时器(timer)等功能,这些功能在jBPM4中均作为一个Job进行处理。故需要为应用配置JobExecutor,以便当应用启动时,JobExecutor自动在数据库中检索并执行可执行的Job。

在应用的web.xml中添加如下内容

<web-app>

<servlet>
<servlet-name>JobExecutorServlet</servlet-name>
<servlet-class>
org.jbpm.pvm.internal.jobexecutor.JobExecutorServlet
</servlet-class>

<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>JobExecutorServlet</servlet-name>
<url-pattern>/jobexecutor</url-pattern>
</servlet-mapping>

</web-app>

同时jBPM4工程作出如下更改
修改jbpm.cfg.xml,添加
<import resource="jbpm.jobexecutor.cfg.xml" />

在jBPM4工程下添加配置文件jbpm.jobexecutor.cfg.xml,并在其中写入如下内容
<?xml version="1.0" encoding="UTF-8"?>
<jbpm-configuration>
<process-engine-context>
<job-executor threads="4" idle="15000" idle-max="60000" lock-millis="3600000" />
</process-engine-context>
</jbpm-configuration>

关于参数的内容含义,参见jbpm Developers Guide

这样当应用启动时,JobExecutor即将开始执行。