`
kungstriving
  • 浏览: 131371 次
  • 性别: 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
有空多交流!

相关推荐

    VS 2008 ODE 源码

    VS 2008 ODE 源码是一款基于Visual Studio 2008的开源物理引擎,专门用于游戏开发。ODE(Open Dynamics Engine)是一个强大的动态模拟库,它能够帮助开发者实现复杂物理环境下的物体运动模拟,如碰撞检测、刚体动力...

    Eclipse-BPEL-ODE-加减法实例

    Eclipse-BPEL-ODE 加减法实例 本文档主要介绍了如何在 Eclipse 中搭建 BPEL 项目,包括安装和配置 Apache ODE、BPEL Designer 插件,并提供了一个小例子。 环境配置 在开始之前,需要安装 Eclipse IDE for Java ...

    ODE物理引擎实例源码及学习资料

    本资源包包含ODE的源码、实例项目以及一些精选的学习资料,非常适合对ODE感兴趣的开发者进行深入研究。 1. ODE源码: ODE的源代码提供了对其内部工作原理的深入了解。通过阅读源码,你可以学习如何构建物理世界、...

    ODE45_ODE45_常微分方程_源码.zip

    这个压缩包"ODE45_ODE45_常微分方程_源码.zip"显然包含了关于如何使用ODE45函数以及可能的源码示例,对于学习和理解MATLAB中的常微分方程求解具有重要意义。 一、ODE45简介 ODE45是MATLAB的内置求解器,基于四阶...

    BPEL实例 eclipse apache ode

    BPEL实例,Apache-ODE,Eclipse 该教程详细讲述了开发一个BPEL业务流程的详细步骤。先手动写好两个服务,一个是加法服务,一个是减法服务,然后希望构建一个bpel流程,该流程能够根据用户的输入来决定是调用加法服务...

    Matlab_ODE_ode_matlab_presidentuju_code_常微分方程_

    在Matlab中,常微分方程(Ordinary Differential Equations, ODE)的求解是一项常见的任务,尤其对于科学计算和工程应用来说至关重要。"ode"是Matlab中的一个核心函数族,用于解决各种类型的常微分方程。本教程以...

    非线性ode及在实际工程中的应用第一次作业源代吗.rar

    非线性常微分方程(Ordinary Differential Equations,简称ODE)是数学中的一个重要领域,广泛应用于物理学、化学、生物学、工程学等众多科学领域。这类方程描述了某个或多个变量随时间变化的关系,其中至少有一个是...

    odefunc_ode45齿轮_ODE45_齿轮odefunc_齿轮_齿轮ode45_源码

    这个标题“odefunc_ode45齿轮_ODE45_齿轮odefunc_齿轮_齿轮ode45_源码”表明我们正在探讨一个涉及到行星齿轮系统的动力学分析问题,该问题通过ode45函数进行数值模拟。在这个场景中,"odefunc"很可能是指定义了行星...

    matlab-ode-solvers-master_Help!_Equations_matlab_matlabode_源码

    在MATLAB中,求解常微分方程(ODE)是一项常见的任务,广泛应用于物理、工程、生物医学等领域的模型构建。"matlab-ode-solvers-master_Help!_Equations_matlab_matlabode_源码"这个压缩包提供了一组MATLAB代码,旨在...

    Candidate Solution_ode_源码

    "Candidate Solution_ode_源码"这个项目显然是针对求解微分方程问题的,而"ode"标签则直接指明了主要涉及的是常微分方程(Ordinary Differential Equations,简称ODE)的求解。 微分方程是描述系统动态变化的一种...

    控制系统仿真_ODE45_ode45控制_预测控制_非线性控制_stoproq_

    2. `zxxh.m` 可能是主程序或辅助函数,用于调用ode45进行系统仿真,或者执行预测控制的迭代计算。 3. `zsfun2.mdl` 和 `zsfun1.mdl` 是SIMULINK模型文件,通常用于图形化地构建系统模型和控制器结构,通过仿真来验证...

    matlab_ode45.zip_ODE45_微分方程ode45

    在MATLAB中,`ode45`是求解常微分方程(ODE)初值问题的主要函数。这个工具能够高效、稳定地处理各种类型的线性和非线性微分方程组。`ode45`使用四阶Runge-Kutta方法,这是一种数值积分法,适用于连续、可微的函数。...

    ode_ode45多自由度_ode45自由度_ode45振动_odemdl_ode_

    标题和描述提及的"ode_ode45多自由度_ode45自由度_ode45振动_odemdl_ode_",是指利用ODE45求解器处理具有多自由度的振动系统的动态行为。这里我们将深入探讨ODE45求解器、多自由度振动系统以及如何在Simulink中建立...

    Apache ODE开发指南

    Apache ODE 是一个基于 Web 服务的业务流程执行引擎,旨在提供一个灵活、可扩展、可靠的流程执行环境。ODE 的关键组成部分包括 ODE BPEL 编译器、ODE BPEL 引擎 Runtime、ODE 数据访问对象(DAOs)、ODE 整合层...

    matlab开发-ode86

    本篇文章将深入探讨MATLAB的ODE求解器,特别是 ode86 函数,以及它如何支持数据导入与分析。 MATLAB是数学计算、数值分析和工程应用的强大平台,其中内置了多种用于求解常微分方程的工具。 ode86 是MATLAB ODE ...

    Eclipse_BPEL_使用详解

    Eclipse BPEL 使用详解 BPEL,全称Business Process Execution Language,是一种用于描述业务流程和服务编排的XML语言。它允许开发者将多个Web服务组合成复杂的业务流程。Eclipse BPEL Designer是Eclipse IDE的一个...

    ode45的笔记_ODE45_matlabode45_

    ** ode45的适用场景广泛,包括但不限于物理、化学、生物学、工程学等领域,它为解决复杂的动态系统模型提供了强大工具。然而,对于某些特殊的微分方程,如 stiff 方程,可能需要使用专门设计的求解器如ode15s,以...

    ODE的示例程序

    它广泛应用于游戏开发、机器人模拟、虚拟现实以及机械工程等领域。这个压缩包中的"roboSimu"很可能是一个基于ODE的机器人动力学模拟示例程序。 在学习ODE时,有几个关键知识点是必须要掌握的: 1. **基本概念**:...

    Eclipse_BPEL_使用详解[整理].pdf

    Eclipse BPEL 是一种基于 Eclipse 的业务流程执行语言(BPEL),它提供了一个基于标准的业务流程管理解决方案。下面是 Eclipse BPEL 的使用详解。 一、 环境配置 Eclipse BPEL 需要在 Eclipse IDE 中安装 BPEL ...

    The matlab ODE suite.pdf

    MATLAB ODE 套件广泛应用于科学和工程领域,包括: * 机械工程:MATLAB ODE 套件可以用于解决机械系统的动力学问题。 * 电气工程:MATLAB ODE 套件可以用于解决电气系统的动力学问题。 * 生物医学工程:MATLAB ODE ...

Global site tag (gtag.js) - Google Analytics