2010-02-15 2 views
0

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

ответ

1

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

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

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; 

    } 

} 

Я надеюсь, что это может помочь кому-то!