Enterprise Manager offre de nombreuses fonctionnalités et fenêtres de supervision.
Par exemple, on peut rapidement obtenir le détail des exécutions des flux SOA dans l’écran « Flow Instances », leur état (Completed, Failed…), les dates des différents évènements de l’exécution, voir si une erreur s’est produite et en avoir le détail.
Dans l’écran « Error Hospital », on y trouve des synthèses d’erreurs agrégées par type, nom ou service. Dans tous les cas, on peut filtrer par tout type de critère.
Mais parfois (souvent ?), ces nombreux rendus ne suffisent pas. En pratique, on a parfois besoin de plus de détails, ou de l’équivalent de ce nous offre EM mais sous une autre forme (rapport ordonnancé, IHM personnalisée ou simplifiée…). Il faut alors (re)prendre la main sur les données, pour pouvoir les exploiter d’avantage.
C’est ce que nous permet de faire Facade API.
Imports
Cela nécessite d’abord de lier la librairie suivante à son projet (v12.1.3.0.0) :
${ORACLE_HOME}\soa\soa\modules\oracle.soa.mgmt_11.1.1\soa-infra-mgmt.jar
On y trouve notamment les classes Locator et LocatorFactory, points d’entrée de Facade API.
import oracle.soa.management.facade.Locator; import oracle.soa.management.facade.LocatorFactory;
Initialisation
On crée facilement une instance de Locator grâce aux informations du serveur SOA dont vous souhaitez exploiter les données :
Hashtable<Object, Object> env = new Hashtable<Object, Object>(); env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory"); env.put(Context.PROVIDER_URL, "t3://localhost:8001"); env.put(Context.SECURITY_PRINCIPAL, "weblogic"); env.put(Context.SECURITY_CREDENTIALS, "welcome1"); Locator locator = LocatorFactory.createLocator(env);
Une fois l’instance de Locator créée, vous avez accès à de nombreuses méthodes d’extraction de données qui vous permettront de reconstruire votre Enterprise Manager.
Extraction de données
Voyons comment retrouver programmatiquement les données affichées dans Enterprise Manager (ne faites pas tout de suite attention au paramètre filter).
Les exécutions
CompositeInstanceFilter filter = new CompositeInstanceFilter(); List compositeInstances = locator.getCompositeInstances(filter);
Grâce à cette méthode, vous pouvez récupérer la liste de toutes les exécutions de flux correspondant aux critères du filtre passé en paramètre.
Il s’agit de la même liste que celle affichée dans EM, celle-ci :
Vous pouvez donc l’exploiter comme bon vous semble. L’objet CompositeInstance que vous récupérez contient toutes les informations dont vous aurez besoin.
Par exemple, vous pouvez récupérer les Sensor de l’exécution grâce à la méthode suivante :
List sensorData = compositeInstance.getSensorData();
Pour chaque exécution, récupérez sa liste de SensorData contenant la clé et la valeur du Sensor.
Vous pouvez donc aisément reproduire le filtre sur les Sensor que fournit Enterprise Manager.
Comme « Error Hospital »
Il est également possible de récupérer programmatiquement ce tableau présenté dans l’écran « Error Hospital » :
Et ceci grâce à cette méthode :
FlowInstanceFilter filter = new FlowInstanceFilter(); List faultAggregationReports = locator.getFaultAggregationReport(filter, FaultGroup.FAULT_NAME);
Cela nous rend directement un objet « FaultAggregationReport » basé sur la combinaison d’un filtre et d’un critère de tri (ici, FaultGroup.FAULT_NAME).
Encore une fois, si Error Hospital, bien que très pratique ne vous suffit pas, Facade API vous permet ici de reprendre la main sur les données pour concevoir votre propre tableau, graphique ou tout autre type de représentation.
Toutes les erreurs
Une méthode existe pour extraire, en un appel, l’ensemble des erreurs correspondant aux critères du filtre passé en paramètre :
FaultFilter filter = new FaultFilter(); List faults = locator.getFaults(filter);
On peut imaginer ici développer un traitement quotidien envoyant par mail un rapport des erreurs réparties par service pour une période donnée. Ce que ne permet pas Enterprise Manager.
Le filtre
Le filtre est présent dans chaque appel de méthode des exemples ci-dessus.
Selon la méthode utilisée et le type d’objet retourné, il est logiquement de type différent : CompositeInstanceFilter, FlowInstanceFilter, FaultFilter… Il y a cependant des critères de filtre communs à tous.
CompositeDN
Il s’agit de l’identifiant d’un Composite, il se présente sous le format suivant (revision est optionnel) :
/<partition name>/<composite name>!<revision>
Si l’on veut ne retourner que les instances d’un Composite précis, on va utiliser le filtre comme suit :
CompositeInstanceFilter filter = new CompositeInstanceFilter(); filter.setCompositeDN("MA_PARTITION/monService!1.1");
MinCreationDate
Si l’on ne souhaite afficher que les exécutions des dernières 24H, on pourra utiliser ce filtre :
CompositeInstanceFilter filter = new CompositeInstanceFilter(); filter.setMinCreationDate(new Date(System.currentTimeMillis() - (1000 * 60 * 60 * 24)));
States
Vous pouvez n’afficher que les exécutions qui sont dans à l’état « Recovery Required » ou « Failed » grâce au filtre sur l’attribut State :
int[] states = { CompositeInstance.STATE_RECOVERY_REQUIRED, CompositeInstance.STATE_FAULTED }; CompositeInstanceFilter filter = new CompositeInstanceFilter(); compositeInstanceFilter.setStates(states);
Vous pouvez bien sûr combiner tous les filtres.
En conclusion
Les consoles natives de la SOA Suite sont bien conçues et très complètes. Il arrive néanmoins que des besoins spécifiques apparaissent et ne soient pas satisfaits par les consoles Oracle, ou du moins de manière pas assez directe.
Facade API vous permet de ne pas être « limité » à Enterprise Manager, de pouvoir réécrire à votre manière certaines fonctionnalités, et ainsi, tous les types de rapport deviennent envisageables.
Il ne reste plus qu’à laisser libre court à votre imagination.