mercredi 17 mars 2010



DYE INJECTION

L’objectif de cette fonctionnalité est de tracer en log le passage d’un flux applicatif dans une architecture n tiers. Cela a pour intérêt de pourvoir identifier unitairement en cas de problème le flux client quelque soit les sauts de protocole ou d’instance.



Cette option mise en place, Weblogic injecte un identifiant Œ sur une première requête  (dans ou hors Weblogic) et propage cet identifiant sur l’ensemble des protocoles traversés (HTTP/RMI/JMS/JDBC/Transaction).

On peut récupérer cet identifiant :

ü  En le traçant dans son propre log (custom) 
ü  En utilisant les aspects Weblogic pour notifier l’événement sans modification de code

La mise en place de ce log nécessite un paramétrage dans le domaine et l’ajout d’un fichier de configuration dans l’application à tracer (dans le cas de l’utilisation d’aspect).

L’exemple implémente un EAR qui sur requêtage HTTP propage une chaine de caractère en passant par une Servlet, un EJB Session, un post dans une Queue puis une récupération par un MDB.

Pour le custom log, l’identifiant est remonté dans la sortie standard sur l’appel de la Servlet (doGet), de l’EJB (message) et du MDB (onMessage).

Pour le log par aspect, l’événement est remonté après exécution de la Servlet, après l’appel de la méthode, après l’envoi du message sur la queue et après réception du message sur le MDB. La notification est faite dans le file store Ž du module de diagnostique sur la partie EventsDataArchive. L’information pourra être extraite dans un fichier XML pour exploitation et analyse.



INJECTION CUSTOM

Le paramétrage nécessite une modification de la configuration du domaine (sur l’ensemble des instances). Une fois cette modification effectuée sur le domaine, l’injection de lID est effectuée dans le contexte.

CONTEXT


L’activation de l’option de contexte permet de mettre en place dans Weblogic l’injection de l’identifiant et de pouvoir récupérer celui-ci dans son propre code via l’interface suivante :

import weblogic.diagnostics.context.DiagnosticContextHelper;
DiagnosticContextHelper.getContextId()

Via la console d’administration Weblogic ou un scripte WLST, effectuer les actions suivantes sur le domaine (l’ensemble des instances mises en jeux).

·         Activer l’option Diagnostic Context.

Diagnostic à Context à ${server name} à Enable


Activation de l’exemple et résultat dans les traces de la sortie standard :


Servlet
      protected void doService(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

                  String leMessageServlet = DiagnosticContextHelper.getContextId() + " : SERVLET message={" + request.getParameter("message") + "} - instance={" + System.getProperty("weblogic.Name") + "}";                      
                  System.out.println( leMessageServlet );

EJB
      public String message(String message) {

                  String leMessageEjb = DiagnosticContextHelper.getContextId() + " : EJB message={" + message + "} - instance={" + System.getProperty("weblogic.Name") + "}";                     
                  System.out.println(leMessageEjb);

MDB
      public void onMessage(javax.jms.Message message) {

            String leMessageMdb = DiagnosticContextHelper.getContextId() + " : MDB message={" + message + "} - instance={" + System.getProperty("weblogic.Name") + "}";                          
            System.out.println(leMessageMdb);

Log managed1 (côté Servlet)
<24 nov. 2009 11 h 03 VET>
<24 nov. 2009 11 h 03 VET>
71bc061dacce84fe:61092fcb:12526d2df38:-8000-000000000000000f : SERVLET message={HELLO} - instance={managed1}

Log managed3 (côté EJB/JMS)
<24 nov. 2009 11 h 03 VET>
<24 nov. 2009 11 h 03 VET>
71bc061dacce84fe:61092fcb:12526d2df38:-8000-000000000000000f : EJB message={HELLO-71bc061dacce84fe:61092fcb:12526d2df38:-8000-000000000000000f} - instance={managed3}
71bc061dacce84fe:61092fcb:12526d2df38:-8000-000000000000000f : MDB message={TextMessage[ID:<193523.1259076896515.0>, HELLO-71bc061dacce84fe:61092fcb...]} - instance={managed3}




INJECTION ASPECT

En plus de la phase décrite dans le chapitre précédent, le paramétrage nécessite une modification de la configuration du domaine ainsi qu’un paramétrage de l’application déployée.

APPLICATION


Ajouter dans l’EAR/WAR/JAR le fichier suivant META-INF/weblogic-diagnostics.xml (le plus simple étant dans l’EAR)

xml version='1.0' encoding='UTF-8'?>
<wldf-resource xmlns="http://www.bea.com/ns/weblogic/weblogic-diagnostics" xmlns:sec="http://www.bea.com/ns/weblogic/90/security" xmlns:wls="http://www.bea.com/ns/weblogic/90/security/wls" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.bea.com/ns/weblogic/weblogic-diagnostics http://www.bea.com/ns/weblogic/weblogic-diagnostics/1.1/weblogic-diagnostics.xsd">
     
      <name>weblogic-diagnosticsname>
 
      <instrumentation>
 
      <enabled>trueenabled>
   
            <wldf-instrumentation-monitor>
                  <name>Servlet_Before_Servicename>
                  <enabled>trueenabled>
                  <action>TraceActionaction>  
            wldf-instrumentation-monitor>
 
         
            <wldf-instrumentation-monitor>
                  <name>EJB_After_SessionEjbMethodsname>
                  <enabled>trueenabled>
                  <action>TraceActionaction>  
            wldf-instrumentation-monitor>           
          
            <wldf-instrumentation-monitor>
                  <name>JMS_After_MessageSentname>
                  <enabled>trueenabled>
                  <action>TraceActionaction>  
            wldf-instrumentation-monitor>     
           
            <wldf-instrumentation-monitor>
                  <name>MDB_After_MessageReceivedname>
                  <enabled>trueenabled>
                  <action>TraceActionaction>  
            wldf-instrumentation-monitor>               
                      
    instrumentation>
 
   
wldf-resource>

 DOMAINE


Via la console d’administration Weblogic ou un scripte WLST, effectuer les actions suivantes sur le domaine.

·         Activer l’option Diagnostic Context (sur toutes les instances).

Diagnostic à Context à ${server name} à Enable


·         Créer un Diagnostic Modules

Diagnostic à Diagnostic Modules à New à ${module name}


·         Targeter le sur les instances

Diagnostic à Diagnostic Modules à ${module name} à Targets


·         Créer une entrée DyeInjection dans Instrumentation

Diagnostic à Diagnostic Modules à ${module name} à Instrumentation à Add à DyeInjection


·         Redamarrer les instances, déployer l’application est activer la pour activer les composants JEE tracés.

·         Regarder le résultat dans le filestore EventsDataArchive

Diagnostic à Log Files à  EventsDataArchive à View


·         On peut observer le même contexte ID sur les différents appels qui correspond à une même activation (flux)




EXTRACTION

Les données du file store peuvent être visualisées via la console, mais cette méthode est peut pratique et rend impossible l’agrégation sur des domaines et instances différents.

Une commande WLST permet d’extraire les données du File Store issue de la partie EventDataArchive (il vous faut au préalable arrêter l’instance associée).

exportDiagnosticData(storeDir="${domaine_home}/servers/${server_name}/data/store/diagnostics",logicalName="EventsDataArchive", exportFileName="C:/Temp/server1-events.xml")

Exemple avec un filter sur un ID de context
exportDiagnosticData(storeDir="${domaine_home}/servers/${server_name}/data/store/diagnostics",
  logicalName="EventsDataArchive", exportFileName="events.xml",
  query="CONTEXTID='583c10bfdbd326ba:58f87d21:1126b53f6ec:-7ff3-0000000000000c2a'")

Le fichier resultant
 
    RECORDIDjava.lang.Long
    TIMESTAMPjava.lang.Long
    CONTEXTIDjava.lang.String
    TXIDjava.lang.String
    USERIDjava.lang.String
    TYPEjava.lang.String
    DOMAINjava.lang.String
    SERVERjava.lang.String
    SCOPEjava.lang.String
    MODULEjava.lang.String
    MONITORjava.lang.String
    FILENAMEjava.lang.String
    LINENUMjava.lang.Integer
    CLASSNAMEjava.lang.String
    METHODNAMEjava.lang.String
    METHODDSCjava.lang.String
    ARGUMENTSjava.lang.String
    RETVALjava.lang.String
    PAYLOADjava.lang.Object
    CTXPAYLOADjava.lang.String
    DYESjava.lang.Long
    THREADNAMEjava.lang.String
 
  1125855940782878eebb90778267a5:11584a4c:12507fc599a:-8000-000000000000003e<anonymous>TraceActionbase_domainAdminServerSampleEARSampleWebappServlet_Before_ServiceSampleServlet.java31sample.servlet.SampleServletdoGet(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V4297064448[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'
  2125855940782878eebb90778267a5:11584a4c:12507fc599a:-8000-000000000000003e<anonymous>TraceActionbase_domainAdminServerSampleEAREJB_After_SessionEjbMethodsSampleSessionEjbBean.java129sample.ejb.session.SampleSessionEjbBeansetSessionContext(Ljavax/ejb/SessionContext;)V4297064448[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'
  3125855940782878eebb90778267a5:11584a4c:12507fc599a:-8000-000000000000003e<anonymous>TraceActionbase_domainAdminServerSampleEAREJB_After_SessionEjbMethodsSampleSessionEjbSession.java28sample.ejb.session.SampleSessionEjbSessionsetSessionContext(Ljavax/ejb/SessionContext;)V4297064448[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'
  4125855940782878eebb90778267a5:11584a4c:12507fc599a:-8000-000000000000003e<anonymous>TraceActionbase_domainAdminServerSampleEAREJB_After_SessionEjbMethodsSampleSessionEjb_kih370_Impl.java132sample.ejb.session.SampleSessionEjb_kih370_ImplsetSessionContext(Ljavax/ejb/SessionContext;)V4297064448[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'
  5125855940787578eebb90778267a5:11584a4c:12507fc599a:-8000-000000000000003e<anonymous>TraceActionbase_domainAdminServerSampleEARJMS_After_MessageSentSampleSessionEjbBean.java87javax.jms.QueueSendersend(Ljavax/jms/Message;)V4297064448[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'
  6125855940789078eebb90778267a5:11584a4c:12507fc599a:-8000-000000000000003e<anonymous>TraceActionbase_domainAdminServerSampleEARMDB_After_MessageReceivedSampleMdbBean.java103sample.ejb.mdb.SampleMdbBeanonMessage(Ljavax/jms/Message;)V4297064448[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'

0 commentaires:

AUTEUR

Ma photo
Carrières Sur Sein, Yvelines, France
Consultant Oracle (Ancien consultant BEA depuis 2001), je m’occupe des expertises sur les produits Oracle : SOCLE (Weblogic, Coherence, JRockit) SOA (Service Bus, SOA Suite, BPM)
MON CV

LABEL 3D

Blogumulus by Roy Tanck and Amanda Fazani

LABEL CLOUD

MAP

Locations of visitors to this page

AUTRES BLOG

LIVRES

MEMBRES