2017-01-30 51 views
0

是否可以将curation task限制为仅针对单个项目调用时执行,并且在针对社区,集合或整个DSpace调用时是否中止?将curation任务限制为* single *项目

我知道有可能限制curation task只处理项目s而不是社区和集合,但这不是我所期待的。

背景:

我有一个curation task发送电子邮件有关项目。
它打算在单个项目上调用。
如果有人不小心在集合或整个DSpace上调用它,它会发送数千封电子邮件,这显然是一个问题。

回答

1

答案是手册中找到:

由于任务在数字存储示波器操作,可无论是简单的(Items)还是容器(Collections和Communities),基本的 问题或者如何调用一个任务都是模棱两可的:如果DSO是一个 集合,那么CS应该调用任务的每个成员 集合,或者做任务“知道”如何做tha t本身?该 决定由寻找@Distributive注释提出:如果 目前,CS假定任务将管理的细节,否则 CS会走路的收集,并调用每个成员的任务。

因此,为了使任务不分配,您将@Distributive注解,告诉你自己处理分布,则不要在你的任务落实分布的策展制度。

什么@Distributive注释的意思是,“自行处理通讯”代替“让我们策展制度手柄分配”。所以注释的名称有点误导。

当你实现org.dspace.curate.CurationTask界面,以及当您扩展org.dspace.curate.AbstractCurationTask类作为这个工程。

1

你应该实现的接口org.dspace.curate.CurationTask,而不是扩展org.dspace.curate.AbstractCurationTask类。

事实上,抽象类是负责实现在DSpace容器(Community,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; 
} 
+0

这样我就可以跳过一个'Community' /'Collection'对象,但社区的/集合的'items'仍然被处理。看起来这种行为是在'Curator'类'curate'方法中实现的,'AbstractCurationTask'中的'distribute'方法似乎完全没有涉及到。 – MartinW

+1

你是对的!你可以在curation任务上使用@Suspendable注解,并且如果dso不是一个Item,我们将返回CURATE_FAIL而不是CURATE_SKIP – abollini

+0

是的,如果你使用' CURATE_FAIL'而不是'CURATE_SKIP',但只要你认为curation系统在单个项目之前处理容器(目前它是这样做的)。但我发现了一个更好的解决方案,使用'@ Distributive'注释。看到我自己的答案。 – MartinW