Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 露天垃圾清理工作业未在预设时间触发_Java_Date_Lucene_Alfresco_Recycle Bin - Fatal编程技术网

Java 露天垃圾清理工作业未在预设时间触发

Java 露天垃圾清理工作业未在预设时间触发,java,date,lucene,alfresco,recycle-bin,Java,Date,Lucene,Alfresco,Recycle Bin,我在Alfresco one 5.0.0.3上测试垃圾清理器模块,该模块在Tomcat7上运行 问题在于触发清除操作的时间 清洁操作的预设时间为每天04:00,保护天数设置为1。昨晚(2015/03/26)18:10,我将某些文件上传到存储库中,然后在稍后删除了它们。根据配置,我刚删除的这些文件应该在垃圾桶里保存一天。但今天(2015/03/27)上午10:00左右,我发现这些文件已经被垃圾清理器删除,垃圾清理器类的日志如下: 2015-03-27 07:31:08,717 DEBUG [co

我在Alfresco one 5.0.0.3上测试垃圾清理器模块,该模块在Tomcat7上运行

问题在于触发清除操作的时间

清洁操作的预设时间为每天04:00,保护天数设置为1。昨晚(2015/03/26)18:10,我将某些文件上传到存储库中,然后在稍后删除了它们。根据配置,我刚删除的这些文件应该在垃圾桶里保存一天。但今天(2015/03/27)上午10:00左右,我发现这些文件已经被垃圾清理器删除,垃圾清理器类的日志如下:

2015-03-27 07:31:08,717  DEBUG [content.cleanup.TrashcanCleaner] [DefaultScheduler_Worker-4] Trashcan cleaner query : 
2015-03-27 07:31:09,139  DEBUG [content.cleanup.TrashcanCleaner] [DefaultScheduler_Worker-4] @\{http\://www.alfresco.org/model/system/1.0\}archivedDate:[1970-01-01T00:00:00.000Z TO 2015-03-26T06:31:08.717Z] 
2015-03-27 07:31:15,662  INFO  [content.cleanup.TrashcanCleaner] [DefaultScheduler_Worker-4] Trashcan Cleaner is about to purge the following items :
2015-03-27 07:31:15,662  INFO  [content.cleanup.TrashcanCleaner] [DefaultScheduler_Worker-4]  - file1
2015-03-27 07:31:15,662  INFO  [content.cleanup.TrashcanCleaner] [DefaultScheduler_Worker-4]  - file2
2015-03-27 07:31:15,662  INFO  [content.cleanup.TrashcanCleaner] [DefaultScheduler_Worker-4]  - file3
从上面的日志中可以看出,清洁器似乎在2015-03-27 07:31:08被触发,这与04:00时的预设值不同,而且这些文件还没有在垃圾桶中停留一天。 我对lucene搜索系统中设置的时间和Alfresco的存储库时间计算非常困惑

存档数据(删除时的时间)计算通过以下方法进行: 下面是获取要删除的节点的主要代码:

public void execute() {
  if (this.protectedDays > 0) {
    Date fromDate = new Date(0L);
    Date toDate = new Date(new Date().getTime() - 86400000L * Long.valueOf(this.protectedDays).longValue());
    if (toDate == null) {
        throw new RuntimeException("Error while building the query.");
    }
    String strFromDate = ISO8601DateFormat.format(fromDate);
    String strToDate = ISO8601DateFormat.format(toDate);
    StringBuilder buf = new StringBuilder(128);

    buf.append("@").append(Repository.escapeQName(ContentModel.PROP_ARCHIVED_DATE))
      .append(":").append("[").append(strFromDate)
      .append(" TO ").append(strToDate).append("] ");

    String query = buf.toString();
    SearchParameters sp = new SearchParameters();

    sp.setLanguage("lucene");
    sp.setQuery(query); 

    NodeRef archiveRootRef = this.nodeArchiveService.getStoreArchiveNode(Repository.getStoreRef());
    sp.addStore(archiveRootRef.getStoreRef());

    if (logger.isDebugEnabled()) {
      logger.debug("Trashcan cleaner query : ");
      logger.debug(query);
    }

    UserTransaction tx = null;
    ResultSet results = null;
    try {
      tx = this.transactionService.getNonPropagatingUserTransaction(false);
      tx.begin();
      results = this.searchService.query(sp);
      List<NodeRef> deletedItemsToPurge = results.getNodeRefs();

      if (logger.isInfoEnabled()) {
        logger.info("Trashcan Cleaner is about to purge the following items :");

        for (NodeRef item : deletedItemsToPurge) {
          String itemName = (String)this.nodeService.getProperty(item, ContentModel.PROP_NAME);
          logger.info(" - " + itemName);
        }
      }

      this.nodeArchiveService.purgeArchivedNodes(deletedItemsToPurge);
      tx.commit();
    }
    catch (Throwable err) {
      if (logger.isWarnEnabled())
        logger.warn("Error while cleaning the trashcan : " + err.getMessage());
      try {
        if (tx != null) {
          tx.rollback();
        }
      }
      catch (Exception tex) {
        if (logger.isWarnEnabled())
          logger.warn("Error while during the rollback : " + tex.getMessage());
      }
    }
    finally {
      if (results != null) {
        results.close();
      }
    }
  }
}
public void execute(){
如果(this.protectedDays>0){
日期fromDate=新日期(0L);
Date toDate=新日期(new Date().getTime()-86400000L*Long.valueOf(this.protectedDays.longValue());
如果(toDate==null){
抛出新的RuntimeException(“生成查询时出错”);
}
字符串strFromDate=ISO8601DateFormat.format(fromDate);
字符串strToDate=ISO8601DateFormat.format(toDate);
StringBuilder buf=新的StringBuilder(128);
buf.append(“@”).append(Repository.escapeQName(ContentModel.PROP\u存档日期))
.append(“:”).append(“[”).append(strFromDate)
.附加(“至”).附加(日期)。附加(“]”);
字符串查询=buf.toString();
SearchParameters sp=新的SearchParameters();
sp.setLanguage(“lucene”);
sp.setQuery(查询);
NodeRef archiveRootRef=this.nodeArchiveService.getStoreArchiveNode(Repository.getStoreRef());
sp.addStore(archiveRootRef.getStoreRef());
if(logger.isDebugEnabled()){
debug(“垃圾桶清理器查询:”);
调试(查询);
}
UserTransaction tx=null;
ResultSet results=null;
试一试{
tx=this.transactionService.getNonPropagatingUserTransaction(false);
tx.begin();
结果=this.searchService.query(sp);
List deletedetemstopurge=results.getNodeRefs();
如果(logger.IsInfo已启用()){
info(“垃圾桶清洁器即将清除以下项目:”;
对于(NodeRef项:deletedItemStopPurge){
String itemName=(String)this.nodeService.getProperty(item,ContentModel.PROP_NAME);
logger.info(“-”+项目名称);
}
}
this.nodeArchiveService.purgeArchivedNodes(deletedItemsToPurge);
tx.commit();
}
捕获(可丢弃错误){
if(logger.iswarnabled())
logger.warn(“清理垃圾桶时出错:+err.getMessage());
试一试{
如果(tx!=null){
tx.回滚();
}
}
捕获(特克斯例外){
if(logger.iswarnabled())
logger.warn(“回滚期间出错:+tex.getMessage());
}
}
最后{
如果(结果!=null){
结果:关闭();
}
}
}
}
为了计算lucene使用的存档日期,我做了几个测试: 我在2015/03/27 18:26通过文档库根目录中的共享UI创建了一个文件TestFile.txt,然后在2015/03/27 18:29将其移动到垃圾桶

然后,我尝试通过使用lucene查询来检索该文件:
@{http://www.alfresco.org/model/system/1.0}归档日期:[1970-01-01T00:00:00.000Z至2015-03-26T23:00:00.000Z]
in
archive://SpacesStore
。 我发现如果我将toDate更改为
2015-03-26T23:00:00.000Z
之前的任何时间戳,例如
2015-03-26T22:59:59.999Z
,则无法检索该文件。但是任何时间戳在或等于
2015-03-26T23:00:00.000Z
之后,都会成功检索该文件

那么为什么
2015-03-26T23:00:00.000Z
不是我实际删除它的时间?对内容节点存档日期的时间计算有何想法

我在UTC-01时区。方法
ISO8601DateFormat.format(new Date())
在该方法的实际调用时间前一小时返回时间戳


这是为什么?

我不确定这是否真的是你的答案,但不要太关注lucene范围查询的时间

如果您只使用日期,它们就可以正常工作,但对于其余的时间查询,它实际上不起作用

但这应该没问题,您只需要使用java进行额外检查,看看日期是否早于现在

为什么在设置作业时没有触发它,我不确定,但它可能是一个露天作业,所以需要声明XML和cronjob值