今天将JBPM5整合成两个Bundle,服务端一个Bundle,客户端一个Bundle。
之前整了一天,试图JBPM5提供的Bundle以标准OSGI调用的形式去整合,没有成功,考虑到不需要和其他Bundle共用服务,就把依赖jar包全部放到服务端和客户端自己的CLASSPATH下,开始也不行,最后逐个增加jar包,最后成功了。之前担心的是Hibernate的持久化问题,因为我们之前整合Felix、SSH的时候由于Hibernate没有提供很好的OSGI支持,而花了较大的力气。具体原因,由于项目太紧没有来得及整合,以后再研究吧。先把成果公布出来,希望对网友有用,网上这方面的资料太少了。甚至是JBoss官方也没有什么资料和例子。
需要关注的地方,有以下的地方:
1)服务端依赖jar包:
lib/antlr-2.7.7.jar,
lib/commons-collections-3.1.jar,
lib/dom4j-1.6.1.jar,
lib/drools-compiler-5.2.0.Final.jar,
lib/drools-core-5.2.0.Final.jar,
lib/hibernate-annotations-3.4.0.GA.jar,
lib/hibernate-commons-annotations-3.1.0.GA.jar,
lib/hibernate-core-3.3.0.SP1.jar,
lib/hibernate-entitymanager-3.4.0.GA.jar,
lib/javassist-3.4.GA.jar,
lib/jbpm-flow-5.1.0.Final.jar,
lib/jbpm-flow-builder-5.1.0.Final.jar,
lib/jbpm-human-task-5.1.0.Final.jar,
lib/jbpm-persistence-jpa-5.1.0.Final.jar,
lib/jta-1.1.jar,
lib/knowledge-api-5.2.0.Final.jar,
lib/mina-core-2.0.0-RC1.jar,
lib/mvel2-2.1.Beta3.jar,
lib/ojdbc6.jar,
lib/persistence-api-1.0.jar,
lib/slf4j-api-1.6.0.jar
2)客户端依赖jar包:
lib/drools-compiler-5.2.0.Final.jar,
lib/drools-core-5.2.0.Final.jar,
lib/ecj-3.5.1.jar,
lib/jbpm-bpmn2-5.1.0.Final.jar,
lib/jbpm-flow-5.1.0.Final.jar,
lib/jbpm-flow-builder-5.1.0.Final.jar,
lib/jbpm-human-task-5.1.0.Final.jar,
lib/knowledge-api-5.2.0.Final.jar,
lib/mina-core-2.0.0-RC1.jar,
lib/mvel2-2.1.0.drools4.jar,
lib/slf4j-api-1.6.0.jar,
lib/xstream-1.3.1.jar,
3)服务端的persistence.xml和orm.xml要放在自己bundle的META-INF文件夹下,另外要在persistence.xml文件中加入:<mapping-file>META-INF/orm.xml</mapping-file>,否则找不到orm.xml文件,就会报找不到UnescalatedDeadlines的错误,这个调的时候废了点劲,是通过调试源码发现问题的,原因是OSGI平台固有的特点引起的,是Classloader的问题。
4)注意,这个只能在Myeclipse自带的Equinox上运行,后来放在Felix上运行时出了很多问题,具体问题以后文章中会讲到。