osworkflow
2004-11-22 19:05
309 查看
OSWorkflow基本概念>> http://www.blogdriver.com/showBlog.do?diaryID=113138 | |
|
OSWorkflow中BeanShell的运行环境>> http://www.blogdriver.com/showBlog.do?diaryID=109107 | |
|
OSWorkflow真灵活>> http://www.blogdriver.com/showBlog.do?diaryID=108339 | |
|
跟OSWorkflow奋斗一天>> http://www.blogdriver.com/showBlog.do?diaryID=107566 | |
|
可是,OSWorkFlow的学习资料太少,只有opensymphony的一些概论介绍和简单的例子,连一个完善的实际项目使用都没有。代码的注释也是非常少,更不能接受的是只有部分的单元测试,若想在其基础上改进也困难,哎!设计器的代码更烂,好在OSWorkFlow2.7的设计器(Designer2.7)的改进,总算是能在实际中使用。
期待OSworkflow更好的完善、改进、发展(http://www.opensymphony.com/osworkflow/)...............
OSWorkFlow[/b]概论:[/b]function([/b]函数[/b])[/b] http://www.blogdriver.com/showBlog.do?diaryID=158730 function(函数),在OSWorkFlow中是用来定义(引用)并执行外部的商业逻辑和服务,实现OSWorkFlow与外部具体的应用之间交互。
function有二种类型:
pre function(预处理函数)和post function(后处理函数)
pre function在工作流的一个转变操作执行之前调用,例如:在执行Action的一个结果之前,设置这个结果将导致状态改变的Owner
<action id="0" name="启动工作流">
<results>
<unconditional-result id="2" old-status="Finished" status="Queued" step="1" owner="${caller}">
<pre-functions>
<function name="set.caller" type="class">
<arg name="class.name">com.opensymphony.workflow.util.Caller</arg>
</function>
</pre-functions>
</unconditional-result>
</results>
</action>
post function在工作流的一个转变操作执行完之后调用:例如在设备申请工作流中,部门经理审核步骤完成之后可以给申请的员工发email通知
等。
function将被应用在step、Action、Result中
具体见workflow_2_7.dtd:
..
<!ELEMENT step (meta*, pre-functions?, external-permissions?, actions?, post-functions?)>
<!ELEMENT action (meta*, restrict-to? , validators?, pre-functions?, results, post-functions?)>
<!ELEMENT result (conditions, validators?, pre-functions?, post-functions?)>
..
function在action级别的应用:在执行某一步骤的的Action时,它会首先执行当前Action级别的pre-function,再去寻找Action里的result。
result执行完成之后再调用Action级别的post-function,于是Action的执行结束。
如下图:
function在result级别的应用:类似action级别
function在step级别的应用:上一个步骤执行结束,运转到当前步骤,执行当前步骤的pre-function。当前步骤执行完成,在未运转到下一步骤
之前,执行post-function
如下图:
注意:OSWorkFlow里的Action和我们具体业务操作中的Action(比如:xwork中的Action)的区别:
OSWorkFlow的Action是个更粗粒度的操作,它是指OSWorkFlow某一步骤可以执行的操作。在我们经常用的action(比如:xwork中的Action),是业务相关的一个操作,在OSWorkFlow相当于一个具体的function。
http://www.blogdriver.com/showBlog.do?diaryID=142676
opensymphony的开源项目>> | ||
|
BeanShell的中文问题>> http://www.blogdriver.com/showBlog.do?diaryID=108228 | |
|
2. 解压后,把osworkflow-2.7.0-example.war解压到一个目录,我一般起web,方便对里面进行修改
3. 部署到Tomcat5
4. 试验一下,这个时候,默认的MemoryWorkflowStore应该已经工作正常了
5. 开始向HibernateWorkflowStore转移,先修改WEB-INF/classes/目录下的osworkflow.xml,改为
<persistence class="com.opensymphony.workflow.spi.hibernate.HibernateWorkflowStore">
</persistence>
6. 把一个Hibernate.cfg.xml加到WEB-INF/classes/下面,我用的数据库是mysql.
<property name="hibernate.hbm2ddl.auto">update</property>这句是为了帮你创建数据库表的,跑起来后最好去掉,不去也没关系.
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 2.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- properties -->
<property name="connection.driver_class">org.gjt.mm.mysql.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8</property>
<property name="connection.username">root</property>
<property name="connection.password">123456</property>
<property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">true</property>
<property name="use_outer_join">true</property>
<property name="connection.pool_size">10</property>
<property name="statement_cache.size">25</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<mapping resource="com/opensymphony/workflow/spi/hibernate/HibernateCurrentStep.hbm.xml"></mapping>
<mapping resource="com/opensymphony/workflow/spi/hibernate/HibernateHistoryStep.hbm.xml"></mapping>
<mapping resource="com/opensymphony/workflow/spi/hibernate/HibernateWorkflowEntry.hbm.xml"></mapping>
<mapping resource="com/opensymphony/module/propertyset/hibernate/PropertySetItemImpl.hbm.xml"></mapping>
</session-factory>
</hibernate-configuration>
7. 把hibernate的jar及hibernate所有要到的jar,统统加到WEB-INF/lib/
8. 最后一步,修改源程序.
OsWorkFlow主要作者Hani,认为生成SessionFactory的责任并不是OsWorkFlow的事情,坚持应该是用户,或者是服务器生成后,传给HibernateWorkflowStore.他可能是Spring的思想太深了吧.我也赶紧开始学习了.但是如果这样的话,最好加个说明,说这个产品的Hibernate特性还必须配合Spring才行,那么我再装一个.既然他没有说明,我又暂时还打算用spring,而我又不想改web层任何代码,那么我就只好修改他的源程序,在HibernateWorkflowStore里面生成一个独一无二的SessionFactory了.
修改一是添加下面在开头:
private static SessionFactory sessionFactory;
//~ Constructors ///////////////////////////////////////////////////////////
static{
try {
sessionFactory = new Configuration().configure().buildSessionFactory();
} catch (HibernateException ex) {
throw new RuntimeException("Configuration problem: " + ex.getMessage(), ex);
}
}
二是在init中
把sessionFactory = (SessionFactory) props.get("sessionFactory");注释
编译,生成class,放到osworkflow-2.7.0.jar,取代原来的HibernateWorkflowStore.class,重启服务器,OK
相关文章推荐
- SQL的详细语法介绍——对于学习数据库最基础知识二
- SQL的详细语法介绍——对于学习数据库最基础知识一
- bye Dalian
- 一组测试相关的文章[收藏]
- 找到的房子等级到这里
- DirectCMOS
- 写了几年web之后我在学什么?
- 在CS中,你是哪种人,请老实回答
- 永远有我们不可预知的错误存在!
- 提高制作网页板式的速度方法
- osworkflow的流程定义文件的type怎么配置?
- 应用Rational工具简化基于J2EE项目(五)架构与设计
- 应用Rational工具简化基于J2EE项目(四)分析和工具的进展
- ASP.NET 页面中水晶报表导出之二
- HTC封装,相对真实的进度条,简单实用。
- 爽
- Resume the deleted files by keywords.
- Some guru's code for daemon.
- window.open详解
- MSN/QQ中的CRichEditCtrl:动画表情的实现