Journalisation de détails personnalisés d'événements professionnels pour l'analyse de site
D'un point de vue professionnel, vous souhaiterez peut-être consigner des détails personnalisés d'événements professionnels.
Pourquoi et quand exécuter cette tâche
Remarque : Les procédures décrites dans cette rubrique et ses sous-rubriques ne s'appliquent qu'aux portlets standard (JSR 168 ou JSR 286).
Ci-après les principaux composants de la structure de journalisation de l'analyse de site pour des portlets standard :
- com.ibm.portal.portlet.service.siteanalyzer.PortletSiteAnalyzerLoggingServiceHome
- Ce service de portlet illustre des méthodes permettant d'obtenir une instance de consignateur spécialisée pour le type de requête. Ce type de requête est ActionRequest (d'action), EventRequest (d'événement), RenderRequest (de rendu) ou ResourceRequest (de ressource). Ce service de portlet peut être obtenu via une recherche JNDI.
- com.ibm.portal.portlet.service.siteanalyzer.PortletSiteAnalyzerLogger
- Les portlets peuvent récupérer une instance de ce consignateur via PortletSiteAnalyzerLoggingServiceHome. Ce service s'applique à une requête pour laquelle il a été créé et propose des méthodes pour connaître l'état du consignateur (activé ou désactivé) et pour créer une entrée de journal d'analyse de site.
- com.ibm.portal.portlet.service.siteanalyzer.ParameterNamesProcessor
- Requête des noms de paramètre de requête, notamment des noms de paramètre de rendu codés dans les URL de portail ; doit être la plus courte possible. Cette recommandation ne laisse pas beaucoup d'espace aux noms de paramètre dans les entrées du journal d'analyse de site. L'interface ParameterNamesProcessor permet aux développeurs du portlet d'attribuer à PortletSiteAnalyzerLogger un rappel pour le traitement des noms de paramètre de requête. Les mises en oeuvre de cette interface sont appelées par la structure de l'analyse de site avant assemblage de la section de la chaîne requête de l'URI de requête qui est consignée dans le fichier journal d'analyse de site.
Procédure
- Activation du consignateur de l'analyse de site pour des portlets standard : Vous activez le consignateur de l'analyse de site pour des portlets standard à l'aide du service de configuration du portail SiteAnalyzerLogService. Vous définissez sa propriété dans la console WebSphere® Integrated Solutions Console via le fournisseur d'environnement de ressources WP SiteAnalyzerLogService. Pour ce faire, procédez comme suit :
- Mise en œuvre d'un processeur de noms de paramètre : l'exemple de code suivant illustre une mise en œuvre de l'interface ParameterNamesProcessor. Il inclut le mappage statique d'éventuels noms de paramètre de requête dans un expression plus explicite que vous souhaitez utiliser dans les entrées du journal d'analyse de site. Si aucun remplacement n'est possible pour un nom de paramètre, la clé d'origine est renvoyée pour être consignée telle quelle dans l'entrée du journal de l'analyse de site. Exemple :
public class ParameterNamesProcessorSample implements ParameterNamesProcessor { private static final Hashtable<String, String> PARAM_NAMES_MAP; static { PARAM_NAMES_MAP = new Hashtable(); PARAM_NAMES_MAP.put("ci", "CurrentItem"); } public String processParameterName(String paramName) { // get a replacement for the given parameter name or // return the original key if not replacement exists if (PARAM_NAMES_MAP.containsKey(paramName)) { return PARAM_NAMES_MAP.get(paramName); } else { return paramName; } } } - Récupération du service de consignation de l'analyseur de site du portlet : l'exemple de code suivant illustre la méthode init d'une classe de portlet qui recherche une instance du service de consignation de l'analyseur de site du portlet. Il permet également de créer une instance d'un exemple de mise en œuvre de l'interface ParameterNamesProcessor.
private PortletSiteAnalyzerLoggingServiceHome iSALogServiceHome = null; private ParameterNamesProcessorSample iParamNamesProc = null; public void init() throws PortletException { com.ibm.portal.portlet.service.PortletServiceHome psh; javax.naming.Context ctx = new javax.naming.InitialContext(); try { psh = (PortletServiceHome) ctx .lookup(PortletSiteAnalyzerLoggingServiceHome.JNDI_NAME); } catch (javax.naming.NameNotFoundException e) { // error handling } // obtain the service object PortletSiteAnalyzerLoggingServiceHome iSALogServiceHome = (PortletSiteAnalyzerLoggingServiceHome) psh .getPortletService(PortletSiteAnalyzerLoggingServiceHome.class); // instantiate the sample parameter names processor paramNamesProc = new ParameterNamesProcessorSample(); } - Récupération d'une instance du consignateur de l'analyse de site du portlet : une instance de consignateur dépend d'une requête de portlet spécifique. Sa validité est liée à un cycle de traitement de requête. La création de l'instance du consignateur doit donc être effectuée pour chaque requête. L'objet de service obtenu à l'étape précédente permet d'accéder à diverses méthodes afin d'obtenir une instance de consignateur. L'exemple de code suivant illustre la récupération d'une instance de consignateur pour la requête RenderRequest en cours dans la méthode doView d'un portlet. Cet exemple d'instance du processeur de noms de paramètre passe également à la méthode getLogger afin d'enregistrer ce rappel pour le consignateur renvoyé. Exemple :
protected void doView(final RenderRequest renderRequest, final RenderResponse renderResponse) throws PortletException, IOException { final PortletSiteAnalyzerLogger saLogger = iSALogServiceHome.getLogger(renderRequest, renderResponse, iParamNamesProc); // further request processing } - Consignation d'un événement professionnel : lorsqu'un portlet utilise l'instance de PortletSiteAnalyzerLogger, le consignateur insère un événement professionnel dans le fichier journal d'analyse de site. Exemple :
protected void doView(final RenderRequest renderRequest, final RenderResponse renderResponse) throws PortletException, IOException { // request processing // check whether the logger is enabled if (saLogger.isLogging()) { // create a site analysis log entry saLogger.log("A sample business event"); } // further request processing }
Résultats
Présentation du journal d'analyse de site pour les portlets standard : les entrées de journal d'analyse de site insérées par PortletSiteAnalyzerLogger présentent la même structure que les entrées de journal créées par d'autres types de consignateurs de l'analyse de site proposés par le portail. Ce consignateur particulier met également en oeuvre la norme NCSA Combined.
L'exemple suivant illustre comment la représentation codée en URL de l'événement professionnel personnalisé est écrite dans la section de l'URI de requête d'un enregistrement du journal. Les caractères non ASCII sont tout d'abord codés en séquences de 2 ou 3 octets à l'aide de l'algorithme UTF-8, puis en espaces %HH. L'événement professionnel codé précède le fragment de la requête qui commence par un point d'interrogation. En outre, le nom du paramètre de la requête ci a été remplacé par ParameterNamesProcessorSample et apparaît désormais dans le fragment de la requête dans la section de l'URI de requête de l'enregistrement du journal comme suit : CurrentItem.
9.37.3.88 - jdoe [22/Nov/2008:22:11:27 +0100] "GET /Portlet/
5_8000CB1A00U6B02NVSPH1G20G1/SamplePortlet/A%20sample%20business%20event
?PortletPID=5_8000CB1A00U6B02NVSPH1G20G1&PortletMode=view&PortletState=normal
&RequestType=render&CurrentItem=9783000216008 HTTP/1.1" 200 -1
"http://myserver.company.com/Page/6_8000CB1A00UR402F0JC25U1O25/SamplePage"
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.18) Gecko/20081029
Firefox/2.0.0.18" "JSESSIONID=0000JwIm04xm7btVLwzCj9Qo-uj:-1"