Lancement d'une classe au démarrage d'alfresco

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

Lancement d'une classe au démarrage d'alfresco

Bonjour,

Je  viens de créer une classe qui me charge un fichier de configuration XML. Je souhaiterais lancer cette classe au démarrage d'Alfresco afin que les variables de celle-ci soit chargé en mémoire et utilisable par toute mes autres calsse.

De quelle manière dois-je procéder pour déclarrer cette classe et dans quel fichier de configuration.

Merci pour votre aide.
5 Replies
rguinot
Customer

Re: Lancement d'une classe au démarrage d'alfresco

Quel est le besoin ?
Votre problème n'est en rien lié à Alfresco, mais plutôt aux bases du langage Java.
huberd
Member II

Re: Lancement d'une classe au démarrage d'alfresco

Quel est le besoin ?
Votre problème n'est en rien lié à Alfresco, mais plutôt aux bases du langage Java.

Non, mon problème n'est en rien lié aux bases du language java. Mon objectif est de lancer ma classe Java qui lit un fichier de configuration XML au démarrage d'Alfresco.

A ce jour, ma classe existe, elle lit le fichier XML et le charge en mémoire, mais pour que cela puisse se produire, il faut bien à un moment donné exécuter cette classe. Ma question est donc la suivante : comment charger cette classe au démarrage d'Alfresco, et non comment écrire cette classe qui existe déjà et qui réalise déjà ce pour quoi je l'ai implémenté.

A ce jour, les méthodes cette classe sont exécutée par le bean org.alfresco.community.constraint.ListLanguageConstraint qui charge les valeurs d'une constrainte. Ca marche, mais pour moi ce n'est pas la meilleure des méthodes et ressemble plus à une bidouille qu'autre chose.

   <constraints>
      <constraint name="community:LanguageConstraint" type="org.alfresco.community.constraint.ListLanguageConstraint">
         <parameter name="allowedValues">
            <list>
            </list>
         </parameter>
         <parameter name="caseSensitive"><value>true</value></parameter>
      </constraint>

Le fichier XML qui est chargé en mémoire contient des informations comme le login et le mot de passe d'accès à la base de donnée qui contient les valeurs de la constrainte, il contient également la liste des polices et leur emplacement sur le système, polices qui sont utilisé par une de mes classes qui permet l'écriture de référence documentaire en bas de page de chaque PDF généré par mon workflow d'approbation. Ce fichier XML contient également une valeur de debug, avec un niveau qui correspond au niveau de détail. D'autres paramètres sont également chargés en mémoire et pour être réutilisé au sein d'autre classes sans avoir à relire à chaque fois que c'est nécessaire le fichier XML source.

Le fichier XML chargé en mémoire à titre d'information
<?xml version="1.0" encoding="UTF-8" ?> 

<config>
   <property type="config">
     
      <!– Database properties –>
      <dbhost>localhost</dbhost>
      <dbport>3306</dbport>
      <dbname>alfresco</dbname>
      <dbuser>alfresco</dbuser>
      <dbpasswd>password</dbpasswd>
      <dbclass>org.gjt.mm.mysql.Driver</dbclass>
      <jdbcdriver>jdbc:mysql</jdbcdriver>
           
      <!–dbclass>org.postgresql.Driver</dbclass–>
      <!–jdbcdriver>jdbc:postgresql</jdbcdriver–>
           
      <!– Workflow properties –>
      <wkfluser>workflow</wkfluser>
      <wkflpasswd>password</wkflpasswd>

     <!– Debug properties –>
      <debug>true</debug>
      <level>4</level>

      <!– Application properties –>
      <version>2.1.b1</version>
      <tag>Approved by Alfresco System (Development Beta 1)</tag>
     
      <!– Fonts properties –>
      <fontpath>C:\Windows\Fonts</fontpath>
      <font>Tahoma.ttf</font>
      <fontbold>Tahomabd.ttf</fontbold>
      <copyrightfont>Arial.ttf</copyrightfont>
      <reffontsize>7</reffontsize>
      <inffontsize>7</inffontsize>
     
      <!– Document Reference Position –>
      <posx>25</posx>
      <posy>13</posy>
      <logo>images\logo\AlfrescoLogo32.jpg</logo>
     
   </property>
</config>

Le code de la constrainte
package org.alfresco.community.constraint;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

import org.alfresco.community.utility.db.DbUtils;
import org.alfresco.community.utility.db.SqlHelper;
import org.alfresco.community.config.GetConfig;

import org.alfresco.repo.dictionary.constraint.ListOfValuesConstraint;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;


public class ListLanguageConstraint extends ListOfValuesConstraint {
   private static Log logger = LogFactory.getLog("org.alfresco.community.constraint.DbUtils");
   
   public ListLanguageConstraint() {
      super();
      logger.debug("Appel superConstructeur");
      // SetallowedValues(getSubsisiary());      
   }
   
   public List <String> getAllowedValues() {
      logger.debug("getAllowedValues");
      return super.getAllowedValues();
   }
   
   public void setAllowedValues(List allowedValues)
   {
      if (allowedValues == null)
      {
         allowedValues=getLanguage();
      }
      logger.debug("setAllowedValues Avant super.set");
      super.setAllowedValues(allowedValues);
      logger.debug("setAllowedValues Après super.set");
   }
   
   /**
    *
    * @return
    */
   private ArrayList<String> getLanguage(){
      ArrayList<String>language=null;
      Connection conn=null;
      
      try{

         GetConfig.init(); // Méthode de chargement du fichier XML en mémoire

         conn = DbUtils.getDBConnection();
         language = SqlHelper.getAllLanguage(conn);
         DbUtils.closeDBConnection(conn);
      }
      catch(Exception e){
         logger.error(e.getMessage());
      }
      return language;
   }
}

La classe de connexion à la base de donnée utilisant les méthodes d'accès aux données du fichier XML chargé en mémoire
package org.alfresco.community.utility.db;

import java.sql.*;

import org.alfresco.community.config.GetConfig;

public class DbUtils {
   
   public static Connection getDBConnection() throws Exception {
      
      Connection con = null;
      
      try {
         Class.forName(GetConfig.dbClass()); //MySQL Driver
         con = DriverManager.getConnection(GetConfig.dbConnection(),GetConfig.dbUser(),GetConfig.dbPasswd());
         
         return con;
      }
      catch(Exception e){
         e.printStackTrace();
      }
      return null;
   }
   
    public static void closeDBConnection(Connection con) throws SQLException {
            
      try {
         con.close();
      }
      catch(Exception e){
         e.printStackTrace();
      }
   }
}
rivarola
Active Member

Re: Lancement d'une classe au démarrage d'alfresco

Bonjour,

A priori n'importe quel bean déclaré dans la configuration Spring sera instancié au démarrage. On peut en plus déclarer dans son élément bean une "init-method" pour appeler une méthode d'initialisation particulière.
huberd
Member II

Re: Lancement d'une classe au démarrage d'alfresco

Bonjour,

A priori n'importe quel bean déclaré dans la configuration Spring sera instancié au démarrage. On peut en plus déclarer dans son élément bean une "init-method" pour appeler une méthode d'initialisation particulière.

Peux-tu me dire quel fichier de configuration je dois impacter. Qu'est ce que la configuration spring, où puis-je la trouver avec exemple de déclaration à l'appui.

Merci pour ton aide précieuse.
huberd
Member II

Re: Lancement d'une classe au démarrage d'alfresco

Bonjour,

A priori n'importe quel bean déclaré dans la configuration Spring sera instancié au démarrage. On peut en plus déclarer dans son élément bean une "init-method" pour appeler une méthode d'initialisation particulière.

Arfffff, en réfléchissant bien, il me semblais bien que j'avais la solution suite à tes infos (cf mon post http://forum.alfresco-fr.org/viewtopic.php?f=11&t=1798) avec l'exemple suivant qui ne correspondait pas à l'époque à mon besoin:

<bean id="CheckInOutBean" class="org.alfresco.community.web.bean.CheckInOutBean" init-method="init"></bean>

Arrêtes moi si je me trompe, je pense alors que je dois déclarer mon bean comme ceci alors :

<bean id="GetConfig" class="org.alfresco.community.config.GetConfig" init-method="init"></bean>

Je test cela dès demain et te tiens au courant.