Release Notes 1.0 ES1

date auteur version modif
26/06/03 CAF 1.0 · Création. Paramétrage pour invoquer le client eGX de UERP
21/07/03 CAF 1.0 · Nouveauté dans la gestion des traces : Appender de type jdbc.
20/01/04 CAF 1.0 · Gestion des utilisateurs nommés.
27/01/04 CAF 1.0 · Optimisation accès BDD.
06/02/04 CAF 1.0 · ExecuteQuery disponible sur chaque view.
09/02/04 CAF 1.0 · Point sur la migration log4j du socle.
11/02/04 CAF 1.1 · Procédure de mise-à-jour OC4J.
11/02/04 PRG 1.1 · Procédure d'installation de la clé de licence.
12/02/04 TIF 1.1 · Réorganisation du plan.
12/02/04 TIF 1.2 · Ajout de la version cible d'OC4J.
13/02/04 TIF 1.2 · Modifs de la procédure de migration OC4J.
23/02/04 CAF 1.2 · Précision sur le lien entre ut_config et mev.
26/05/04 PRG 1.3 · Ajout d’une nouvelle valeur pour ExecuteQuery.
02/06/04 PRG 1.3 · Nouveauté dans la gestion des traces : ajout nouvelle valeur dans le MDC.

Contexte

Ce socle se nomme v5.0.0.ES1 en référence à la version web qui est la cible de ce développement.

Cette version est destinée à être mise en production pour la version 5.0.0.ES1 du mode web.

L'OC4J cible de ce développement est la version 9.0.3 avec le JDK1.3.1.

Modifications pour l'installation

Ce paragraphe synthétise les différentes modifications à effectuer pour migrer les OC4J "standalone" des postes de développements de la version 500 à la version 500ES1 du socle technique.

Attention : la génération des jars place les fichiers dans le répertoire jars/egx.

Modification de librairies

Changement de version de JAXB

Nous passons de la version 1.0.0 à la version 1.0.2 de JAXB. Cette version est nécessaire pour ConfEditor et corrige de nombreux bugs.

Copier tous les jars de tous les sous-répertoires \lib\jwsdp-1.3 se trouvant dans le répertoire issu de CVS dans chaque répertoire j2ee\home\application\egxXXX\egxXXX-web-yyy\WEB-INF\lib.

Attention : pas de sous répertoire dans les répertoires lib d'OC4J. Il faut tout mettre à plat.

Supprimer le fichier jaxb-ri.jar de ce même répertoire WEB-INF\lib.

Gestion des utilisateurs nommés

Pour la gestion de la licence, le socle technique utilise un package Java qui n'est pas présent dans la version 1.3 du jdk. Il est nécessaire d'ajouter ce nouveau package au JDK du serveur d'application. Il s'agit du Java TM Cryptography Extension (JCE) 1.2.2.

Copier les fichiers jce1_2_2.jar, US_export_policy.jar, local_policy.jar et sunjce_provider.jar dans le répertoire <java-home >\jre\lib\ext. <java-home> représentant le répertoire racine du jdk ( fixé par la variable d'environnement JAVA_HOME). Vous les trouverez dans le répertoire lib de l'environnement de développement.

Si vous n'executez pas encore votre OC4J avec le JDK 1.3.1, alors c'est le moment de l'installer j2sdk-1_3_1_06-windows-i586.exe"\\alcis\produits\SUN Java\j2sdk-1_3_1_06-windows-i586.exe.

Client xmlRpc

Le socle technique utilise l'implémentation XmlRpc d'apache version 1.1. Un nouveau fichier jar est nécessaire : xmlrpc-1.1.jar

Ce fichier jar est disponible dans le répertoire lib\xmlrpc-1.1 de l'environnement de développement.

Ce fichier jar est à copier dans chaque répertoire lib sous j2ee\home\application\egxXXX\egxXXX-web-yyy\WEB-INF\lib.

Faire le ménage

Supprimer les librairies suivantes de vos répertoires web-inf\lib (si elles sont absentes, c'est encore mieux) :

  • classes12.jar
  • jaxb-xjc.jar
  • jndi.jar
  • nls_charset12.jar
  • c4j.jar
  • rt.jar
  • servlet.jar

Ajout du Parser XML

Ajouter le fichier xmlparserv2.jar qui se trouve dans le répertoire lib provenant de CVS dans tous les web-inf\lib.

Mise à jour de la configuration

Mettre à jour le schema :

Une nouvelle version du schéma est disponible dans le répertoire doc\config de l'environnement de développement.

Ce fichier est à copier dans chaque répertoire racine des applications web en remplacement du précédent.

Mettre à jour la configuration :

Utiliser confEditor pour faire la migration.

En plus de rendre conforme la configuration par rapport au schéma, cette migration ajoute automatiquement les nouveaux éléments du socle technique tel que les ViewObject, ApplicationModule, Action.

Installation de la clé de licence

Ce paragraphe décrit la procédure pour l’installation d’une clé licence dans la base de données. Cette clé est nécessaire à partir du socle Technique 5.0.0ES1. A noter que cette procédure devient immédiatement obsolète dès la sortie d’ACE Manager chargé de l’opération via ces agents.

Récupération des infos

Les infos suivantes sont nécessaires pour la création d’une clé licence « Utilisateurs nommés » interne ACE.

  • Global DataBase Name :

Pour obtenir cette information, exécuter l’ordre SQL dans l’instance concernée :

(exemple sur alcis)

SQL> select * from global_name;

GLOBAL_NAME

  • ----------------------------------------------

GNX.ALCIS.ACE.FR

SQL>

  • Identifiant du client : ACE

Obtenir la clé

La clé est à demander à BTR en lui fournissant les informations suivantes :

(exemple pour alcis)

  • Cle de licence 'Utilisateurs nommés'
  • De type interne
  • Global DataBase Name : GNX.ALCIS.ACE.FR
  • Identifiant du client : ACE

Pour alcis, la clé obtenue est : 5V/aGbV1f5SZQBm5jMT1c74tOUBjpCEv

Installer la clé dans la base

La clé est à stocker dans la base dans la table ut_config.

Insérer les 2 enregistrements dans ut_config :

(exemple pour alcis)

INSERT INTO ut_config (VALEUR, TYP_FIC, NOM_FIC, GNX_SECTION, NOM_CLE, DATMOD, CODSOC, UTIMOD) VALUES ('ACE', ' ', ' ', ' ', 'CLIENT', '20040211', 1, 'PRG');

INSERT INTO ut_config (VALEUR, TYP_FIC, NOM_FIC, GNX_SECTION, NOM_CLE, DATMOD, CODSOC, UTIMOD) VALUES ('5V/aGbV1f5SZQBm5jMT1c74tOUBjpCEv', ' ', ' ', ' ', 'LICENCE_UTILISATEUR', '20040211', 1, 'PRG');

S'assurer que la table mev contient l'enregistrement suivant :

Colonne Valeur
Codent UT_CONFIG
Codsoc 1
Codsoc_phy Codsoc de ut_config

Fin de la procédure de mise à jour des postes de travail développeur.

Modification du fichier de configuration

Ces modifications sont apportées automatiquement par l'outil de migration du fichier de configuration.

Nouvelle ViewObject

Une nouvelle ViewObject pour lire la table UtConfig : UtConfigView.

Configuration ajoutée par ConfEditor :

<viewobject name= "UtConfigView" defFullName= "fr.ACE.technicalframework.businesscomponent.viewobject.UtConfigView" depthCount= "0" />

Nouveaux ApplicationModule

Nom Description
UerpManager pilote le client xmlRpc qui permet de contacter le binaire UERP d’ACE.
LicenceManager gère le contrôle de licence.
SharedViewObjectFactory gère la création des ViewObject partagées.

Configuration ajoutée par ConfEditor :

<applicationmodule name= "UerpManager" defFullName= "fr.ACE.technicalframework.businesscomponent.applicationmodule.UerpManager" sessionType= "statefull" />

<applicationmodule name= "LicenceManager" defFullName= "fr.ACE.technicalframework.businesscomponent.applicationmodule.LicenceManager" sessionType= "statefull" />

<applicationmodule name= "SharedViewObjectFactory" defFullName= "fr.ACE.technicalframework.businesscomponent.applicationmodule. SharedViewObjectFactory " sessionType= "statefull" />

Nouvelle action

Cette nouvelle action se nomme "killSession".

  • Syntaxe :

KillSession()

  • Configuration ajoutée par ConfEditor :

<action name= "killSession" class= "fr.ACE.technicalframework.application.action.KillSession" />

  • Description

Cette action permet de détruire la session http du navigateur.

Elle possède deux particularités :

  • Elle est exécutée après toutes les autres actions d'une requête, quelle que soit sa position dans la chaîne de cinématique.
  • Plusieurs actions killSession dans une même requête n'ont pas d'impact.

Autrement dit, son effet s'applique une fois la requête http terminée quelle que soit sa position et son nombre dans la cinématique.

Exemple : Ces requêtes donnent le même résultat.

view=Clients&cinematic=retrieve(1);display(1);killSession()&entity=1

view=Clients&cinematic=killSession();retrieve(1);display(1)&entity=1

view=Clients&cinematic=retrieve(1);killSession();display(1)&entity=1

view=Clients&cinematic=killSession();retrieve(1);display(1);killSession()&entity=1

Ajouts dans la structure du fichier de configuration

Client xmlRpc

Description de la structure

Un nouveau nœud est défini pour faire le lien avec ACE : config/application/link_to_ACE

Nœuds Description
link_to_ACE Lien vers ACE. Optionnel
nœuds fils xmlrpc Lien de type xmlRpc. Obligatoire.
attributs minInstance Nombre minimal par défaut d'instances dans le pool de xmlRpc. Obligatoire.
maxInstance Nombre maximal par défaut d'instances dans le pool de xmlRpc. Obligatoire.
nœuds fils client Paramétrage du client xmlRpc
attributs connection Chaîne de connexion pour communiquer avec le serveur xmlRpc d’ACE. Optionnel.
minInstance Nombre minimal d'instances dans le pool de client xmlRpc. Optionnel. S'il n'est pas présent, prise en compte de l'attributminInstance sur le nœud xmlrpc.
maxInstance Nombre maximal d'instances dans le pool de client xmlRpc. Optionnel. S'il n'est pas présent, prise en compte de l'attributmaxInstance du nœud xmlrpc.
timeOut Temps d'attente en ms de la réponse du serveur xmlRpc. Représente la durée maximale de la boucle de scrutation de la réponse du serveur xmlRpc. Optionnel. Valeur par défaut de 5000 ms.
delay Temps d'attente en ms entre deux scrutations de lecture de la réponse du serveur xmlRpc. Permet de limiter la consommation cpu (voir attribut timeOut).Optionnel. Valeur par défaut de 10 ms.
server Paramétrage du serveur xmlRpc. Non utilisé.
attributs port Attributs du serveur xmlRpc. Noms réservés pour une future utilisation.
minInstance
maxInstance

Exemple de paramétrage

<link_to_ACE>

<xmlrpc minInstance= "0" maxInstance= "10" >

<client timeOut= "2000" delay= "20" />

</xmlrpc>

</link_to_ACE>

Le timeout est de 2000 ms avec une période de scrutation de 20 ms.

Paramétrage de la chaîne de connexion.

La chaîne de connexion peut se paramétrer de deux façons différentes :

  • Dans la configuration

Selon la méthode précisée en Erreur ! Source du renvoi introuvable..

Ce paramétrage est prioritaire sur le second. En cas d'absence de la chaîne de connexion dans la configuration, le socle prend en considération le paramétrage fait dans le serveur d'application.

  • Dans le serveur d'application.

Nous prenons comme exemple Oracle OC4J.

Dans le fichier web.xml de l'application web, il faut définir un nouveau paramètre de contexte comme il en existe déjà pour eGX.. Ce paramètre se nomme egx_xmlrpc_client_connection et se défini de la façon suivante :

<web-app>

<context-param>

<param-name> egx_xmlrpc_client_connection </param-name>

<param-value> http://iris:8080 </param-value>

</context-param>

<servlet>

Optimisation des accès base

Sur la définition de ViewObject

Buffer circulaire de RowSet

Pour optimiser les performances, le socle conserve les résultats des requêtes (les RowSet) dans un buffer circulaire. La taille de ce buffer est paramétrable par type de ViewObject, avec une valeur par défaut disponible sur le nœud parent viewObject_def.

Un nouvel attribut est disponible sur les nœuds viewobject et sur viewobject_def en valeur par défaut : rowSetBufferSize.

Partage de ViewObject

A la gestion d'un buffer circulaire s'ajoute le partage des mêmes ViewObject entre les différents utilisateurs. Cette optimisation n'a de sens que pour les ViewObject utilisées "en lecture", comme les tables de codifications.

Un nouvel attribut est disponible sur le nœud viewobject : shared.

Par défaut, la valeur est false (pas de partage de ViewObject)

Remarque : cette optimisation n'est actuellement pas disponible pour la pluspart des ViewObject métier. Une adaptation du code métier est nécessaire pour le rendre compatible avec la gestion du partage de ViewObject.

En terme technique, toute ViewObject qui appelle la méthode getSessionMetier() n'est pas partageable car l'ApplicationModule qui fournit les ViewObject partagées n'est pas l'ApplicationModule SessionMetier mais l'ApplicationModule du socle SharedViewObjectFactory.

Si on veut partager une ViewObject entre les sessions utilisateurs, il faut que cette ViewObject soit indépendante du contexte utilisateur.

Exemple de paramétrage

<viewobject_def minInstance= "1" maxInstance= "50" maxFetchSize= "20" fetchSize= "20" rowSetBufferSize= "5" >

<viewobject name= "UtConfigView" defFullName= "fr.ACE.technicalframework.businesscomponent.viewobject.UtConfigView" rowSetBufferSize= "20" shared= "true" />

Sur chaque View

Un nouvel attribut est disponible sur le nœud view. Deux valeurs sont possibles :

Valeurs Fonctionnalité
optimize Lecture optimisée dans la base. Les données ne sont rechargées que si la clause change.
newBusinessView Lecture optimisée dans la base. Les données ne sont rechargées que pour la 1ère URL de la businessView & à chaque action invalidate() sur la vue.
always Lecture systématique dans la base. Les données sont systématiquement rechargées.

Si rien n'est précisé dans la configuration, la valeur optimize est appliquée par défaut.

Ce qui implique que l'action invalidate() devient utile pour forcer le rechargement des View (mode "optimize") : données potentiellement récupérées dans le cache et pour forcer le rechargement des View (mode "newBusinessView") : données provenant systématiquement de la base.

Exemple de paramétrage

<view nbline= "10" name= "VueUtilisateur" create= "false" type= "VueUtilisateurCourantSociete" executeQuery= "optimize" >

</view>

Evolution des traces

Ecriture dans une table SQL.

La gestion des traces offre un nouveau type de support pour la trace transversale de type activité : une table SQL dédiée.

Cette nouvelle fonctionnalité est à utiliser pour suivre de manière ponctuelle et limitée dans le temps l'activité du mode web. Cette trace n'est pas optimale dans le sens où :

  • La requête SQL est interprétée à chaque exécution (peu performant)
  • Une connexion à la base est monopolisée par chaque session http (lien jdbc sans gestion de pool de connexion : limite de Log4J).

Pour ces raisons et contrairement au support de type fichier texte, le support SQL n'est pas performant.

Nouvelles entrées dans le MDC

Des nouvelles entrées sont disponibles. Leur usage n'est pas réservé à la table SQL. Elles peuvent être utilisées par les Appender de type texte sans restriction.

Clé Signification
DATE Date système sur 8 caractères. Format AAAAMMJJ.
HEURE Heure système sur 9 caractères Format HHMMSSmm
REQUEST_URL Valeur de l'URL jusqu'au '?'
REQUEST_CURRENT_BUSINESSVIEW Nom de la BusinessView courante.
REQUEST_BUSINESSVIEW_LIST Liste de BusinessView (valeur du paramètre view= sur l'URL.)
REQUEST_CINEMATIC Chaîne de cinématique.
REQUEST_TRACE_ID Identifiant de trace provenant d'un paramètre technique de la requête.
REQUEST_NAMESPACE_SEL Paramètres de l'espace de nommage sel
REQUEST_NAMESPACE_CHP Paramètres de l'espace de nommage chp

remarque :

Le Appender JDBCAppender ne supporte pas les caractères ' (simple quote) et , (virgule). Ils sont automatiquement remplacés par un blanc.

Modification de la configuration

Afin de profiter du nouveau support, il faut modifier le fichier de configuration des traces de la façon suivante :

  • Ajout d'un nouvel Appender

<appender name= "JDBC" class= "org.apache.log4j.jdbc.JDBCAppender " >

<param name= "URL" value= "jdbc:oracle:thin:@alcis:1521:gnx" />

<param name= "User" value= "soc1" />

<param name= "Password" value= "xxxxx" />

<layout class= "fr.ACE.technicalframework.log4j.JDBCPatternLayout " >

<param name= "ConversionPattern" value= "INSERT INTO UT_TRACE (datsys,heursys, uuid,username,codsoc,cible,bv_courante,bv_liste,cinematic,chp,sel,trace_ID,url) VALUES ('%X{DATE}','%X{TIME}','%.100X{UUID}','%X{USER}',%X{ENTITY},'%.8X{TARGET}','%.256X{REQUEST_CURRENT_BUSINESSVIEW}','%.256X{REQUEST_BUSINESSVIEW_LIST}','%.256X{REQUEST_CINEMATIC}','%.256X{REQUEST_NAMESPACE_CHP}','%.256X{REQUEST_NAMESPACE_SEL}','%.256X{REQUEST_TRACE_ID}','%.256X{REQUEST_URL}')" />

</layout>

</appender>

remarque

La value du ConversionPattern est écrite de tel manière que les valeurs des chaînes ne peuvent pas dépasser la taille des champs dans la table. Si une valeur est trop grande, elle est tronquée par le Layout.

  • Lien avec une Category

Dans cet exemple, le lien entre la Category et le Appender est désactivé. Il ne doit être activé que de façon ponctuel pour un suivi de l'activité limité dans le temps.

<category name= "activite" additivity= "false" >

<priority value= "debug" />

<appender-ref ref= "activite.log" />

< !-- <appender-ref ref="JDBC"/> -->

</category>

Pour cette fonctionnalité, il faut utiliser uniquement le PatternLayout suivant :

fr.ACE.technicalframework.log4j.JDBCPatternLayout.

Table SQL nécessaire.

Le Appender écrit dans une table SQL.

  • Description

Nom de la table : ut_trace

Description des champs :

Nom Type Commentaire
datsys VARCHAR(8) AAAAMMJJ.
heursys VARCHAR(9) HHMMSSmmm
uuid VARCHAR(100)  
username VARCHAR(256) Correspond au champ username dans la table ut_login.
codsoc INTEGER  
cible VARCHAR(8) ex : CLI
bv_courante VARCHAR(256) ex : BV_DetailClient
bv_liste VARCHAR(256) ex : BV_Client;BV_Fournisseur
cinematic VARCHAR(256) ex : forward(0);display(0)
chp VARCHAR(256) Contenu de l'espace de nommage chp
sel VARCHAR(256) contenu de l'espace de nommage sel.
trace_ID VARCHAR(256) Identifiant de trace. Paramètre technique provenant de l'URL.
url VARCHAR(256) ex : http://www.ACE.fr/btoc

Nouveau paramètre sur l'URL

Dans le cas des traces, il est possible de passer un nouveau paramètre dont le contenu est libre. La valeur de cet attribut alimente une clé (MDC) de Log4J. Cette clé est REQUEST_TRACE_ID. Elle peut être utilisée dans la configuration de Log4J dans un Layout.

view=BV1&cinematic=forward(1)&entity=1&trace_id=identifiant-url15

Cet identifiant permet d'associer un code à certaines cinématiques pour assurer un suivi. Cet attribut est aussi valable en dehors de la trace dans une table SQL.

Optimisation.

Dans le cas des traces SQL, il est possible d’obtenir une nouvelle valeur (clé SQL_OPTIMIZATION du MDC) indiquant si la donnée provient du buffer uniquement ou si la donnée a été lue dans la base de donnée.

Point sur la migration en Log4J du socle

Pour le socle 5.0.0ES1, 53% des classes passent par Log4J pour les traces. Ce qui représente 80% des traces du socle technique.

Rappel

Log4J donne la possibilité de tracer une classe en particulier. Pour ce faire, une category et un appender spécifiques suffisent.

Exemple de configuration pour tracer la classe XMLConfiguration :

<appender name= "trace" class= "org.apache.log4j.DailyRollingFileAppender" >

<param name= "File" value= "traceUnitaire/trace.log" />

<param name= "DatePattern" value= "yyyy-MM-dd'.'" />

<layout class= "org.apache.log4j.PatternLayout" >

<param name= "ConversionPattern" value ="[%d] %-c{1} - %m%n" />

</layout>

</appender>

<category name= "fr.ACE.technicalframework.application.XMLConfiguration" additivity= "false" >

<level value= "debug" />

<appender-ref ref= "trace" />

</category>

astuce :

Les fichiers résultats peuvent se trouver dans des répertoires différents. Pour ce faire, préciser le chemin relatif dans la valeur du paramètre File de l'appender. Dans l'exemple ci dessus, le fichier trace.log se trouvera dans le répertoire traceUnitaire. Mais attention, log4j ne crée pas les répertoires.

Evolutions diverses

Modification du XML de présentation

L'attribut "business_row_count" est supprimé du XML de présentation. Il n'était pas utilisé et diminuait les performances de l'application.

Cet attribut apparaissait dans le XML de présentation si le nombre de lignes dans la base de données était supérieur à la limite "maxFetchSize" par ViewObject. Autrement dit s'il y avait plus de lignes dans la base que ne peut en charger la ViewObject.

La valeur de cet attribut était le nombre réel d'enregistrements dans la base.

Cette fonctionnalité n'est donc plus disponible à partir de 500ES1.

Appel d'API sans bean d'entrée.

On peut invoquer une API sans bean d'entrée. Dans ce cas, on ne définit que le bean de retour de l'API.

Par exemple, l'API de contrôle de licence ne prend pas de paramètre en entrée.

ConfEditor

Cet outil fait parti du socle 5.0.0ES1.

Il permet de faire les migrations de configuration vers la version 5.0.0ES1 et de modifier graphiquement le fichier de configuration sans avoir recours au XML.

Attention : après la migration en 500ES1, il n'y a plus qu'un seul fichier de configuration. L'éclatement en plusieurs fichiers n'a pas pu être maintenu.

Après vérification de bon fonctionnement de la migration, ne pas oublier d'utiliser la fonction CVS permettant de supprimer les fichiers de configurations annexes (view_def.xml, application.xml, etc).

Développement métier

Algorithmes Utilisateurs nommés

La classe fr.ACE.utilitaires.LicenceBusinessNamedUserManagerImpl.java est vide. L'algorithme métier de comptage des utilisateurs nommés reste à implémenter.

Client métier UERP

La déclenchement d'éditions rapides par le code métier reste à implémenter.