ODE是一个开源的BPEL语言引擎(它的介绍可以看我的其他BPEL标签下的文章),使用它的源码进行修改来构造符合定制需求的一个新的业务流程执行引擎。由于我对Eclipse平台相对较为熟悉,所以想办法将ODE的源码通过Eclipse工程的方式重现出来,这样便于二次开发。在导入Eclipse工程的过程中,出现了很多问题,下面将详细的讲述具体每一步如何进行操作,并对我所遇到的问题进行解决。
从ODE官方网站下载的源码包(使用http方式下载,没有使用svn),解压之后只是纯代码,包括测试用代码、一些配置文件。但没有依赖的第三方包,也没有相应的Eclipse工程文件,也就是说无法直接导入到Eclipse环境中进行开发的,首先使用ODE官网上的说法使用ruby工具进行构建,这里可以参考下构建ODE和编译Eclipse工程。虽然都是英文,但还都是简单易懂的。照上面的文章将会生成大概20多个工程,因为ApacheODE的工程师们不是通过Eclipse开发的,他们使用Ruby的工具,buildr来构建项目,多个工程之间的依赖关系通过buildr来完成的。
这20多个Eclipse工程虽然可以通过import的方式导入到Eclipse环境下,但是还不能运行。首先,很多第三方Jar包没有导入,这些jar文件是你在刚才编译的时候通过maven这个工具自动下载了,一般目录在C:\Documents and Settings\Administrator\.m2\repository下,你需要在你的Eclipse种设置一个变量来指向这些jar(可以看我的另一篇文章Eclipse导入jar),从而很容易的导入。
接下来,ODE项目为一个WEB工程,其最终的部署运行是放在Tomcat中进行的,故需要为其创建一个WEB工程,导入源码,调整好各个包之间的依赖关系。
注意:下载之后的源码是分为很多个工程的(刚才已经说过),可以将其中的各个src包中的java源码copy出来,组成一个工程(这个工作必须非常小心,各个工程中的所有源码包都必须拷贝出来,并且正确的放在不同的包中,可以在Eclipse环境下作这个工作,相对较为容易),这样便于调试、和查看。还需要将刚才提到的所有jar文件导入到工程中,在项目编译的过程中,你还会看到很多的错误信息,大部分都是jar文件找不到,或者版本不对(这个问题大概缠绕了我3天时间),然后你需要一个一个的解决。很枯燥!
然后,再将ode-war包下的axis2-web文件夹拷贝到工程中的webcontent文件夹下,这样是为了便于从浏览器访问部署的服务,该部分全部是jsp文件,主要负责了页面显示(其实主要还是Axis2的界面显示),没有太多的逻辑代码。
接下来,将ode-war包下的/WEB-INF/web.xml文件拷贝到工程下的webcontent下的WEB-INF文件夹下。
接下来,配置一个服务器,一般使用Tomcat5.5 。接着将该工程部署到tomcat中的webapps文件夹下,这样就部署成功了,根据web.xml文件可以得知整个工程的加载顺序,其最先是从
org.apache.ode.axis2.hooks.ODEAxisServlet
该servlet开始,在其中的init方法中添加输出语句,便可以在tomcat的控制台下看到,这样便可以修改源码扩展ODE了。
以下是一些具体问题的解决,但是都很难发现的问题
然后删除工程ode-jacob-ap中对于tools.jar的 依赖,再将ode-bpel-api工程中org.apache.apche.ode.bpel.evar
改成org.apache.ode.bpel.evar。
问题解决:
1)报错:javax.persistence.*** 无法找到persistence的provider
这是由于在META-INF文件夹下没有persistence.xml文件,该文件在
源码的ode-dao-jpa工程的resources文件夹下可以找到
2)报错:无法创建derby数据库的物理连接
这是由于derby的类库文件的版本不一致造成,需要将derby 10.4版本
老版本必须从classpath中删除
3)报错:无法加载schematypesystem
向工程导入ode-schema-RC1.jar
4)流程部署报错:setFeature or setParameter无法执行
删除工程导入的xercesImpl.jar的较低版本
小结:由Ruby的buildr工具导出的ODE源码工程还是有很多错误的地方,也许 ODE的开发团队并不是采用Eclipse开发,所以才会有这么多的问题未解决。一 般的错误都是由于导入包的版本错误所导致,一般删除较低版本便可以。现在导入的包数量太大,包括了很多的无用包,等到对ODE源码有了更全面的了解之后可以对这些jar包进行一个整理,没有引用到的便可以删除。
接下来,我还会对ODE做更进一步的分析和学习,希望有相同需求的朋友能共同学习。