`
kungstriving
  • 浏览: 129080 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

ODE源码导入Eclipse工程成功执行

    博客分类:
  • BPEL
阅读更多

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做更进一步的分析和学习,希望有相同需求的朋友能共同学习。

分享到:
评论
8 楼 zhangxiong0301 2012-11-11  
另外,这个工程的启动类是SimpleHttpServer吧,启动参数是-p 8080 -t all
-r processes,最后一个参数是指向processes文件夹吗?一开始只是在浏览器里面输入调用URL(如,http://localhost:8080/axis2/services/RService/process?input=hello)时候才会出现刚刚那些错误代码d,但是从此之后在每次run这个工程时候都会报这个错误,很不明白?麻烦师兄帮忙,有点急,感谢师兄了先!
7 楼 zhangxiong0301 2012-11-11  
kungstriving 写道
zhangxiong0301 写道
博主是以前是高性能中心的吗?我现在在接着做飞机协同设计系统的项目,我就想问下,你那个ode可导入额eclipse的源码在实验室有存档吗?

居然这样都可以,呵呵,这个源码放在哪里都记不清了,都已经两年多了,我回去找一找看还能找到不

师兄你好,我想问个问题。你还记得那个ODEFullDebug工程吗?我在实验室找到了那个ODEFullDebug eclipse 工程。当我运行部署好的BPEL流程时候,发现报了很多错误?对于那个工程,我只是修改了数据库配置(改成连接我自己的mysql数据库),然后把BPEL流程放在工程的processes目录下。具体的错误都是跟数据库有关的,我还不太明白。一部分错误代码如下:
<openjpa-1.3.0-SNAPSHOT-r422266:724491 nonfatal general error> org.apache.openjpa.persistence.PersistenceException: Failed lazy association with ManagedConnection {INSERT INTO ODE_EVENT (EVENT_ID, DETAIL, DATA, SCOPE_ID, TSTAMP, TYPE, INSTANCE_ID, PROCESS_ID) VALUES (?, ?, ?, ?, ?, ?, ?, ?)} [code=0, state=null]
at org.apache.openjpa.jdbc.sql.DBDictionary.narrow(DBDictionary.java:4242)
at org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBDictionary.java:4207)
at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:102)
at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:88)
at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:64)
at org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flush(PreparedStatementManagerImpl.java:83)
at org.apache.openjpa.jdbc.kernel.ConstraintUpdateManager.flush(ConstraintUpdateManager.java:548)
at org.apache.openjpa.jdbc.kernel.ConstraintUpdateManager.flush(ConstraintUpdateManager.java:105)
at org.apache.openjpa.jdbc.kernel.BatchingConstraintUpdateManager.flush(BatchingConstraintUpdateManager.java:59)
at org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:89)
at org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:72)
at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.flush(JDBCStoreManager.java:711)
at org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:130)
at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:2011)
at org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:1909)
at org.apache.openjpa.kernel.BrokerImpl.beforeCompletion(BrokerImpl.java:1827)
at org.apache.geronimo.transaction.manager.TransactionImpl.beforeCompletion(TransactionImpl.java:514)
at org.apache.geronimo.transaction.manager.TransactionImpl.beforeCompletion(TransactionImpl.java:498)
at org.apache.geronimo.transaction.manager.TransactionImpl.beforePrepare(TransactionImpl.java:400)
at org.apache.geronimo.transaction.manager.TransactionImpl.commit(TransactionImpl.java:257)
at org.apache.geronimo.transaction.manager.TransactionManagerImpl.commit(TransactionManagerImpl.java:238)
at org.apache.ode.scheduler.simple.SimpleScheduler.execTransaction(SimpleScheduler.java:226)
at org.apache.ode.scheduler.simple.SimpleScheduler$4.call(SimpleScheduler.java:404)
at org.apache.ode.scheduler.simple.SimpleScheduler$4.call(SimpleScheduler.java:401)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:269)
at java.util.concurrent.FutureTask.run(FutureTask.java:123)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
at java.lang.Thread.run(Thread.java:595)
Caused by: org.apache.openjpa.lib.jdbc.ReportingSQLException: Failed lazy association with ManagedConnection {INSERT INTO ODE_EVENT (EVENT_ID, DETAIL, DATA, SCOPE_ID, TSTAMP, TYPE, INSTANCE_ID, PROCESS_ID) VALUES (?, ?, ?, ?, ?, ?, ?, ?)} [code=0, state=null]
at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:202)
at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.access$000(LoggingConnectionDecorator.java:58)
at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection.prepareStatement(LoggingConnectionDecorator.java:230)
at org.apache.openjpa.lib.jdbc.DelegatingConnection.prepareStatement(DelegatingConnection.java:164)
at org.apache.openjpa.jdbc.kernel.JDBCStoreManager$RefCountConnection.prepareStatement(JDBCStoreManager.java:1525)
at org.apache.openjpa.lib.jdbc.DelegatingConnection.prepareStatement(DelegatingConnection.java:153)
at org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.prepareStatement(PreparedStatementManagerImpl.java:241)
at org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushAndUpdate(PreparedStatementManagerImpl.java:106)
at org.apache.openjpa.jdbc.kernel.BatchingPreparedStatementManagerImpl.flushAndUpdate(BatchingPreparedStatementManagerImpl.java:80)
at org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushInternal(PreparedStatementManagerImpl.java:93)
at org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flush(PreparedStatementManagerImpl.java:81)
... 23 more
NestedThrowables:
java.sql.SQLException: Failed lazy association with ManagedConnection
at org.tranql.connector.jdbc.ConnectionHandle.getManagedConnection(ConnectionHandle.java:73)
at org.tranql.connector.jdbc.ConnectionHandle.prepareStatement(ConnectionHandle.java:269)
at org.apache.openjpa.lib.jdbc.DelegatingConnection.prepareStatement(DelegatingConnection.java:166)
at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection.prepareStatement(LoggingConnectionDecorator.java:227)
at org.apache.openjpa.lib.jdbc.DelegatingConnection.prepareStatement(DelegatingConnection.java:164)
at org.apache.openjpa.jdbc.kernel.JDBCStoreManager$RefCountConnection.prepareStatement(JDBCStoreManager.java:1525)
at org.apache.openjpa.lib.jdbc.DelegatingConnection.prepareStatement(DelegatingConnection.java:153)
at org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.prepareStatement(PreparedStatementManagerImpl.java:241)
at org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushAndUpdate(PreparedStatementManagerImpl.java:106)
at org.apache.openjpa.jdbc.kernel.BatchingPreparedStatementManagerImpl.flushAndUpdate(BatchingPreparedStatementManagerImpl.java:80)
at org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushInternal(PreparedStatementManagerImpl.java:93)
at org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flush(PreparedStatementManagerImpl.java:81)
at org.apache.openjpa.jdbc.kernel.ConstraintUpdateManager.flush(ConstraintUpdateManager.java:548)
at org.apache.openjpa.jdbc.kernel.ConstraintUpdateManager.flush(ConstraintUpdateManager.java:105)
at org.apache.openjpa.jdbc.kernel.BatchingConstraintUpdateManager.flush(BatchingConstraintUpdateManager.java:59)
at org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:89)
at org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:72)
at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.flush(JDBCStoreManager.java:711)
at org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:130)
at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:2011)
at org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:1909)
at org.apache.openjpa.kernel.BrokerImpl.beforeCompletion(BrokerImpl.java:1827)
at org.apache.geronimo.transaction.manager.TransactionImpl.beforeCompletion(TransactionImpl.java:514)
at org.apache.geronimo.transaction.manager.TransactionImpl.beforeCompletion(TransactionImpl.java:498)
at org.apache.geronimo.transaction.manager.TransactionImpl.beforePrepare(TransactionImpl.java:400)
at org.apache.geronimo.transaction.manager.TransactionImpl.commit(TransactionImpl.java:257)
at org.apache.geronimo.transaction.manager.TransactionManagerImpl.commit(TransactionManagerImpl.java:238)
at org.apache.ode.scheduler.simple.SimpleScheduler.execTransaction(SimpleScheduler.java:226)
at org.apache.ode.scheduler.simple.SimpleScheduler$4.call(SimpleScheduler.java:404)
at org.apache.ode.scheduler.simple.SimpleScheduler$4.call(SimpleScheduler.java:401)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:269)
at java.util.concurrent.FutureTask.run(FutureTask.java:123)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
at java.lang.Thread.run(Thread.java:595)

师兄帮我分析一下这个大概是什么问题?应该怎么解决?我听说这个工程是你一手做的,你应该还比较熟悉的啦。这个工程我直接拷到eclipse里面,你看还需要什么配置之类的吗?另外可以把这个工程我给介绍一下吗:这个工程是怎么组织的,然后怎么集成服务容器的,具体是怎么建立这个工程的(你这篇文章对我来说有点没看到具体细节,嘿嘿)。有劳师兄了。。。。
6 楼 kungstriving 2012-10-29  
zhangxiong0301 写道
博主是以前是高性能中心的吗?我现在在接着做飞机协同设计系统的项目,我就想问下,你那个ode可导入额eclipse的源码在实验室有存档吗?

居然这样都可以,呵呵,这个源码放在哪里都记不清了,都已经两年多了,我回去找一找看还能找到不
5 楼 zhangxiong0301 2012-10-17  
博主是以前是高性能中心的吗?我现在在接着做飞机协同设计系统的项目,我就想问下,你那个ode可导入额eclipse的源码在实验室有存档吗?
4 楼 worldllg 2009-08-26  
Freeze 写道
导好的工程能打包提供下载吗?

谢谢.

是啊,那该有多好啊!!
3 楼 Freeze 2009-07-14  
导好的工程能打包提供下载吗?

谢谢.
2 楼 kungstriving 2009-06-15  
dustinfly 写道

然后的步骤?
博主有时间的话把导入配置的过程写一下吧
谢谢!
另外我也正想研究下ODE
有空多交流!

谢谢你,
我会尽快补上
1 楼 dustinfly 2009-06-08  
然后的步骤?
博主有时间的话把导入配置的过程写一下吧
谢谢!
另外我也正想研究下ODE
有空多交流!

相关推荐

Global site tag (gtag.js) - Google Analytics