- 浏览: 516338 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
ben_wu007:
没数据库设计 而且这样要写代码 还是做成配数据库好 ...
使用AOP做权限控制 -
邢邢色色:
支持楼主,但这本书没有讲trident,有些过时了~到amaz ...
《Storm入门》中文版 -
java_web_hack1:
我在FunctionProvider中,获取的Property ...
在Osworkflow中使用PropertySet存储业务数据 -
greemranqq:
腾飞 ~。~
Java并发和多线程译者征集 -
fantasy:
leonevo 写道hi, 我也在设计cmdb. 我觉得基于传 ...
ITSM-CMDB数据库设计-四种方案任你选
作者:kiral 原文地址:http://kiral.iteye.com/blog/190253
1.基本概念
osworkflow里使用自定义的function来执行业务代码,如步骤“拟稿”,当你执行提交操作的时候,可以自定义一个funciton用来保存稿件到业务数据库。
function分为pre-function(前置方法)和post-function(后置方法),前置函数在step和action之前执行, 后置方法在step和action之后执行。
2.如何使用
2.1 定义前置function
前置方法,放在action里results之前。
2.2 定义后置function
后置方法,放在action里results之后。
2.3 执行benshell
osworkflow支持在function里执行beanshell脚本。
2.4 自定义function
实现FunctionProvider接口来自定义自己的function.如下:
在function里你能够得到caller(调用者的名字),workflowID(工作流ID),actionId(操作ID)。
3.使用spring来管理function
osworkflow支持使用spring来管理function和condition的生命周期。
3.1 让spring来管理function
在bean.xml做如下配置
这样通过byName的注入方式,注入到你的AbstractWorkflow的bean里。
或者
AbstractWorkflow workflow = new BasicWorkflow(userName);
workflow.setResolver(workflowTypeResolver);
workflow.setConfiguration(osworkflowConfiguration);
3.2定义myFunction的bean
<bean id="myFunction" class="MyFunction" />
3.2配置bean的function
arg的name为bean.name
注意:<arg name="bean.name">myFunction</arg>必须放在同一行,因为myFunction旁边有空格的话,会找不到myFunction bean。
更多osworkflow讨论,请进入osworkflow组:[url]http://osworkflow.group.iteye.com/ [/url]
那你的function也必须配置成Sprng的bean。
TypeResolver 没有注入进去。
这个你可以看看osworkflow 的文档,上面有如何 与 spring 集成的办法,不过,这个很麻烦,个人感觉到
增加两个conditon,
第一个:如果会签的人都签字了,进入下一个步骤。
第二个:如果还未有人未会签,则循环当前步骤。
1.基本概念
osworkflow里使用自定义的function来执行业务代码,如步骤“拟稿”,当你执行提交操作的时候,可以自定义一个funciton用来保存稿件到业务数据库。
function分为pre-function(前置方法)和post-function(后置方法),前置函数在step和action之前执行, 后置方法在step和action之后执行。
2.如何使用
2.1 定义前置function
前置方法,放在action里results之前。
<action id="100" name="启动工作流"> <pre-functions> <function type="class"> <arg name="class.name">com.opensymphony.workflow.util.Caller</arg> </function> </pre-functions> <results> <unconditional-result old-status="Finished" status="Underway" step="1" owner="${caller}"/> </results> </action>
2.2 定义后置function
后置方法,放在action里results之后。
<action id="100" name="启动工作流"> <results> <unconditional-result old-status="Finished" status="Underway" step="1" owner="${caller}"/> </results> <post-functions> <function type="class"> <arg name="class.name">com.opensymphony.workflow.util.Caller</arg> </function> </post-functions> </action>
2.3 执行benshell
osworkflow支持在function里执行beanshell脚本。
<post-functions> <function type="beanshell"> <arg name="script"> System.out.println("step is success!!!"); </arg> </function> </post-functions>
2.4 自定义function
实现FunctionProvider接口来自定义自己的function.如下:
public class MyFunction implements FunctionProvider { @SuppressWarnings("unchecked") public void execute(Map transientVars, Map args, PropertySet ps) throws WorkflowException { } }
在function里你能够得到caller(调用者的名字),workflowID(工作流ID),actionId(操作ID)。
WorkflowEntry workflowEntry = (WorkflowEntry) transientVars.get("entry"); long workflowId = workflowEntry.getId(); BasicWorkflowContext context = (BasicWorkflowContext) transientVars.get("context"); String caller = context.getCaller(); int actionId = (Integer) transientVars.get("actionId");
3.使用spring来管理function
osworkflow支持使用spring来管理function和condition的生命周期。
3.1 让spring来管理function
在bean.xml做如下配置
<!-- 将工作流的function和condition交给spring管理 --> <bean id="resolver" class="com.opensymphony.workflow.util.SpringTypeResolver"> </bean>
这样通过byName的注入方式,注入到你的AbstractWorkflow的bean里。
或者
AbstractWorkflow workflow = new BasicWorkflow(userName);
workflow.setResolver(workflowTypeResolver);
workflow.setConfiguration(osworkflowConfiguration);
3.2定义myFunction的bean
<bean id="myFunction" class="MyFunction" />
3.2配置bean的function
<post-functions> <function type="spring"> <arg name="bean.name">myFunction</arg> </function> </post-functions>
arg的name为bean.name
注意:<arg name="bean.name">myFunction</arg>必须放在同一行,因为myFunction旁边有空格的话,会找不到myFunction bean。
更多osworkflow讨论,请进入osworkflow组:[url]http://osworkflow.group.iteye.com/ [/url]
评论
13 楼
fantasy
2009-01-03
364902709 写道
我想在Function中通过Spring注入属性,但确获得的值为Null,我该如何给Function注入属性?。我一个初学值,不太懂,有说的不对的地方,还请见谅,谢谢。
那你的function也必须配置成Sprng的bean。
12 楼
fantasy
2009-01-03
364902709 写道
你好,我是这样配置的
<bean id="workflowTypeResolver" class="com.opensymphony.workflow.util.SpringTypeResolver">
<property name="functions">
<map>
<entry key="stockCheckPassFunction">
<value>com.atsig.market.workflow.function.StockCheckPassFunction</value>
</entry>
</map>
</property>
</bean>
<bean id="stockCheckPassFunction" class="com.atsig.market.workflow.function.StockCheckPassFunction">
</bean>
<post-functions>
<function type="spring">
<arg name="bean.name">stockCheckPassFunction</arg>
</function>
</post-functions>
但却报此错误,我不知道是什么原因,你是否可以告诉我,谢谢了.
com.opensymphony.workflow.WorkflowException: No type or class.name argument specified to TypeResolver
at com.opensymphony.workflow.TypeResolver.getFunction(TypeResolver.java:84)
at com.opensymphony.workflow.AbstractWorkflow.executeFunction(AbstractWorkflow.java:860)
at com.opensymphony.workflow.AbstractWorkflow.transitionWorkflow(AbstractWorkflow.java:1273)
at com.opensymphony.workflow.AbstractWorkflow.doAction(AbstractWorkflow.java:567)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:198)
at $Proxy0.doAction(Unknown Source)
at com.atsig.market.stock.service.StockWorkflowSerImpl.doAction(StockWorkflowSerImpl.java:77)
at com.atsig.market.stock.controller.StockApplyCheckupController.dealWithAction(StockApplyCheckupController.java:74)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.web.servlet.mvc.multiaction.MultiActionController.invokeNamedMethod(MultiActionController.java:473)
at org.springframework.web.servlet.mvc.multiaction.MultiActionController.handleRequestInternal(MultiActionController.java:410)
at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:809)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:511)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:212)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
at java.lang.Thread.run(Thread.java:619)
<bean id="workflowTypeResolver" class="com.opensymphony.workflow.util.SpringTypeResolver">
<property name="functions">
<map>
<entry key="stockCheckPassFunction">
<value>com.atsig.market.workflow.function.StockCheckPassFunction</value>
</entry>
</map>
</property>
</bean>
<bean id="stockCheckPassFunction" class="com.atsig.market.workflow.function.StockCheckPassFunction">
</bean>
<post-functions>
<function type="spring">
<arg name="bean.name">stockCheckPassFunction</arg>
</function>
</post-functions>
但却报此错误,我不知道是什么原因,你是否可以告诉我,谢谢了.
com.opensymphony.workflow.WorkflowException: No type or class.name argument specified to TypeResolver
at com.opensymphony.workflow.TypeResolver.getFunction(TypeResolver.java:84)
at com.opensymphony.workflow.AbstractWorkflow.executeFunction(AbstractWorkflow.java:860)
at com.opensymphony.workflow.AbstractWorkflow.transitionWorkflow(AbstractWorkflow.java:1273)
at com.opensymphony.workflow.AbstractWorkflow.doAction(AbstractWorkflow.java:567)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:198)
at $Proxy0.doAction(Unknown Source)
at com.atsig.market.stock.service.StockWorkflowSerImpl.doAction(StockWorkflowSerImpl.java:77)
at com.atsig.market.stock.controller.StockApplyCheckupController.dealWithAction(StockApplyCheckupController.java:74)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.web.servlet.mvc.multiaction.MultiActionController.invokeNamedMethod(MultiActionController.java:473)
at org.springframework.web.servlet.mvc.multiaction.MultiActionController.handleRequestInternal(MultiActionController.java:410)
at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:809)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:511)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:212)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
at java.lang.Thread.run(Thread.java:619)
TypeResolver 没有注入进去。
11 楼
kjj
2009-01-02
364902709 写道
我想在Function中通过Spring注入属性,但确获得的值为Null,我该如何给Function注入属性?。我一个初学值,不太懂,有说的不对的地方,还请见谅,谢谢。
这个你可以看看osworkflow 的文档,上面有如何 与 spring 集成的办法,不过,这个很麻烦,个人感觉到
10 楼
kjj
2009-01-02
用osworkflow 做过几个小东西,感觉到osworkflow的确太麻烦,准备最近抽时间封装一下
9 楼
364902709
2009-01-01
我想在Function中通过Spring注入属性,但确获得的值为Null,我该如何给Function注入属性?。我一个初学值,不太懂,有说的不对的地方,还请见谅,谢谢。
8 楼
364902709
2009-01-01
你好,我是这样配置的
<bean id="workflowTypeResolver" class="com.opensymphony.workflow.util.SpringTypeResolver">
<property name="functions">
<map>
<entry key="stockCheckPassFunction">
<value>com.atsig.market.workflow.function.StockCheckPassFunction</value>
</entry>
</map>
</property>
</bean>
<bean id="stockCheckPassFunction" class="com.atsig.market.workflow.function.StockCheckPassFunction">
</bean>
<post-functions>
<function type="spring">
<arg name="bean.name">stockCheckPassFunction</arg>
</function>
</post-functions>
但却报此错误,我不知道是什么原因,你是否可以告诉我,谢谢了.
com.opensymphony.workflow.WorkflowException: No type or class.name argument specified to TypeResolver
at com.opensymphony.workflow.TypeResolver.getFunction(TypeResolver.java:84)
at com.opensymphony.workflow.AbstractWorkflow.executeFunction(AbstractWorkflow.java:860)
at com.opensymphony.workflow.AbstractWorkflow.transitionWorkflow(AbstractWorkflow.java:1273)
at com.opensymphony.workflow.AbstractWorkflow.doAction(AbstractWorkflow.java:567)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:198)
at $Proxy0.doAction(Unknown Source)
at com.atsig.market.stock.service.StockWorkflowSerImpl.doAction(StockWorkflowSerImpl.java:77)
at com.atsig.market.stock.controller.StockApplyCheckupController.dealWithAction(StockApplyCheckupController.java:74)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.web.servlet.mvc.multiaction.MultiActionController.invokeNamedMethod(MultiActionController.java:473)
at org.springframework.web.servlet.mvc.multiaction.MultiActionController.handleRequestInternal(MultiActionController.java:410)
at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:809)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:511)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:212)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
at java.lang.Thread.run(Thread.java:619)
<bean id="workflowTypeResolver" class="com.opensymphony.workflow.util.SpringTypeResolver">
<property name="functions">
<map>
<entry key="stockCheckPassFunction">
<value>com.atsig.market.workflow.function.StockCheckPassFunction</value>
</entry>
</map>
</property>
</bean>
<bean id="stockCheckPassFunction" class="com.atsig.market.workflow.function.StockCheckPassFunction">
</bean>
<post-functions>
<function type="spring">
<arg name="bean.name">stockCheckPassFunction</arg>
</function>
</post-functions>
但却报此错误,我不知道是什么原因,你是否可以告诉我,谢谢了.
com.opensymphony.workflow.WorkflowException: No type or class.name argument specified to TypeResolver
at com.opensymphony.workflow.TypeResolver.getFunction(TypeResolver.java:84)
at com.opensymphony.workflow.AbstractWorkflow.executeFunction(AbstractWorkflow.java:860)
at com.opensymphony.workflow.AbstractWorkflow.transitionWorkflow(AbstractWorkflow.java:1273)
at com.opensymphony.workflow.AbstractWorkflow.doAction(AbstractWorkflow.java:567)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:198)
at $Proxy0.doAction(Unknown Source)
at com.atsig.market.stock.service.StockWorkflowSerImpl.doAction(StockWorkflowSerImpl.java:77)
at com.atsig.market.stock.controller.StockApplyCheckupController.dealWithAction(StockApplyCheckupController.java:74)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.web.servlet.mvc.multiaction.MultiActionController.invokeNamedMethod(MultiActionController.java:473)
at org.springframework.web.servlet.mvc.multiaction.MultiActionController.handleRequestInternal(MultiActionController.java:410)
at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:809)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:511)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:212)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
at java.lang.Thread.run(Thread.java:619)
7 楼
fantasy
2008-06-28
kathytingzi 写道
怎么实现会签阿,谢谢啦
增加两个conditon,
第一个:如果会签的人都签字了,进入下一个步骤。
第二个:如果还未有人未会签,则循环当前步骤。
6 楼
amuj2ee
2008-06-27
很详细,很全面。
5 楼
amuj2ee
2008-06-27
工作流初学者:
参考:http://hi.baidu.com/vjame/blog/item/43a537d1719caf3d9b50279d.html
参考:http://hi.baidu.com/vjame/blog/item/43a537d1719caf3d9b50279d.html
4 楼
kathytingzi
2008-06-27
怎么实现会签阿,谢谢啦
3 楼
fantasy
2008-05-08
最近一直在研究osworkflow,
很想看看lllyq说的这本书。
很想看看lllyq说的这本书。
2 楼
lllyq
2008-05-07
可以找这本书来看看
OSWorkflow: A guide for Java developers and architects to integrating open-source Business Process Management (Paperback)
http://www.amazon.com/OSWorkflow-developers-architects-integrating-open-source/dp/1847191525
OSWorkflow: A guide for Java developers and architects to integrating open-source Business Process Management (Paperback)
http://www.amazon.com/OSWorkflow-developers-architects-integrating-open-source/dp/1847191525
1 楼
hspeed
2008-05-07
恩,不错,osworkflow与其他业务模块交互就靠funciton了
发表评论
-
Osworkflow开发需要注意的地方
2010-10-14 13:20 1695工作流名字的最大长度为20 <workflows> ... -
在Osworkflow中使用PropertySet存储业务数据
2010-01-28 17:10 2898PropertySet用于存储持久化数据,可以将这些数据存 ... -
基于Osworkflow的工作流开发。
2009-09-08 10:56 2546基本开发思路 一个流程 ... -
欢迎加入osworkflow组
2008-05-05 10:31 1465现在工作流还处于刚起步的阶段,对工作流感兴趣的人很难在一起交流 ... -
osworkflow的API封装
2008-05-05 10:20 1948/** * 初始化工作流 ... -
osworkflow如何与业务结合?
2008-05-05 09:45 2675osworkflow是一个轻量级的工作流开源框架,只提供工 ... -
工作流设计原则
2008-03-29 11:07 19841.一种业务对象使用一个流程, 如:某个流程就是用来处理文档, ...
相关推荐
OSWorkflow
4. 第三方教程:网上有许多关于OSWorkFlow的教程和博客文章,深入讲解各个功能和最佳实践。 总的来说,OSWorkFlow为Java开发者提供了一个强大且易用的工作流解决方案,能够有效地提升企业的业务流程管理水平。通过...
在本入门指南中,我们将深入探讨如何使用osworkflow,并将其与流行的数据持久化框架Hibernate和依赖注入容器Spring进行集成。 **工作流管理系统** 是一种软件工具,它允许开发者定义、执行和管理业务流程。...
OSWorkflow是一款开源的工作流引擎,主要...通过阅读这本50页的OSWorkflow中文手册,用户可以深入了解OSWorkflow的工作原理,掌握如何设计和实现符合业务需求的流程,以及如何在实际项目中有效地集成和使用这一工具。
**osWorkflow 概述** osWorkflow 是一个开源的工作流管理系统,专为 Java 应用程序设计,用于处理复杂的业务流程。...通过深入学习和实践,你将能够掌握如何利用osWorkflow 构建高效、可扩展的业务流程管理解决方案。
首先,让我们深入了解一下OSWorkflow的核心特性: 1. **灵活性**:OSWorkflow的最大亮点是其灵活性。它允许用户自定义每个工作流步骤,包括任务分配、审批规则、流程分支等,无需编程即可实现复杂的业务逻辑。通过...
通过深入研究 OSWorkflow 2.80,开发者不仅可以掌握工作流管理的基本概念,还能学会如何在实际项目中实现高效、灵活的流程自动化,从而提高业务效率,优化企业工作流。对于想要提升企业信息化水平的团队,OSWorkflow...
本指导文档结合源码将深入解析 osWorkflow 的核心概念和实现方式。 ### 一、osWorkflow 简介 osWorkflow 是由 James Helzer 开发的,其设计目标是为 Java 应用程序提供一个轻量级、易于使用的流程管理框架。...
在本实例中,我们将深入探讨OsWorkflow的核心概念、主要功能以及如何创建和测试一个工作流实例。 工作流引擎是软件系统中用于自动化业务流程的关键组件。OsWorkflow,全称为OpenSymphony Workflow,是由...
OSWorkflow 是一个开源的工作流引擎,它允许开发者在应用程序中实现复杂的业务流程管理。这个"osworkflow2.8"版本是OSWorkflow的一个特定发行版,包含了一整套用于设计、执行和管理工作流程的工具和资源。下面我们将...
osworkflow的最新和最全的资料集合,包括了各种文档和指南,可以帮助开发者深入理解并有效地使用这个框架。 1. **OSWorkflow 2.8.chm**: 这是osworkflow 2.8版本的官方帮助文档,以CHM(Compiled Help Manual)格式...
在osworkflow-2.8.0.zip这个压缩包中,包含了osWorkflow 2.8.0版本的所有核心组件和相关文档,让我们一起深入了解一下这些文件的用途和重要性。 1. **设计器:designer.jar** 设计器是osWorkflow的一个可视化工具...
OSWorkflow 是一个开源的工作流引擎,它允许开发者在应用程序中实现复杂的业务流程。"osworkflow_bundle2" 是一个专门用于学习 ...通过深入研究这些内容,你将能够熟练地运用 OSWorkflow 设计和实施企业级的业务流程。
本篇文章将深入探讨OSWorkflow的工作原理及其应用实例。 OSWorkflow的核心概念包括工作流定义、状态、步骤、参与者、条件和动作。工作流定义是整个流程的蓝图,包含了流程的所有步骤和它们之间的流转规则。状态代表...
5. **src**:源代码目录,可能包含了osworkflow的示例代码或者部分库的源码,对于想要深入理解osworkflow内部机制或者想要对其进行扩展的开发者来说,这是一个宝贵的学习资源。 6. **lib**:依赖库目录,包含了...
通过osworkflow项目的学习和实践,总结出的一套osworkflow工作流引擎的学习笔记,供需要使用osworkflow系统的同学们借鉴,谢谢!
OSWorkflow中文手册OSWorkflow-chinese-manual-2.8.pdf Packt.Publishing.OSWorkflow.A.Guide.for.Java.Developers.and.Architects.Aug.2007.pdf 工作流普及风暴—基础概念.doc 用osworkflow写一个请假例子.rar
- **持续学习与社区参与**:鼓励开发者深入理解OSWorkflow的工作原理,积极参与开源社区,共享知识和经验,共同促进工作流引擎的发展。 综上所述,OSWorkflow不仅是一个强大的工作流引擎,还提供了丰富的功能和高度...
OSWorkflow 2.8 API 文档