新建一个工程,然后将生成的
osworkflow-3.0-dev.jar
及其它所必需的
jar
文件、
spring
配置文件置入构建路径中。
在上面
spring
中的工作流定义是从数据库中读取,但是编程去构建一个工作流定义是相当麻烦的事情,这里打算首先从
designer
中生成定义文件然后读取工作流定义持久到数据库中。这里为了从
xml
文件中读取工作流的定义,需要
osworkflow.xml
,内容如下:
<
osworkflow
>
<
persistence
class
=
"com.opensymphony.workflow.spi.memory.MemoryWorkflowStore"
/>
<
factory
class
=
"com.opensymphony.workflow.loader.XMLWorkflowFactory"
/>
</
osworkflow
>
|
另外还需要
workflows.xml
,内容如下:
<
workflows
>
<
workflow
name
=
"example"
type
=
"resource"
location
=
"example.xml"
/>
</
workflows
>
|
这两个文件并不是一定需要的,因为
osworkflow.xml
其中的内容已经在
spring
配置文件中定义了,这里只是为了方便测试,现在考虑是否可以改写
designer
,直接将工作流的定义导出到数据库中。
另外将
osworkflow
项目下的
src/test/sample/example.xml
工作流定义文件拷贝到类路径中,这是要测试的工作流定义文件。
完成后的测试项目结构如下:
新建一个测试用例,代码如下:
protected Session session;
private Transaction tx;
public ApplicationContext ctx;
protected void setUp() throws Exception {
super.setUp();
ctx = new FileSystemXmlApplicationContext("/src/conf/application-context.xml");
session=((SessionFactory)ctx.getBean("sessionFactory")).openSession();
System.out.println("begin..........");
}
public void testOswf() throws
MalformedURLException,
InvalidActionException,
InvalidRoleException,
InvalidInputException,
InvalidEntryStateException,
WorkflowException
{
//
从xml中读取工作流定义
Workflow wf =new BasicWorkflow("test");
Workflow wf1 = (Workflow)ctx.getBean("workflow");
Configuration cf = new DefaultConfiguration();
wf.setConfiguration(cf);
//wf.initialize("example",100,null);
SpringHibernateWorkflowFactory sf = (SpringHibernateWorkflowFactory)ctx.getBean("workflowFactory");
//
将名称为"example"的工作流持久化到数据库中
sf.saveWorkflow("example",wf.getWorkflowDescriptor("example"),true);
//
从数据库中取出名称为"example"的工作流定义
WorkflowDescriptor wfd = wf1.getWorkflowDescriptor("example");
wf1.initialize("example",100,null);
//
更多的测试...
}
protected void tearDown() throws Exception {
super.tearDown();
try
{
tx.commit();
}
catch(Exception e)
{
}
finally
{
session.close();
System.out.println("end..............");
}
}
|
如果没有什么问题的话在数据库中会生成对应得表,并且在其中出入数据。