2010-02-15 39 views
0

我正在自定义我的OpenCms安装并创建了一个对象来传递我的部分内容。该对象在一个小时内更改此内容一次。您能否告诉我如何在OpenCms启动时加载这个bean,以便它驻留在内存中并能够设置它的计时器?OpenCms - 定期更改文件的内容

回答

1

的研究和试验一些小时后我发现这样做的方法有两种:

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; 

    } 

} 

我希望这可以帮助别人!