是否可以限制curation task
仅在对单个项调用时执行,而在对社区、集合或整个DSpace调用时中止?
我知道,可以限制curation task
只处理项目的,而不是社区和集合,但这不是我想要的。
背景:
我有一个curation task
,它发送关于一个项目的电子邮件。
它的目的是在单个项目上调用。
如果有人不小心在一个集合或整个DSpace上调用它,它会发送数千封电子邮件,这显然是一个问题。
发布于 2017-01-31 04:53:49
答案可在手册中找到:
由于任务在可以是简单(项)或容器(集合和社区)的DSO上运行,因此调用任务的方式存在一个根本问题或模糊性:如果DSO是一个集合,CS应该在集合的每个成员上调用任务,还是任务“知道”如何自己执行该任务?这个决定是通过查找@Distributive注释来做出的:如果存在,CS假定任务将管理详细信息,否则CS将遍历集合,并在每个成员上调用任务。
因此,为了使任务非分布式,您可以设置@Distributive
注释,告诉Curation系统您自己处理分发,然后在任务中不实现分发。
@Distributive
注释的意思是“自行处理分发”,而不是“让我们使用管理系统处理分发”。因此,注释的名称有点误导。
这在实现org.dspace.curate.CurationTask
接口以及扩展org.dspace.curate.AbstractCurationTask
类时都是有效的。
发布于 2017-01-30 04:13:32
您应该实现接口org.dspace.curate.CurationTask,而不是扩展org.dspace.curate.AbstractCurationTask类。
实际上,抽象类负责在DSpace容器( Collection)中的所有对象(Collection)中实现管理任务的自动分发。直接实现接口,您可以决定在社区或集合上运行该管理程序时立即返回。
int perform(DSpaceObject dso) throws IOException {
if (!(dso instanceof Item)) {
return Curator.CURATE_SKIP;
}
//... do your work on the item
return Curator.CURATE_SUCCESS;
}
https://stackoverflow.com/questions/41933971
复制