Action automatique lancement d'Alfresco

cancel
Showing results for 
Search instead for 
Did you mean: 
ptitmat
Member II

Action automatique lancement d'Alfresco

Bonjour,

Je souhaiterais créer une action qui se lance automatiquement lors du lancement d'alfresco.

Cette action a pour l'instant un but assez simple qui est de lister tous les éléments présents dans espace précis.

Je recherche donc les moyens de créer cette action (La partie lancement automatique).

Donc par exemple, si je lance alfresco, il doit m'afficher dans la console tous les éléments dans companyHome.

Je sais qu'il existe dans les classes java des exemples de lacement à partir d'une action "extends ActionExecuterAbstractBase".

Mais je ne veux pas que cela soit lancé via une action a exécuter mais automatiquement au lancement d'alfresco.

J'espère avoir été assez clair dans l'expression de mon besoin?

Cordialement,
Ptitmat
3 Replies
cleseach
Active Member II

Re: Action automatique lancement d'Alfresco

Salut Ptitmat,

A mon sens, il faut te greffer à la séquence de bootstrap.
Le fichier bootstrap-context.xml commence par le commentaire suivant :
<!–
    Repository Bootstrap Sequence.

    This file specifies the initialisation (and order of initialisation) to perform during Repository startup.

    The pattern for adding new initialisation to the bootstrap sequence is as follows:

    1) Develop a bean that implements the Spring interface ApplicationListener
    2) Place the initialisation logic in the method onApplicationEvent(ApplicationEvent event)…

       public void onApplicationEvent(ApplicationEvent event)
       {
          if (event instanceof ContextRefreshedEvent)
          {
             // initialisation logic here
          }
       }

    3) Add the bean definition to this file - Note: the beans are initialised in the order they are specified.
–>

Cordialement,
Charles Le Seac'h
ptitmat
Member II

Re: Action automatique lancement d'Alfresco

Merci pour la réponse,

Je regarderais tous çà demain au travail.

Ptitmat
ptitmat
Member II

Re: Action automatique lancement d'Alfresco

Bonjour,

J'ai regardé la proposition faite par Charles Le Seac'h

Je me pose plusieurs questions :

Le premier exemple testé est le suivant

package org.alfresco.community.repo;

import org.alfresco.service.cmr.model.FileFolderService;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.security.PersonService;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;

//import com.ibm.wsdl.Constants;
//import com.sun.corba.se.impl.orbutil.closure.Constant;

public class DeplaceUsers implements ApplicationListener {// AbstractLifecycleBean{

   public final static String NAME = "deplace-users";
   private NodeService nodeService;
   //private FileFolderService fileFolderService;
   private PersonService personService;

   public void setNodeService(NodeService nodeService)
   {
      this.nodeService = nodeService;
   }

   public void setFileFolderService(FileFolderService fileFolderService)
   {
      this.fileFolderService = fileFolderService;
   }
   public PersonService getPersonService() {
      return personService;
   }

   public void setPersonService(PersonService personService) {
      this.personService = personService;
   }

   public NodeService getNodeService() {
      return nodeService;
   }

   public void onApplicationEvent(ApplicationEvent event) {
      
      System.out.println("on entre dans cette fonction");
      // TODO Auto-generated method stub
   }
}

Ce test est effectué pour voir si cette classe est bien lu lors du lancement de l'application, j'ai donc le résultat suivant :
je rentre dans une boucle infini qui m'affiche on entre dans cette fonction


Pour le deuxième test effectué, j'ai étendu mon code avec la classe AbstractLifecycleBean voir la page
http://wiki.alfresco.com/wiki/Shutdown_Implementation


package org.alfresco.community.repo;

import org.alfresco.service.cmr.model.FileFolderService;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.security.PersonService;
import org.alfresco.util.AbstractLifecycleBean;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;





//import com.ibm.wsdl.Constants;
//import com.sun.corba.se.impl.orbutil.closure.Constant;

public class DeplaceUsers extends AbstractLifecycleBean{ //implements ApplicationListener {//{

   public final static String NAME = "deplace-users";
   private NodeService nodeService;
   @SuppressWarnings("unused")
   private FileFolderService fileFolderService;
   private PersonService personService;

   //private static String ENTERPRISE_ROOT = "LPR";

   public void setNodeService(NodeService nodeService)
   {
      this.nodeService = nodeService;
   }

   public void setFileFolderService(FileFolderService fileFolderService)
   {
      this.fileFolderService = fileFolderService;
   }



   public PersonService getPersonService() {
      return personService;
   }

   public void setPersonService(PersonService personService) {
      this.personService = personService;
   }

   public NodeService getNodeService() {
      return nodeService;
   }

   


//   public void onApplicationEvent(ApplicationEvent event) {
//      
//      System.out.println("on entre dans cette fonction");
//      // TODO Auto-generated method stub
//      
//      
//   }

   @Override
   protected void onBootstrap(ApplicationEvent arg0) {
      // TODO Auto-generated method stub
      System.out.println("on entre dans cette fonction");
   }

   @Override
   protected void onShutdown(ApplicationEvent arg0) {
      // TODO Auto-generated method stub
   }
}

Dans ce cas, je n'affiche qu'une seule fois la phrase on entre dans cette fonction.

Je cherche donc à comprendre les différence entre les deux. Si quelqu'un peut m'expliquer, merci d'avance.

La deuxième question :
Comment trouver mon espace UserHomes à partir de rien.

C'est à dire : je sais comment le récupérer quand je suis dans un noeud lors du lancement d'une action "manuelle"
fonction protected  void executeImpl(Action action, NodeRef actionedUponNodeRef) obtenu avec la classe ActionExecuterAbstractBase.

Mais comment obtenir sans partir d'un NodeRef ?

Cordialement,
Ptitmat