OpenCms - периодически менять содержимое файла - PullRequest
0 голосов
/ 15 февраля 2010

Я настраиваю свою установку OpenCms и создал объект, который доставляет часть моего контента. Объект меняет это содержимое один раз в час. Не могли бы вы посоветовать мне, как загрузить этот бин при запуске OpenCms, чтобы он находился в памяти и мог установить таймер?

1 Ответ

1 голос
/ 15 февраля 2010

После нескольких часов исследований и испытаний я обнаружил два способа сделать это:

1) определить класс как класс Action модуля - я не проверял этот подход

2) использовать планировщик заданий, доступный на уровне администрирования - это то, что я пробовал, и он отлично работает. Вам нужно создать класс, который реализует интерфейс I_CmsScheduledJob, например:

package com.xxx.Trial;

import org.opencms.file.*;
import org.opencms.main.*;
import org.opencms.scheduler.I_CmsScheduledJob;
import java.text.SimpleDateFormat;
import java.util.Calendar;


public class BuildTagCloud implements I_CmsScheduledJob {
  private String text;

  public String launch(CmsObject object, java.util.Map parameters) throws java.lang.Exception {
   Calendar cal = Calendar.getInstance();
   SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

   String data = "Last run: " + sdf.format(cal.getTime());
   this.text = data;

   String resname = "/system/modules/com.xxx.Trial/elements/file.jsp";
   // CmsObject object = OpenCms.initCmsObject("Guest");
   object.loginUser("Admin", "admin's password");

   CmsRequestContext cmsContext = object.getRequestContext();
   CmsProject curProject = cmsContext.currentProject();

   if(curProject.isOnlineProject()){
         CmsProject offlineProject = object.readProject("Offline");
         cmsContext.setCurrentProject(offlineProject);
   }
   CmsResource res = object.readResource(resname);
   object.lockResource(resname);
   CmsFile file = object.readFile(res);
   file.setContents(text.getBytes());
   object.writeFile(file);
   OpenCms.getPublishManager().publishResource(object, resname);
   object.unlockResource(resname);

   return text;

  }

}

Надеюсь, это кому-нибудь поможет!

...