2010-02-15 5 views
0

Je personnalise mon installation OpenCms et j'ai créé un objet qui fournit une partie de mon contenu. L'objet modifie ce contenu une fois par heure. Pourriez-vous me dire comment charger ce bean au démarrage d'OpenCms afin qu'il reste en mémoire et qu'il puisse configurer son minuteur?OpenCms - modifier périodiquement le contenu d'un fichier

Répondre

1

Après quelques heures de recherche et d'essais, je l'ai découvert deux façons de le faire:

1) définir la classe comme la classe d'action du module - Je ne l'ai pas testé cette approche

2) utiliser le planificateur de travail disponible dans la couche d'administration - c'est ce que j'ai essayé et cela fonctionne très bien. Vous devez créer une classe qui implémente l'interface I_CmsScheduledJob, par exemple:

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; 

    } 

} 

J'espère que cela peut aider quelqu'un!