Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2546 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Appeler une methode sans l'appler :|

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Appeler une methode sans l'appler :|

n°1037814
ponponben
Posté le 06-04-2005 à 17:43:01  profilanswer
 

Je sais que ca a l'aire compliqué mais avec un ti exemple, vous aller vite comprendre.
J'ai des méthodes qui quand elles sont appeler realise des operations similaires entre elle.
Je voudrais donc ne les ecrirent qu'une fois.  
Mon probleme c'est que je ne sais pas les mettre dans une sous methode. en effet,  
j'ai besoin du temps d'execution, du nombre d'element present dans une hashmap avant, apres execution.
 
Exemple :  
 
  public Map executeRemoteLoadSpecialists()
  {
    Map<String, Object> mapResult = new HashMap<String, Object>();
    try
    {
      mapResult.put(METHODE_NAME, "executeRemoteLoadSpecialists" );
      long lTimeBefore = System.currentTimeMillis();
 
      executeLoadSpecialists();
 
      long lTimeAfter = System.currentTimeMillis();
      mapResult.put(USED_TIME, doFormatUsedTime(lTimeBefore, lTimeAfter));
      mapResult.put(STATUS, STATUS_OK);
    }
    catch(Exception ex)
    {
      m_logger.error("*** StaticDataService : executeRemoteLoadSpecialists() : Exception", ex);
      mapResult.clear();
      mapResult.put(STATUS, STATUS_KO);
    }
    return mapResult;
  }
 
  public Map executeRemoteLoadAllIndexes()
  {
    Map<String, Object> mapResult = new HashMap<String, Object>();
    try
    {
      mapResult.put(METHODE_NAME, "executeRemoteLoadAllIndexes" );
      long lTimeBefore = System.currentTimeMillis();
 
      mapResult.put(COUNT_BEFORE, "" + m_mapIDXByIsinData.size());
      m_mapIDXByIsinData.clear();
      executeLoadAllIndexes();
      mapResult.put(COUNT_AFTER, "" + m_mapIDXByIsinData.size());
 
      long lTimeAfter = System.currentTimeMillis();
      mapResult.put(USED_TIME, doFormatUsedTime(lTimeBefore, lTimeAfter));
      mapResult.put(STATUS, STATUS_OK);
    }
    catch(Exception ex)
    {
      m_logger.error("*** StaticDataService : executeRemoteLoadAllIndexes() : Exception", ex);
      mapResult.clear();
      mapResult.put(STATUS, STATUS_KO);
    }
    return mapResult;
  }
 
Vous allez me dire que je peut la diviser en 2 sous fonctions (une avant, l'autre apres). Oui, mais d'abord, c'est pas aussi beau, mais en plus, c'est méthodes sont ajouter automatiquement (par introspection) dans mon client.ce préfererais un truc du genre
 
 
 
public Map executeRemoteLoadAllIndexes(String methodeName, Map map, boolean isWidthTime)
  {
    Map<String, Object> mapResult = new HashMap<String, Object>();
    try
    {
      mapResult.put(METHODE_NAME, methodeName);
      long lTimeBefore = System.currentTimeMillis();
 
      (map!=null)mapResult.put(COUNT_BEFORE, "" + m_map.size());
      m_map.clear();
      executerLaMethode(methodeName);
      (map!=null)mapResult.put(COUNT_AFTER, "" + m_map.size());
 
      long lTimeAfter = System.currentTimeMillis();
      if(isWidthTime)mapResult.put(USED_TIME, doFormatUsedTime(lTimeBefore, lTimeAfter));
      mapResult.put(STATUS, STATUS_OK);
    }
    catch(Exception ex)
    {
      m_logger.error("*** StaticDataService : executeRemoteLoadAllIndexes() : Exception", ex);
      mapResult.clear();
      mapResult.put(STATUS, STATUS_KO);
    }
    return mapResult;
  }
 
Voila ce que je voudrais faire. Est-ce possible, si oui est ce que vous pouvez me donner qlq pistes. Bien à vous, et merci d'avance.

mood
Publicité
Posté le 06-04-2005 à 17:43:01  profilanswer
 

n°1037842
trevor
laissez la vie vous étonner...
Posté le 06-04-2005 à 17:51:10  profilanswer
 

va voir du côté du paquetage java.lang.reflect
 
à mon avis, si c pas làdedans que tu auras ta réponse, c kil ny en pas :)
 
a+


---------------
TReVoR - http://dev.arqendra.net - http://info.arqendra.net
n°1037945
the real m​oins moins
Posté le 06-04-2005 à 18:50:15  profilanswer
 

interfaces, méthodes abstraites, ça te dit qqchose?
 
ensuite, pour le timing et autres trucs qui se passent autour des methodes, peut etre que l'aop peut t'aider, aussi.
 
et sinon, executerLaMethode(methodeName); en gros c'est
 
Machin.class.getMethod(methodName).execute();


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1037998
sebi
Posté le 06-04-2005 à 19:24:12  profilanswer
 

je confirme AOP peut faire l'affaire , regarde le concept "Around advice", et puis c'est l'occasion d'utiliser Spring sans se tapper de l'AspectJ;)


Message édité par sebi le 06-04-2005 à 19:24:53
n°1038432
ponponben
Posté le 07-04-2005 à 08:47:27  profilanswer
 

Merci a vous

n°1038792
ponponben
Posté le 07-04-2005 à 13:26:13  profilanswer
 

Voila ce a quoi je suis finalement arrivé. Beaucoup plus pritique.  
 
private Map invokeMethod(String[] methods,boolean isWithTime, boolean isCountEnabled, Map map)
  {
    Map<String, Object> mapResult = new HashMap<String, Object>();
    try
    {
      // Method name
      String methodName =  Thread.currentThread().getStackTrace()[3].getMethodName();
      mapResult.put(METHODE_NAME,methodName);
 
 
      // Element count (BEFORE)
      if(pm_bIsCountEnabled && pm_map != null)
      {
        mapResult.put(COUNT_BEFORE, map.size());
        map.clear();
      }
 
      // Exceution Time (START)
      long lTimeBefore = System.currentTimeMillis();
 
      // Invoke methods
      String status = STATUS_OK;
      for(int i = 0; i < methods.length; i++)
      {
        Object InterResult = StaticDataService.class.getDeclaredMethod(methods[i],new Class[]{}).invoke(this,new Object[]{});
        if(InterResult != null)
        {
          if(InterResult instanceof Map)
          {
            Map mMap = (Map)InterResult;
            if(mMap.get(STATUS).equals(STATUS_KO))
            {
              status = STATUS_KO;
            }
          }
          mapResult.put(methods[i], InterResult);
        }
      }
 
      // Exceution Time (STOP)
      if(isWithTime)
      {
        mapResult.put(USED_TIME, doFormatUsedTime(lTimeBefore, System.currentTimeMillis()));
      }
 
      // Element count (AFTER)
      if(pm_bIsCountEnabled && map != null)
      {
        mapResult.put(COUNT_AFTER, map.size());
      }
 
      // Status
      mapResult.put(STATUS, status);
    }
    catch(Exception ex)
    {
      m_logger.error("*** StaticDataService : addInformation() : Exception", ex);
      mapResult.clear();
       
      // Method name
      String methodName = Thread.currentThread().getStackTrace()[3].getMethodName();
      mapResult.put(METHODE_NAME, methodName);
      mapResult.put(STATUS, STATUS_KO);
    }
    return mapResult;
  }
 
A l'appel de methode ca donne :
    String[] methodsInvok = new String[]
        {
        "executeRemoteLoadRVLStocks",
        "executeRemoteLoadRVLWarrants",
        "executeRemoteLoadAllIndexesComposition",
        "executeRemoteLoadAllIndexes",
        "executeRemoteLoadMembers",
        "executeRemoteLoadSpecialists"
    };
    return invokeMethod(methodsInvok, true, false, null);
 
    String[] methodsInvok = new String[]{
        "executeLoadRVLStocks"
    };
    return invokeMethod(methodsInvok, true, true, m_mapRVLByIsinDataStocks);

n°1038794
benou
Posté le 07-04-2005 à 13:32:18  profilanswer
 

pour info, tu peux mettre null à la place de new Object[]{} et new Class[]{}  
 
et pour peux que tu sois en 1.5, tu peux carrément ne rien mettre :)

n°1038884
ponponben
Posté le 07-04-2005 à 14:57:55  profilanswer
 

merci de l'info, ca fait moins chargé


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Appeler une methode sans l'appler :|

 

Sujets relatifs
Appeler un bouton alors qu'il est dans une class a part[CH] bouquin pour l'analyse et la methode de création de site pro.
appeler une fonction PHP suite à un clic ?NullPointerException avec la methode equals et split !!!! [Résolu]
Appeler une CSS dans code PHP ?Appeler une function par url..est-il possible?
Quitter une methode et une appletMethode ADO en vb.net
Aide de méthode de programmation pour mon programme[SQL/ADP] Appeler une fonction dans un Etat
Plus de sujets relatifs à : Appeler une methode sans l'appler :|


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)