JAVA项目开发笔记(3)Shark部分: 迭代器(Iterator)和shark查询表达式(qeury express)

本文介绍Shark框架中的迭代器与查询表达式的使用方法。通过示例讲解如何利用Shark迭代器进行高效查询,并介绍FilterBuilder类简化查询表达式的编写过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有一段时间没写文章了,这段时间项目比较忙一直没写,在shark方面也加深了很多了解,这一段时间完成了权限的设置,流程变量直接赋值等等很多功能,有时间再补上.这里说下迭代器(Iterator)和shark查询表达式(qeury express)

 

对shark的迭代器我以前一直搞不明白为什么不用java的iterator 而是用自已的wfprocessIterator、wfActivityIterator等这种迭代器,直到用到shark的查询才明白.原这shark提供的这个迭代器在得到时并没有内容,而是在你需要得到数据时(调用它的方法)再生成sql到库里查东东,也就是说可以给迭代器一个查询表达式,来减少数据量.这个表达示我在网上查到以下两个例子

 

Example 6. Getting process managers based on some criteria

This example shows how to get process managers based on some criteria. It'll try to get all process managers which package Id is "test", and which state is enabled.

      ExecutionAdministration eAdmin = Shark.getInstance()
.getAdminInterface()
.getExecutionAdministration();
eAdmin.connect("user", "secret", "", "");

WfProcessMgrIterator pmi = eAdmin.get_iterator_processmgr();
String query = "packageId.equals(/"test/") && enabled.booleanValue()";
pmi.set_query_expression(query);
WfProcessMgr[] procs = pmi.get_next_n_sequence(0);

Example 7. Getting processes based on some criteria

This example shows how to get processes created by some process manager based on some criteria. It'll try to get all processes which state is "open.running", which are started in last 10 minutes, which have more than 3 active activities, and which String variable called "myvariable" has value "test".

      /*
WfProcessMgr mgr;
*/
WfProcessIterator wpi = mgr.get_iterator_process();
String query = "state.equals(/"open.running/") && "
+ "startTime.longValue()>(java.lang.System.currentTimeMillis()-10*60*1000) && "
+ "activeActivitiesNo.longValue()>3 && "
+ "context_myvariable.equals(/"test/")";
wpi.set_query_expression(query);
WfProcess[] procs = wpi.get_next_n_sequence(0);

这两个已经写的很详细了.只是这个表达示的写法查的好多也没有找到具体要怎
么写(如我要按流程实例的id查找就弄了好长时间也没写好),
后来发现Shark2.0有提供另外的方法来生成这个表达示那就是FilterBuilder这个类,
有好多种filterBuild如ProcessFilterBuild、processMgrFilterBuild等用来生成各种查询表达示:
用法如下:



这样shark就会根据你的设置来生成查询表达式了,不用再苦恼条件表达示的写法了,
我这代码是按流程实例id来查找的,经我测试生成的表达式是:key.equals("1201_P1_WP37")


另外还有一种比较特别的查找方法,是我在看shark原码进发现的,用法和上面的差不多,
但查到的结果却是和shark的model包中内容差不多的另外一个包中的数据类,
但是可以不依赖shark的迭代器而直接查找用法如下


......


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值