整合Spring和DotNetTools Workflow
来源:互联网 发布:软件项目风险管理办法 编辑:程序博客网 时间:2024/06/12 14:37
目的
在企业应用中,很少有组件是孤立存在着,组件总是需要依赖其它组件或是外部配置,集成Spring.net ,能充分利用spring.net的 ioc和aop等功能
在DotNetTools.Workflow中,以下类和Spring密切相关
配置SpringTypeResolver
这里,最先需要介绍的是DotNetTools.Workflow.Util.SpringTypeResolver,这个类使在spring.net中配置IFunctionProvider,IValidator,ICondition等的实现成为可能
<object name="typeResolver" type="DotNetTools.Workflow.Util.SpringTypeResolver,DotNetTools.Workflow"/>
配置IWorkflowStore实现
SqlClientWorkflowStore和HibernateWorkflowStore配置不兼容Spring.net ,因此,我们需要,创建一个WorkflowStoreFactory
public class WorkflowStoreFactory{private IWorkflowStore workflowStore;public IWorkflowStore CreateInstance(String workflowStoreName,IDictionary props){if (workflowStore==null){switch(workflowStoreName.ToLower()){case "memory":workflowStore=new MemoryWorkflowStore();workflowStore.Init(props);break;case "sqlclient":workflowStore=new SqlClientWorkflowStore();workflowStore.Init(props);break;case "hibernate":workflowStore=new HibernateWorkflowStore();workflowStore.Init(props);break;default:throw new NotSupportedException(workflowStoreName);}}return workflowStore;}}
然后,我们在spring配置这个workflowStoreFactory
<object name="workflowStoreFactory" type="DotNetTools.Workflow.WorkflowStoreFactory,DotNetTools.Test"/>
配置MemoryWorkflowStore
MemoryWorkflowStore的配置最简单,你可以直接配置
<object name="workflowStore" type="DotNetTools.Workflow.Spi.Memory.MemoryWorkflowStore,DotNetTools.Workflow"/>
也可以通过factory-method/factory-object配置
<object name="workflowStore" factory-method="CreateInstance" factory-object="workflowStoreFactory"><constructor-arg><value>memory</value></constructor-arg><constructor-arg><null/></constructor-arg></object>
配置SqlClientWorkflowStore
<object name="workflowStore" factory-method="CreateInstance" factory-object="workflowStoreFactory"><constructor-arg><value>sqlclient</value></constructor-arg><constructor-arg><dictionary><entry key="connectionString"><value>server=(local);user id=sa;pwd=;database=osworkflow</value></entry></dictionary></constructor-arg></object>
配置HibernateWorkflowStore
<object name="workflowStore" factory-method="CreateInstance" factory-object="workflowStoreFactory"><constructor-arg><value>hibernate</value></constructor-arg> <constructor-arg> <dictionary> <entry key="hibernate.connection.provider"> <value>NHibernate.Connection.DriverConnectionProvider</value> </entry> <entry key="hibernate.dialect"><value>NHibernate.Dialect.MsSql2000Dialect</value></entry> <entry key="hibernate.connection.driver_type"> <value>NHibernate.Driver.SqlClientDriver</value> </entry> <entry key="hibernate.show_sql"> <value>true</value> </entry> <entry key="hibernate.use_outer_join"> <value>true</value> </entry> <entry key="hibernate.connection.connection_string"> <value>Server=localhost;initial catalog=osworkflow_hibernate;User ID=sa;Password=;Min Pool Size=2</value> </entry> </dictionary> </constructor-arg> </object>
配置SpringWorkflowFactory
<object name="workflowFactory" type="DotNetTools.Workflow.Loader.SpringWorkflowFactory,DotNetTools" init-method="Init"> <property name="Resource"><value>samples/workflows.xml</value></property><property name="Reload"><value>true</value></property> </object>
在public preview 0.1.0中,你必须配置Reload参数,否则将出错,此bug将在下次发布时修正
配置SpringConfiguration
<object id="configuration" type="DotNetTools.Workflow.Config.SpringConfiguration,DotNetTools.Workflow"><property name="Factory"><ref object="workflowFactory"/></property><property name="Store"><ref object="workflowStore"/></object>
配置工作流对象
<object name="workflow" type="DotNetTools.Workflow.Basic.BasicWorkflow,DotNetTools.Workflow"> <constructor-arg><value>jjx</value></constructor-arg> <property name="Configuration"><ref object="configuration"/></property> <property name="Resolver"><ref objectn="typeResolver"/></property> </object>
你现在你可以在spring配置IFunctionProvider等,如
namespace DotNetTools.Workflow.Functions{public class MyFunction : IFunctionProvider{public void Execute(IDictionary transientVars, IDictionary args, IPropertySet ps){Console.WriteLine("myfunction");}public MyFunction(){}}}
<object name="myfunction" type="DotNetTools.Workflow.Functions.MyFunction,DotNetTools.Test"/>
在工作流文件中,将ProviderFunction,Validator,Condition的type设置为spring,并设置一个参数名为object.name,其值为spring中配置的object 名称
<function type="spring"> <arg name="object.name"> myfunction </arg> </function>
在public preview 0.1.0 中 ,arg name应该为bean.name
使用
IApplicationContext context=(IApplicationContext)System.Configuration.ConfigurationSettings.GetConfig("spring/context");IWorkflow workflow=(IWorkflow)context.GetObject("workflow");
完整的配置文件如下
<?xml version="1.0" encoding="utf-8" ?><configuration> <configSections> <section name="dotnettools.workflow.util.vsa" type="DotNetTools.Workflow.Util.Vsa.VsaHandler,DotNetTools.Workflow"/> <sectionGroup name="spring"> <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/> <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" /> </sectionGroup> </configSections> <dotnettools.workflow.util.vsa> <reference location="dotnettools.test.dll"/> <import namespace="System.Text"/> </dotnettools.workflow.util.vsa> <spring> <context> <resource uri="config://spring/objects"/> </context> <objects> <object name="myFunction" type="DotNetTools.Workflow.Functions.MyFunction,DotNetTools.Test"/> <object name="typeResolver" type="DotNetTools.Workflow.Util.SpringTypeResolver,DotNetTools.Workflow"/> <object name="workflowStoreFactory" type="DotNetTools.Workflow.WorkflowStoreFactory,DotNetTools.Test"/> <object name="workflowStore" factory-method="CreateInstance" factory-object="workflowStoreFactory"><constructor-arg><value>memory</value></constructor-arg><constructor-arg><dictionary><entry key="connectionString"><value>server=(local);user id=sa;pwd=;database=osworkflow</value></entry></dictionary></constructor-arg></object> <object name="workflowFactory" type="DotNetTools.Workflow.Loader.SpringWorkflowFactory,DotNetTools.Workflow" init-method="Init"> <property name="Resource"> <value>samples/workflows.xml</value> </property> </object> <object name="configuration" type="DotNetTools.Workflow.Config.SpringConfiguration,DotNetTools.Workflow"> <property name="Factory"> <ref object="workflowFactory"/> </property> <property name="Store"> <ref object="workflowStore"/> </property> </object> <object name="workflow" type="DotNetTools.Workflow.Basic.BasicWorkflow,DotNetTools.Workflow"> <constructor-arg> <value>jjx</value> </constructor-arg> <property name="Configuration"> <ref object="configuration"/> </property> <property name="Resolver"> <ref object="typeResolver"/> </property> </object> </objects> </spring></configuration>
- 整合Spring和DotNetTools Workflow
- System Workflow和Human Workflow
- 整合 Struts 和 Spring
- struts和spring整合
- 整合 Struts 和 Spring
- 整合 Struts 和 Spring
- Spring和Struts整合
- DWR和Spring整合
- 整合Spring和Hibernate
- Struts2和Spring整合
- Struts2和Spring整合
- 整合spring 和struts
- spring和ibatis整合
- 整合Spring和JPA
- velocity和spring整合
- spring和struts整合
- Spring 和 mybaits 整合
- Hibernate和Spring整合
- 干掉百度就是这样简单
- cdecl, stdcall pascal fastcall 调用规则小结
- 正则表达式助记口诀 08-01-24
- 80386处理器的寻址方式 (二)
- 遍历TreeView
- 整合Spring和DotNetTools Workflow
- 论程序设计方法
- Oracle常用函数
- 在C#.net中如何操作XML
- 注册的本质
- 为什么 char** 不能自动转化为 const char**
- 售前人员需要具备的素质
- __stdcall与__cdecl的区别
- “易语言.飞扬”开发的彩球游戏,作者美女勿近,含源代码