40
Guide de programmation

Programming Fr

Embed Size (px)

Citation preview

  • Guide de programmation

  • Guide de programmationCopyright 2011 PRELYTIS

  • iii

    Table des matires1. Programmer PRELYTIS LiveDashBoard ........................................................................................... 1

    1. EJB .................................................................................................................................... 12. Service web ......................................................................................................................... 13. Contenu .............................................................................................................................. 1

    2. API Rest ..................................................................................................................................... 31. Principe de fonctionnement ..................................................................................................... 32. API disponibles .................................................................................................................... 3

    2.1. Statut de l'installation .................................................................................................. 32.2. Cration de la base de paramtrage PRELYTIS ............................................................... 32.3. Suppression de la base de paramtrage PRELYTIS ........................................................... 42.4. Cration de l'arborescence PRELYTIS ........................................................................... 42.5. Rechargement de PRELYTIS LiveDashBoard .................................................................. 42.6. Rechargement du cache des libells internationaliss ......................................................... 52.7. Licence ..................................................................................................................... 52.8. Monitoring des sources de donnes ................................................................................ 52.9. Listes ....................................................................................................................... 62.10. Exemple .................................................................................................................. 72.11. Dtail partir de l'identifiant interne ............................................................................ 72.12. Dtail partir du nom ............................................................................................... 72.13. Statut du gestionnaire de tches ................................................................................... 82.14. Dmarrage du gestionnaire de tches ............................................................................ 82.15. Arrt du gestionnaire de tches ................................................................................... 92.16. Rafraichissement du gestionnaire de tches .................................................................... 92.17. Statut de la dernire excution du gestionnaire de tches .................................................. 9

    3. EJBs ......................................................................................................................................... 101. EJBs de LiveDashBoard 4.2.x ............................................................................................... 10

    1.1. DashboardFacade, accs local ..................................................................................... 101.2. I18nFacade, accs local .............................................................................................. 101.3. Accs un document ................................................................................................ 111.4. Lire la liste des libells d'une langue ............................................................................ 11

    2. Accs distant aux EJBs de LiveDashBoard 4.4.x ....................................................................... 112.1. Le contexte initial ..................................................................................................... 122.2. DashboardFacade, accs distant ................................................................................... 122.3. I18nFacade, accs distant ........................................................................................... 122.4. Accs un document LiveDashBoard ........................................................................... 132.5. Lire la liste des libells d'une langue ............................................................................ 132.6. JBoss 4.2.3 .............................................................................................................. 132.7. GlassFish 2.1 ........................................................................................................... 142.8. WebSphere 6.1 ......................................................................................................... 14

    4. Service web LiveDashBoard v4.2.x : WebService ............................................................................. 161. String hello(String) .............................................................................................................. 162. WSParameterListResponse parameterListRequest(WSParameterListRequest) .................................. 163. WSReportMetaDataResponse reportMetaDataRequest(WSReportMetaDataRequest) ........................ 164. WSReportResponse reportRequest(WSReportRequest) ............................................................... 165. WSReportFilterResponse reportFilterRequest(WSReportFilterRequest) .......................................... 166. WSMenuResponse menuRequest(WSMenuRequest) .................................................................. 17

    5. Faade ....................................................................................................................................... 181. Ajout de faades spcifiques ................................................................................................. 192. Faades d'authentification ..................................................................................................... 20

    2.1. Authentification applicative ........................................................................................ 202.2. Authentification HTTP ............................................................................................... 202.3. Authentification HTTP Header .................................................................................... 202.4. Authentification LDAP .............................................................................................. 212.5. Authentification LiveDashBoard 4.2 ............................................................................. 212.6. Authentification OEM ............................................................................................... 22

  • Guide de programmation

    iv

    2.7. Authentification spcifique ......................................................................................... 226. Intgration par URL .................................................................................................................... 31

    1. Authentification .................................................................................................................. 312. Trackback .......................................................................................................................... 31

    7. Session externe de type "plugin" .................................................................................................... 321. Exemple de paramtrage de session externe "classique" .............................................................. 322. Exemple de paramtrage de session externe "plugin" ................................................................. 323. API Plugin ......................................................................................................................... 334. Exemple de fichier Javascript ................................................................................................ 34

  • 1Chapitre 1. Programmer PRELYTISLiveDashBoard

    PRELYTIS LiveDashBoard (version EAR) est une application web JAVA respectant la norme J2EE 1.4. Elleexpose diffrents canaux de diffusion des informations gres dans LiveDashBoard :

    Des API Rest Des EJBs Stateless Session Bean (SLSB 2.1) avec accs local (LiveDashboard versions 4.2.x) Des EJBs Stateless Session Bean (SLSB 2.1) avec accs distant (LiveDashBoard versions 4.4.x) Un service web rpondant la norme JAVA JSR-109 ** (LiveDashBoard versions 4.2.x)

    PRELYTIS LiveDashBoard (version WAR) ne met disposition que les API Rest.

    * Les services prsents en versions 4.2.x sont toujours prsents en versions 4.4.x.** JSR-109 et JSR-181 sont des normes JAVA spcifiant les rles des fabriquants d'application (tels que PRELYTIS),et des fabriquants de serveurs d'application (tels qu'IBM). De plus, ces normes s'appuient sur la norme web serviceWS-I Basic Profile. Nous pouvons donc dire que les Web services de LiveDashBoard respectent la norme WS-IBasic Profile.

    Par ailleurs, la partie mtier de LiveDashBoard est accessible par un mcanisme de requte/rponse. Ces requtes/r-ponses sont gres par un empilement paramtrable de faades. Le dveloppement d'une ou plusieurs faades spci-fiques permet ainsi d'adapter le fonctionnement de LiveDashBoard aux besoins du client.

    1. EJBUn EJB est un objet binaire qui est expos par le serveur d'application dans lequel est dploy LiveDashBoard.Chaque EJB expose une interface qui peut tre appele par une application cliente JAVA. Le fabriquant de l'EJB peutchoisir d'exposer sont EJB en accs local (accessible uniquement depuis le serveur d'application) et/ou en accs distant(accessible depuis le rseau). Un client d'un tel EJB n'a pas besoin d'environnement particulier pour fonctionner.Donc n'importe quelle application JAVA peut appeler un EJB avec accs distant.

    Cependant, l'accs ces procdures distantes se fait par le rseau sur des ports spcifiques, autres que le port 80.Attention aux configurations rseaux et pares-feux.

    Pour plus de prcisions sur les EJBs, le tutorial de SUN [http://java.sun.com/javaee/reference/tutorials/] est un bondpart.

    2. Service webUn service web est une interface expose en XML, accessible depuis un navigateur par une simple URL. Il n'y a pasde problme de configuration rseau et pare-feu attendre. Un web service n'est pas li une technologie particulire,donc un consommateur de service web peut tre crit dans n'importe quel langage (par exemple en .NET, en PHP, etc.)

    Cependant, la fabrication et la lecture du flux XML rend l'usage des services web moins performants. De plus, commece flux doit tre comprhensible par n'importe quel langage de programmation, les types de donnes transfrablessont limits.

    3. ContenuCes canaux de diffusion sont privilgier, pour intgrer LiveDashBoard avec d'autres applications. Les cha-pitres suivants expliquent les fonctionnalits exposes pour chaque canal, avec des exemples de paramtrage etd'implmentation pour diffrents types de clients (PHP, JAVA, .NET).

    API Rest EJB publis en version 4.2.x

  • Programmer PRELYTIS LiveDashBoard

    2

    EJB publis en version 4.4.x Web services publis en version 4.2.x Faades en version 4.4.x Sessions externes de type "plugin" en version 4.4.1+

  • 3Chapitre 2. API Rest1. Principe de fonctionnement

    L'API permet de crer/supprimer la base de paramtrage, lister/consulter,modifier les lments stocks dans la basede paramtrage (utilisateurs, mondes, ...).

    Cette API est invoque via un flux HTTP en fournissant une URL (avec ventuellement des paramtres) et la mthodeutilise (GET, POST, PUT, DELETE).

    Par dfaut cette API n'est accessible que depuis l'hte local (localhost). Ceci est modifiable dans le fichier etc/prelytis.xml (en dsactivant le filtre ou en ajoutant l'adresse IP de l'hte autoris accder cette API).

    2. API disponiblesNous supposons que PRELYTIS LiveDashBoard est install et accessible depuis l'adresse http://local-host/tdb/ ; Les API de type REST sont alors accessibles depuis l'adresse http://localhost/tdb/rest/

    2.1. Statut de l'installationEntre

    URL /rest/dbparam/statusMthode GET

    SortieCode retour 403 si l'URL est protge, 200 sinonFlux HTTP

    2.2. Cration de la base de paramtrage PRELYTISEntre

    URL /rest/dbparamMthode PUT

    SortieCode retour 403 si l'URL est protge, 200 sinonFlux HTTP

    [Code Retour] ... ...

    ...

    avec [Code Retour] = 0 si ok, -1 si la base n'est pas accessible

  • API Rest

    4

    2.3. Suppression de la base de paramtrage PRELYTISEntre

    URL /rest/dbparamMthode DELETE

    SortieCode retour 403 si l'URL est protge, 200 sinonFlux HTTP

    [Code Retour] ... ...

    ...

    avec [Code Retour] = 0 si ok, -1 si la base n'est pas accessible

    2.4. Cration de l'arborescence PRELYTISEntre

    URL /rest/envMthode PUT

    SortieCode retour 403 si l'URL est protge, 200 sinonFlux HTTP

    [Code Retour] ... ...

    ...

    avec [Code Retour] = 0 si ok, -1 si la base n'est pas accessible

    2.5. Rechargement de PRELYTIS LiveDashBoardEntre

    URL /rest/reloadMthode GET

    SortieCode retour 403 si l'URL est protge, 200 sinonFlux HTTP

    [Code Retour] ...

    avec [Code Retour] = 0 si ok, -1 si le rechargement a chou

  • API Rest

    5

    2.6. Rechargement du cache des libells internationalissEntre

    URL /rest/i18ncache/reloadMthode GET

    SortieCode retour 403 si l'URL est protge, 200 sinonFlux HTTP

    0 I18n cache reloaded

    le status vaut 0 si le rechargement a t effectu avec succs, -1 sinon

    2.7. LicenceEntre

    URL /rest/licenseMthode GET

    SortieCode retour 403 si l'URL est protge, 200 sinonFlux HTTP

    2.8. Monitoring des sources de donnesCette API renvoie la liste des sources de donnes utilises au moins une fois depuis le dmarrage de l'application.

    EntreURL /rest/datasourcesMthode GET

    SortieCode retour 403 si l'URL est protge, 200 sinonFlux HTTP

    oracle.jdbc.driver.OracleDriver jdbc:oracle:thin:@oracle.prelytis.fr:1521:XE

  • API Rest

    6

    param paramName value -1 10 0 1000 60000 360000 2 8 ...

    Commentaires driver : Nom de la classe Java du pilote JDBC utilis url : URL de connexion la base de donnes user : Compte de base de donnes utilis property/name : Nom du paramtre property/value : Valeur utilise pour le paramtre pool : n'apparait que si la connexion est gre par un pool pool/maxactive : nombre de connexion autoris en simultane (-1 : pas de limite) pool/maxidle : nombre maximum de connexions en attente d'utilisation pool/maxidle : nombre minimum de connexions en attente d'utilisation (recommand : 0) pool/validationquery : requte excuter pour s'assurer que la connexion est valide pool/maxwait : nombre de millisecondes attendre pour qu'une connexion se libre (lorsque

    maxactive est diffrent de -1) pool/minevictableidletime : nombre de millisecondes attendre pour qu'une

    connexion soit candidate l'viction pool/timebetweenevictionruns : priode (en millisecondes) laquelle le processus

    d'viction doit tre lanc pool/numactive : nombre de connexions actives pool/numidle : nombre de connexions en attente d'utilisation

    2.9. ListesEntre

    URL /rest/[type d'objet]/Mthode GET

    SortieCode retour 403 si l'URL est protge, 404 si [type d'objet] n'est pas reconnu, 200 sinonFlux HTTP

    ...

  • API Rest

    7

    o [type d'objet] peut prendre l'une des valeurs user, world, ...

    2.10. ExemplePour consulter la liste des mondes configurs, lancer la commande HTTP GET http://localhost/tdb/ad-min/world/. Le serveur rpond :

    2.11. Dtail partir de l'identifiant interneEntre

    URL /rest/[Type d'objet]/[Identifiant]Mthode GET

    SortieCode retour 403 si l'URL est protge, 404 si [type d'objet] n'est pas reconnu, 200 sinonFlux HTTP

    o [Type d'objet] est une des valeurs prcedemment listes et [identifiant] est l'identifiant numrique unique de l'objet visualiser

    2.11.1. ExemplePour consulter le dtail du monde ayant l'identifiant 100, lancer la commande HTTP GET http://local-host/tdb/rest/world/100. Le serveur rpond :

    2.12. Dtail partir du nomEntre

    URL /rest/[Type d'objet]ByName/[Name]

  • API Rest

    8

    Mthode GETSortie

    Code retour 403 si l'URL est protge, 404 si [type d'objet] n'est pas reconnu, 200 sinonFlux HTTP

    o [Type d'objet] est une des valeurs prcedemment listes et [Name] est le nom unique de l'objet visualiser2.12.1. Exemple

    Pour consulter le dtail du monde ayant pour nom data, lancer la commande HTTP GET http://local-host/tdb/rest/worldByName/data. Le serveur rpond :

    2.13. Statut du gestionnaire de tchesEntre

    URL /rest/taskMgr/statusMthode GET

    SortieCode retour 1 si le gestionnaire est arrt, 2 s'il est dmarr, et 3 s'il est en stand by.Flux HTTP

    2

    2.14. Dmarrage du gestionnaire de tchesEntre

    URL /rest/taskMgr/startMthode PUT

    SortieCode retour 1 si le gestionnaire est arrt, 2 s'il est dmarr, et 3 s'il est en stand by.Flux HTTP

    [Code Retour]

  • API Rest

    9

    avec [Code Retour] = 1 si arrt, 2 si dmarr, 3 si stand by

    2.15. Arrt du gestionnaire de tchesEntre

    URL /rest/taskMgr/stopMthode PUT

    SortieCode retour 1 si le gestionnaire est arrt, 2 s'il est dmarr, et 3 s'il est en stand by.Flux HTTP

    [Code Retour]

    avec [Code Retour] = 1 si arrt, 2 si dmarr, 3 si stand by

    2.16. Rafraichissement du gestionnaire de tchesEntre

    URL /rest/taskMgr/refreshMthode PUT

    SortieCode retour 1 si le gestionnaire est arrt, 2 s'il est dmarr, et 3 s'il est en stand by.Flux HTTP

    [Code Retour]

    avec [Code Retour] = 1 si arrt, 2 si dmarr, 3 si stand by

    2.17. Statut de la dernire excution du gestionnaire detches

    EntreURL /rest/taskMgr/executionStatusMthode GET

    SortieCode retour 1 si toutes les tches se sont excutes normalement, 0 sinon.Flux HTTP

    1

  • 10

    Chapitre 3. EJBs1. EJBs de LiveDashBoard 4.2.x

    LiveDashBoard expose (entre autres) deux EJBs :

    DashboardFacade I18nFacade

    Les EJBs sont dclars dans un descripteur de dploiement (fichier XML), qui se trouve dans l'EAR de LiveDash-Board : prelytis.ear/prelytis-base-ejb.jar/META-INF/ejb-jar.xml. Ci dessous se trouve unextrait de la dclaration de l'EJB DashboardFacade.

    (Stateless)SessionBean DashboardFacade. DashboardFacade com.prelytis.dashboard.interfaces.DashboardFacadeRemoteHome com.prelytis.dashboard.interfaces.DashboardFacadeRemote com.prelytis.dashboard.interfaces.DashboardFacadeLocalHome com.prelytis.dashboard.interfaces.DashboardFacadeLocal com.prelytis.dashboard.ejb.DashboardFacadeEJB Stateless Container [...]

    1.1. DashboardFacade, accs localComme tous les Stateless Session Bean v2.1 (SLSB), l'accs un EJB se fait en deux temps.

    1. Demander au serveur d'application l'interface HOME de l'EJB,2. demander au HOME de crer un EJB.

    import javax.naming.Context;import javax.naming.InitialContext;import com.prelytis.dashboard.interfaces.DashboardFacade;import com.prelytis.dashboard.interfaces.DashboardFacadeLocalHome;

    [...]

    Context iniCtx = new InitialContext();DashboardFacadeLocalHome home = (DashboardFacadeLocalHome) iniCtx.lookup("java:comp/env/DashboardFacade");DashboardFacade res = home.create();

    [...]

    1.2. I18nFacade, accs localLes objets envoys et retourns par l'interface DashboardFacade ne sont pas localiss. Seuls des codes sontenvoys la place des libells. I18nFacade fournit la correspondance entre ces libells et les codes retourns dansDashboardFacade. L'accs se fait avec le code ci-dessous.

    import javax.naming.Context;import javax.naming.InitialContext;import com.prelytis.dashboard.interfaces.I18nFacade;import com.prelytis.dashboard.interfaces.I18nFacadeLocalHome;

  • EJBs

    11

    [...]

    Context iniCtx = new InitialContext();I18nFacadeLocalHome home = (I18nFacadeLocalHome) iniCtx.lookup("java:comp/env/I18nFacade");I18nFacade res = home.create();

    [...]

    1.3. Accs un documentLe DashboardFacade ne contient qu'une mthode Response dashboardRequest(Request re-quest). Obtenir un document revient fabriquer le bon objet Request et lire l'objet Response retourn. Lecode ci-dessous dcrit la fabrication de l'objet Request.import com.prelytis.dashboard.interfaces.I18nElement;import com.prelytis.dashboard.interfaces.OutputFormat;import com.prelytis.dashboard.value.DocumentRequest;import com.prelytis.dashboard.value.DocumentResponse;

    [...]

    DashboardFacade facade = home.create();DocumentRequest request = new DocumentRequest();request.setUserOid(xxx);request.setName(xxx);request.setOutputFormat(Integer.valueOf(OutputFormat.OUTPUT_FORMAT_DATA));request.setDocumentType(Integer.valueOf(DocumentRequest.TYPE_REPORT));request.setLanguageCode("fr");DocumentResponse response = (DocumentResponse) facade.dashboardRequest(request);I18nElement element = response.getElement();

    [...]

    1.4. Lire la liste des libells d'une langueL'lment I18nElement retourn ci-dessus peut tre localis grce l'appel la facade I18nFacade suivant :

    import java.util.Locale;import java.util.Map;import com.prelytis.dashboard.interfaces.I18nElement;

    [...]

    I18nFacade facade = home.create();Map labels = facade.getL10nMap(keys, new Locale("fr"));String description = labels.get(element.getDescriptionKey());

    [...]

    La variable description contient maintenant la description localise du rapport demand

    2. Accs distant aux EJBs de LiveDashBoard 4.4.xLiveDashBoard expose deux EJBs pour l'accs distant :

    DashboardFacade I18nFacade

  • EJBs

    12

    2.1. Le contexte initial2.1.1. Le serveur

    Il faut faire attention ce que le serveur soit prpar des appels distants (en particulier au travers de pares-feux).Ce paramtrage dpend du serveur d'application utilis. Veuillez consulter la documentation du serveur d'applicationutilis.

    2.1.2. Le clientPour utiliser un EJB (2.x), il faut le demander au serveur de nom, via un contexte initial (Context.lookup()).Pour obtenir un EJB (2.x) distant, il suffit de le demander au serveur de nom distant (en gnral, celui du serveurd'application).import java.util.Hashtable;

    import javax.naming.Context;import javax.naming.InitialContext;

    [...]

    Hashtable table = new Hashtable();// PARTIE DEPENDANTE DU SERVEUR D'APPLICATION UTILISEtable.put(Context.INITIAL_CONTEXT_FACTORY, ...);[...]Context iniCtx = new InitialContext(table);

    2.2. DashboardFacade, accs distantComme pour un accs local, l'accs distant se fait en demandant une interface HOME au serveur d'application. C'estle nom demand, qui change. Ce nom est un nom public (appel en gnral nom JNDI) qui est dfini par la personnequi a dploy l'application dans le serveur. Si aucun nom n'est fourni lors du dploiement, un nom par dfaut a putre gnr par le serveur. Ce dernier fournit en gnral une console qui permet de lister les EJB dploys ainsique leur nom JNDI. Pour l'exemple, nous supposerons que ces EJB sont dploys sous les noms suivants : "ejb/DashboardFacade", "ejb/I18nFacade".import com.prelytis.dashboard.interfaces.DashboardFacadeRemote;import com.prelytis.dashboard.interfaces.DashboardFacadeRemoteHome;

    [...]

    Object objref = iniCtx.lookup("ejb/DashboardFacade");DashboardFacadeRemoteHome remoteHome = (DashboardFacadeRemoteHome)PortableRemoteObject.narrow(objref, DashboardFacadeRemoteHome.class);DashboardFacadeRemote facade = remoteHome.create();

    [...]

    2.3. I18nFacade, accs distantL'accs se fait avec le code ci-dessous.

    import com.prelytis.dashboard.interfaces.I18nFacadeRemote;import com.prelytis.dashboard.interfaces.I18nFacadeRemoteHome;

    [...]

    Context iniCtx = new InitialContext();Object objref = iniCtx.lookup("ejb/I18nFacade");I18nFacadeRemoteHome remoteHome = (I18nFacadeRemoteHome)PortableRemoteObject.narrow(objref, I18nFacadeRemoteHome.class);

  • EJBs

    13

    I18nFacadeRemote facade = remoteHome.create();

    [...]

    2.4. Accs un document LiveDashBoardLe DashboardFacade ne contient qu'une mthode Response dashboardRequest(Request re-quest). Obtenir un document revient fabriquer le bon objet Request et lire l'objet Response retourn. Lecode ci-dessous dcrit la fabrication de l'objet Request.import com.prelytis.dashboard.interfaces.I18nElement;import com.prelytis.dashboard.interfaces.OutputFormat;import com.prelytis.dashboard.value.DocumentRequest;import com.prelytis.dashboard.value.DocumentResponse;

    [...]

    DashboardFacadeRemote facade = home.create();DocumentRequest request = new DocumentRequest();request.setUserOid(xxx);request.setName(xxx);request.setOutputFormat(Integer.valueOf(OutputFormat.OUTPUT_FORMAT_DATA));request.setDocumentType(Integer.valueOf(DocumentRequest.TYPE_REPORT));request.setLanguageCode("fr");DocumentResponse response = (DocumentResponse) facade.dashboardRequest(request);I18nElement element = response.getElement();

    [...]

    2.5. Lire la liste des libells d'une langueL'lment I18nElement retourn ci-dessus peut tre localis grce l'appel la facade I18nFacade suivant :

    import java.util.Locale;import java.util.Map;import com.prelytis.dashboard.interfaces.I18nElement;

    [...]

    I18nFacadeRemote facade = home.create();Map labels = facade.getL10nMap(keys, new Locale("fr"));String description = labels.get(element.getDescriptionKey());

    [...]

    La variable description contient maintenant la description localise du rapport demand

    2.6. JBoss 4.2.3Les librairies suivantes sont ncessaires :

    $JBOSS_HOME/client/jbossall-client.jar prelytis.ear/lib/log4j-1.2.13.jar prelytis.ear/lib/prelytis-value-4.4.x.jar prelytis.ear/lib/prelytis-base-ejb-4.4.x.jar

    Pour obtenir un accs distant la faade LiveDashBoard :

    Hashtable table = new Hashtable();

  • EJBs

    14

    table.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");table.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");table.put(Context.PROVIDER_URL, "jnp://127.0.0.1:1099");

    Context context = new InitialContext(table);Object objRef = context.lookup("ejb/DashboardFacade");DashboardFacadeRemoteHome home = (DashboardFacadeRemoteHome)PortableRemoteObject.narrow(objRef, DashboardFacadeRemoteHome.class);

    Le serveur JBoss doit tre prpar pour accepter les accs distants. Il faut prciser certains paramtres au dmarragedans le fichier bin/run.conf ou la ligne de commande (o xxx est le nom du serveur appeler) :-Djboss.bind.address=x.x.x.x-Djava.rmi.server.hostname=xxx -Djava.rmi.server.useLocalHostname=false

    2.7. GlassFish 2.1Les librairies suivantes sont ncessaires :

    $GLASSFISH_HOME/appserv-deploiement-client.jar $GLASSFISH_HOME/appserv-rt.jar $GLASSFISH_HOME/appserv-rt_l10n.jar $GLASSFISH_HOME/javaee.jar prelytis.ear/lib/log4j-1.2.13.jar prelytis.ear/lib/prelytis-value-4.4.x.jar prelytis.ear/lib/prelytis-base-ejb-4.4.x.jar

    Pour obtenir un accs distant la faade LiveDashBoard :

    Hashtable table = new Hashtable();table.put("java.naming.factory.initial", "com.sun.enterprise.naming.SerialInitContextFactory");table.put("java.naming.factory.url.pkgs", "com.sun.enterprise.naming");table.put("java.naming.factory.state", "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");//table.put("org.omg.CORBA.ORBInitialHost", "127.0.0.1");//table.put("org.omg.CORBA.ORBInitialPort", "3700");

    Context context = new InitialContext(table);Object objRef = context.lookup("ejb/DashboardFacade");DashboardFacadeRemoteHome home = (DashboardFacadeRemoteHome)PortableRemoteObject.narrow(objRef, DashboardFacadeRemoteHome.class);

    2.8. WebSphere 6.1Les librairies suivantes sont ncessaires :

    $WAS_HOME/deploytool/itp/plugins/com.ibm.websphere.v61_6.1.202/ws_runtime.jar

    $WAS_HOME/java/jre/lib/ibmorb.jar si la JVM SUN est utilise $WAS_HOME/java/jre/lib/ibmorbapi.jar si la JVM SUN est utilise prelytis.ear/lib/log4j-1.2.13.jar prelytis.ear/lib/prelytis-value-4.4.x.jar prelytis.ear/lib/prelytis-base-ejb-4.4.x.jar mis jour par WebSphere, contenant le stub

    (obtenu par ejbdeploy.sh)

    Pour obtenir un accs distant la faade LiveDashBoard :

    Hashtable table = new Hashtable();table.put(Context.INITIAL_CONTEXT_FACTORY,"com.ibm.websphere.naming.WsnInitialContextFactory");table.put("org.omg.CORBA.ORBClass", "com.ibm.CORBA.iiop.ORB");table.put(Context.PROVIDER_URL, "iiop://was61:2809");

  • EJBs

    15

    Context context = new InitialContext(table);Object objRef = context.lookup("ejb/DashboardFacade");DashboardFacadeRemoteHome home = (DashboardFacadeRemoteHome) PortableRemoteObject.narrow(objRef, DashboardFacadeRemoteHome.class);

  • 16

    Chapitre 4. Service web LiveDashBoardv4.2.x : WebService

    Ce service web permet d'accder aux donnes des rapports LiveDashBoard. Il expose les mthodes suivantes :

    String hello(String) WSReportResponse reportRequest(WSReportRequest) WSParameterListResponse parameterListRequest(WSParameterListRequest) WSReportMetaDataResponse reportMetaDataRequest(WSReportMetaDataRequest) WSReportFilterResponse reportFilterRequest(WSReportFilterRequest) WSMenuResponse menuRequest(WSMenuRequest)

    Le javadoc de chaque service web est fourni avec LiveDashBoard. Vous pouvez le consulter dans le rpertoirewebservice/doc de votre distribution de LiveDashBoard.

    Sous JBoss, la liste des services web publis sur le serveur est accessible l'URL suivante : http://xxx:8080/jbossws/services/

    1. String hello(String)Mthode servant tester le bon dploiement du service web. La mthode retourne la chane passe en paramtre,prfixe par "from data WS :".

    2. WSParameterListResponseparameterListRequest(WSParameterListRequest)

    Mthode servant obtenir la liste des tuples d'une session de paramtrage. Elle ne fonctionne actuellement que pourles rapports. Cette liste permet de choisir un rapport (avec son identifiant) dans un appel ultrieur.

    3. WSReportMetaDataResponsereportMetaDataRequest(WSReportMetaDataRequest)

    Mthode permettant d'obtenir la description du rapport sans devoir le requter. Elle permet de prparer des filtrespour un appel reportRequest par exemple.

    4. WSReportResponsereportRequest(WSReportRequest)

    Mthode servant obtenir les donnes d'un rapport. WSReportRequest peut tre rempli partir des informationsfournies par WSParameterListResponse

    5. WSReportFilterResponsereportFilterRequest(WSReportFilterRequest)

    Mthode permettant de parcourir un filtre hirarchique sur un rapport

  • Service web LiveDash-Board v4.2.x : WebService

    17

    6. WSMenuResponsemenuRequest(WSMenuRequest)

    Mthode permettant d'obtenir le menu d'un utilisateur. Cela correspond au contenu de l'espace de travail d'un utili-sateur.

  • 18

    Chapitre 5. FaadeLes communications avec la partie mtier de LiveDashBoard se font via une faade et un mcanisme de requte/r-ponse.

    Au dmarrage de LiveDashBoard, les faades sont cres et configures. Elles constituent un empilement, invoquesles unes la suite des autres lors de chaque requte.

    Le schma ci-dessous reprsente le fonctionnement gnral des faades :

    Les faades implmentent l'interface com.prelytis.dashboard.interfaces.DashboardFacade.Celle-ci comporte la mthode :

    public Response dashboardRequest(Request value) throws DashboardException

    La faade LifeCycle vrifie que l'application est bien dmarre. Si c'est le cas, elle transmet la requte la faadesuivante. Une exception est sinon leve.

    La faade AccessControl s'assure que l'identifiant de session fourni sur chaque requte est toujours valide et quela requte envoye est autorise pour l'utilisateur.

    La faade Authentication se charge de l'authentification des utilisateurs. Elle se charge uniquement des Lo-ginRequest. PRELYTIS fournit les faades d'authentification suivantes :

    Valeur Significationcom.prelytis.dashboard.business.StandardAuthenticationFacadeAuthentification applicativecom.prelytis.dashboard.ext.HttpAuthenticationFacade Rcupration de l'authentification HTTP effectue par le

    conteneur

  • Faade

    19

    Valeur Significationcom.prelytis.dashboard.ext.HttpHeaderAuthenticationFacadeUtilisateur authentifi indiqu dans un champ de l'entte

    HTTPcom.prelytis.dashboard.ext.LdapAuthenticationFacade Authentification sur un LDAPcom.prelytis.dashboard.ext.OemAuthenticationFacade Authentification oemcom.prelytis.dashboard.ext.LegacyAuthenticationFacade Utilisation d'un module d'authentification dvelopp pour

    la version 4.2 de LiveDashBoard

    Vous pouvez dvelopper votre propre faade pour raliser une authentification spcifique.

    La faade Business est la dernire faade mais la plus importante : C'est elle qui gnre la rponse.

    La rponse est renvoye aux faades appelantes en cascade.

    1. Ajout de faades spcifiquesLes faades spcifiques doivent tendre la classe abstraitecom.prelytis.dashboard.ext.AbstractFacade. Les mthodes suivantes doivent tre dfinies :

    public Response dashboardRequest(Request request) throws DashboardException public void init(Map properties)

    La structure d'une faade est la suivante :

    package mypackage;public class MyFacade extends AbstractFacade { public MyFacade(DashboardFacade facade) { super(facade); }

    @Override public Response dashboardRequest(Request request) throws DashboardException { if (request instanceof ParameterRequest) { ParameterRequest value = (ParameterRequest)request; // TODO check, do something or thow an exception ParameterResponse response = getFacade().dashboardRequest(request); // TODO check, do something or thow an exception

    return response; } else { return getFacade().dashboardRequest(request); } }

    @Override public void init(Map properties) { // TODO facade initialisation }}

    Pour qu'elle soit prise en compte par LiveDashBoard, il faut ajouter cette classe dans le CLASSPATH de LiveDash-Board et la dclarer dans le fichier etc/prelytis.xml

    ...

  • Faade

    20

    mypackage.MyFacade paramName value1 value2

    2. Faades d'authentification2.1. Authentification applicative

    Lors d'une installation standard, la faadecom.prelytis.dashboard.business.StandardAuthenticationFacade est utilise. Cette faadese charge de vrifier le mot de passe fourni la connexion avec celui stock dans la base de paramtrage de LiveDa-shBoard (mot de passe stock en MD5-Base64 dans la table BA_User). com.prelytis.dashboard.business.StandardAuthenticationFacade connectionType web mobility

    2.2. Authentification HTTPCette faade permet de rcuprer l'utilisateur authentifi par HTTP (RFC2617). com.prelytis.dashboard.ext.HttpAuthenticationFacade connectionType web mobility

    2.3. Authentification HTTP HeaderCette faade permet de rcuprer le nom de l'utilisateur plac sur un champ du header (par exemple PRELYTISU-serName) de la requte HTTP. com.prelytis.dashboard.ext.HttpHeaderAuthenticationFacade connectionType web mobility headerFieldName PRELYTISUserName

  • Faade

    21

    2.4. Authentification LDAPCette faade authentifie l'utilisateur sur un LDAP.

    com.prelytis.dashboard.ext.LdapAuthenticationFacade connectionType web mobility principalDNPrefix principalDNSuffix java.naming.security.protocol java.naming.provider.url java.naming.factory.initial java.naming.security.authentication

    2.5. Authentification LiveDashBoard 4.2Cette faade permet d'utiliser un module d'authentification dvelopp pour la version 4.2 de LiveDashBoard.

    En version 4.2 de LiveDashBoard, la classe Java utiliser comme module d'authentification tait dclare dansl'entre factoryClassName du fichier prelytis.properties.

    En version 4.4 de LiveDashBoard, cette mme classe peut tre utilise. Elle doit tre indique dans l'entre lega-cyFactory.

    com.prelytis.dashboard.ext.LegacyAuthenticationFacade connectionType web mobility legacyFactory com.mycompany.AuthModuleFactory

  • Faade

    22

    2.6. Authentification OEMCette faade fonctionne comme la faade d'authentification HTTP. La prsence du paramtre oem pass dans l'URLpermet de masquer le menu.

    com.prelytis.dashboard.ext.OemAuthenticationFacade connectionType web mobility

    2.7. Authentification spcifiquePour dvelopper et tester un module d'authentification, nous vous recommandons d'installer Sun JDK 1.5, EclipseGallileo et apache-tomcat 6.0.

    Dans un nouveau workspace :

    Importer le WAR LiveDashBoard dans le workspace (File/Import... puis Web/WAR File) :

  • Faade

    23

    L'import cre un projet prelytis dans le workspace. Crer un projet Java authentication-back dans lequel le module d'authentification sera dvelopp :

    Dclarer les dpendances sur le projet authentication-back (Project/Properties) :

  • Faade

    24

    La liste des JARs importer est dfinie dans l'image ci-dessus. Il faut chercher ces JARs dans le projet prelytis. Crer un projet Java authentication-front dans lequel l'"authentication tracker" sera dvelopp Dclarer les dpendances sur le projet authentication-front (Project/Properties) :

    Dclarer les dpendances sur le projet prelytis (Project/Properties) :

  • Faade

    25

  • Faade

    26

    Crer un nouveau package com.prelytis.sample.back dans le projet authentication-back(File/New/Package)

    Crer une classe Java AuthenticationFacade (File/New/Class) avec le code suivant :package com.prelytis.sample.back;

    import java.util.Map;

    import org.apache.log4j.LogManager;import org.apache.log4j.Logger;

    import com.prelytis.dashboard.api.LoginBackException;import com.prelytis.dashboard.dao.DaoFactory;import com.prelytis.dashboard.dao.UserDao;import com.prelytis.dashboard.ext.AbstractFacade;import com.prelytis.dashboard.interfaces.DashboardException;import com.prelytis.dashboard.interfaces.DashboardFacade;import com.prelytis.dashboard.interfaces.Types;import com.prelytis.dashboard.util.PRP;import com.prelytis.dashboard.value.LoginRequest;import com.prelytis.dashboard.value.Request;import com.prelytis.dashboard.value.Response;import com.prelytis.dashboard.value.data.BeanUserDefinition;

    public class AuthenticationFacade extends AbstractFacade { public AuthenticationFacade(DashboardFacade facade) { super(facade); }

  • Faade

    27

    @Override public void init(Map properties) { // TODO Read needed parameters declared in prelytis.xml }

    @Override public Response dashboardRequest(Request request) throws DashboardException { if (request.getType() == Types.LOGIN) { LoginRequest value = (LoginRequest)request; DaoFactory daoFactory = DaoFactory.getInstance(); UserDao userDao = daoFactory.getUserDao(); String userName = null; BeanUserDefinition user = null;

    try { userName = value.getUserPrincipal().getName(); user = userDao.getUserDefinition(userName); } catch (Exception ex) { LogManager.getLogger(this.getClass()). info("Unknown user " + userName); throw new LoginBackException(LoginBackException.CONNECT_UNKNOWN_USER, LoginBackException.INVALID_USER_KEY); }

    if (!user.getPublicAccess()) { if (value.getPassword() == null) { value.setPassword(new char[] {}); }

    String pwd = new String(value.getPassword()); Logger log = LogManager.getLogger(this.getClass());

    // Check password in LiveDashBoard database if (!PRP.checkPassword(user.getPassword(), pwd)) { log.info("Invalid password for user " + userName); throw new LoginBackException(LoginBackException.CONNECT_UNKNOWN_USER, LoginBackException.INVALID_USER_KEY); }

    // To remove left menu and top banner, // you can change the connection type as follows // value.setConnectionType(Integer.valueOf( // LoginRequest.OEM_CONNECTION_TYPE));

    // To force connection (when a session already exists for this username) // value.setForceConnection(Boolean.TRUE); } } return getFacade().dashboardRequest(request); }}

    Crer un nouveau package com.prelytis.sample.front dans le projet authentication-front(File/New/Package)

    Crer une classe Java AuthenticationTracker (File/New/Class) avec le code suivant :package com.prelytis.sample.front;

  • Faade

    28

    import java.util.Iterator;import java.util.Map;

    import javax.faces.application.Application;import javax.faces.application.NavigationHandler;import javax.faces.context.ExternalContext;import javax.faces.context.FacesContext;import javax.faces.event.PhaseEvent;

    import com.prelytis.dashboard.value.LoginRequest;import com.prelytis.dashboard.value.api.PrelytisPrincipal;import com.prelytis.dashboard.web.control.LoginBean;import com.prelytis.dashboard.web.control.NavigationBean;import com.prelytis.dashboard.web.interfaces.SessionCtx;import com.prelytis.dashboard.web.jsf.AbstractAuthenticationTracker;import com.prelytis.dashboard.web.value.DefaultSessionCtx;

    public final class AuthenticationTracker extends AbstractAuthenticationTracker { @Override public void afterPhase(PhaseEvent event, String viewId) { final FacesContext context = event.getFacesContext(); final ExternalContext external = context.getExternalContext(); final Map sessionMap = external.getSessionMap(); final SessionCtx sessionContext = (SessionCtx)sessionMap.get(DefaultSessionCtx.KEY);

    // No filter for following urls if (viewId.startsWith("/Login")) return; if (viewId.startsWith("/Logout")) return;

    // Already connected? Object userOid = (sessionContext != null) ? sessionContext.getUserOid() : null; if (userOid != null) { if (viewId.startsWith("/trackback")) { navigateTrackBack(context, viewId); } if ((viewId.startsWith("/public") || viewId.startsWith("/rss"))) { navigatePublic(context, viewId); } return; }

    String login = (String)external.getRequestParameterMap().get("user"); login = "".equals(login) ? null : login; if (login == null){ Map parameters = external.getRequestParameterMap(); Iterator it = parameters.entrySet().iterator(); while (it.hasNext() && login == null) { Map.Entry entry = it.next(); String key = entry.getKey(); if (key.indexOf(":header:publicUser") > -1) { login = entry.getValue(); login = "".equals(login)?null:login; } }

  • Faade

    29

    }

    // Public user if (login != null) { if (!viewId.startsWith("/rss")) preparePublicAuthentication(context, viewId); LoginRequest loginRequest = createLoginRequest(external, null); loginRequest.setUserPrincipal(new PrelytisPrincipal(login)); loginRequest.setPublicAccess(Boolean.TRUE); LoginBean loginBean = getLoginBean(context); loginBean.setLoginRequest(loginRequest); String outcome = loginBean.doLogin(); if (outcome == null) navigateError(context, "An error occured"); if (viewId.startsWith("/rss")) redirectRss(context); else { Application application = context.getApplication(); NavigationHandler handler = application.getNavigationHandler(); handler.handleNavigation(context, null, outcome); } return; }

    if (viewId.startsWith("/trackback")) { prepareTrackBackAuthentication(context, viewId); Application application = context.getApplication(); NavigationHandler handler = application.getNavigationHandler(); handler.handleNavigation(context, null, NavigationBean.LOGIN_OUTCOME); context.renderResponse(); return; }

    // No user authenticated, redirection to login page redirectLogin(context); }}

    Modifier le fichier prelytis.xml avec les informations suivantes :

    com.prelytis.sample.front.AuthenticationTracker ...

    ...

  • Faade

    30

    -->

    com.prelytis.sample.back.AuthenticationFacade myParameter value1 value2

    Reportez-vous la documentation d'installation pour plus d'information sur le fichier prelytis.xml. Pour debugger votre module d'authentification, slectionner le projet prelytis et cliquer sur Run/Debug as/Debug on Server

    Pour packager l'application sous forme d'un WAR avec le module d'authentification spcifique intgr, cliquer surFile/Export, choisir Web/WAR File :

  • 31

    Chapitre 6. Intgration par URLL'intgration de LiveDashBoard peut tre effectue par l'utilisation simultanes de modules d'authentification etd'URL trackback.

    1. AuthentificationL'authentification est effectue par une faade.

    Dans le cadre d'une intgration par URL, il est judicieux de dleguer la partie authentification un mcanismeextrieur et commun entre toutes les applications (reverse proxy authentifiant) et de s'appuyer sur l'authentificationHTTP (voir RFC2617 [http://tools.ietf.org/html/rfc2617]).

    Apache2 peut jouer le role de reverse proxy authentifiant : Authentification grce aux modules proposs LDAP, Base de donnes, fichiers, etc. Voir http://httpd.apache.org/docs/2.2/howto/auth.html

    Reverse proxy avec les protocoles ajp, http. Voir http://httpd.apache.org/docs/2.2/mod/mod_proxy.html

    Du ct de LiveDashBoard, la faade com.prelytis.dashboard.ext.HttpAuthenticationFacadepermet de rcuprer l'utilisateur authentifi par HTTP.

    2. TrackbackLes URL trackback sont des points d'entres vers certains crans de PRELYTIS LiveDashBoard. Si l'utilisateur n'estpas authentifi, la premire tape est l'authentification de l'utilisateur.

    L'authentification dpend de la configuration effectue dans prelytis.xml. Dans la configuration par dfaut,l'cran de login est affich. Une fois l'utilisateur authentifi, l'cran demand est affich.

    Type d'accs Url utiliserAccs au tableau de bord par dfaut /trackbackHome.htmlAccs au tableau de bord dashboardName /trackbackDashboard.html?

    name=dashboardName

    Accs au rapport reportName /trackbackReport.html?name=reportNameAccs au contrle controlName /trackbackControl.html?

    name=controlName

    Accs l'indicateur metricName /trackbackMetric.html?name=metricNameAccs une session de paramtrage sessionName /trackbackParametersList.html?

    name=sessionName

  • 32

    Chapitre 7. Session externe de type"plugin"

    Afin d'offrir plus d'intgration entre LiveDashBoard et des produits tiers, il devient possible d'intgrer directementun plugin Javascript dans la page du dashboard partir de la version 4.4.1.

    Un plugin reprsente un bloc du dashboard, comme une session externe habituelle. La diffrence avec une sessionexterne est que la page ne gnre pas un tag OBJECT (qui accueille une nouvelle page web, compltement indpen-dante du reste du dashboard), mais un tag DIV. Ce tag DIV devient la zone de dessin du "plugin".

    1. Exemple de paramtrage de session externe"classique"

    L'image ci dessous cre une session externe qui intgre la page de recherche de Google, et fournit une informationau moteur de recherche, qui est vue comme un filtre dans LiveDashBoard.

    Le champs URL contient l'URL de la page insrer

    2. Exemple de paramtrage de session externe"plugin"

    L'image ci-dessous cre une session externe qui intgre un plugin d'exemple dont le code est fourni ci-aprs.

    La case "plugin mode" est coche, l'URL pointe vers un fichier Javascript (ici, dans le rpertoire "pub" du rpertoire de travail PRELYTIS), le champs "Class to be loaded" est le nom de la classe Javascript instancier, ici, un filtre "year" est fourni au plugin lors de son dmarrage.

  • Session externe de type "plugin"

    33

    3. API PluginL'utilisation de Javascript la place d'une page statique, permet n'importe quel intgrateur/diteur tiers de fournirun contenu riche et dynamique (AJAX), compltement en phase avec les exigences du WEB 2.0.

    Lorsque que le dashboard est affich, le fichier Javascript est charg, et la classe est instancie par le dashboard.Cette classe se voit ajouter plusieurs proprits afin d'enrichir ses possibilits :

    cration d'un objet partir de la classe (this) affectation de this.ldbDiv affectation de this.ldbName affectation de this.ldbFilter affectation de this.ldbApplication affectation de this.ldbTemplateId affectation de this.ldbBlockId appel de la mthode this.ldbInit()

    Finalement, la classe doit implmenter la mthode ldbInit(), afin de dmarrer.

    this.ldbDiv est le noeud DOM, de la DIV du plugin. this.ldbDiv.id est l'identifiant de la DIV. Tous les autres identifiants d'lments contenus dans la DIV

    doivent tre de la forme this.ldbDiv.id + ':monId'. this.ldbName est une chane de caractres. this.ldbFilter est un tableau d'objets filtres fournis au plugin. Le filtre est de la forme :

    this.ldbFilter[0].name this.ldbFilter[0].description this.ldbFilter[0].value

    this.ldbApplication est l'objet reprsentant l'environnement extrieur du plugin. Il est unique dans la page(et sera donc partag entre plusieurs plugins), et fournit les proprits suivantes : this.ldbApplication.version est une chane de caractre fournissant la version utilise. Cette infor-

    mation sera utile lors des volutions de l'API. this.ldbApplication.document est un objet qui permet de grer les documents LiveDashBoard.

    this.ldbApplication.document.REPORT_DOCUMENT_TYPE : entier indiquant le type de docu-ment rapport.

    this.ldbApplication.document.DASHBOARD_DOCUMENT_TYPE : entier indiquant le type dedocument dashboard.

    this.ldbApplication.document.CONTROL_DOCUMENT_TYPE : entier indiquant le type de do-cument contrle.

    this.ldbApplication.document.openInDashboard(oid, docType, templateId,blockId) : permet d'ouvrir un document dans un bloc du dashboard. Le "doctype" est une constante dfinieci-dessus. "l'oid" est l'identifiant du document ouvrir. Le "templateId" et le "blockId" sont l'identifiant dubloc qui recevra le nouveau document.

    this.ldbApplication.document.filterInDashboard(filters, templateId, blo-ckId) : permet de filtrer un document dans un bloc du dashboard. Le "templateId" et le "blockId" sontl'identifiant du bloc qui recevra le nouveau filtre.

    this.ldbApplication.document.getInformations() : retourne la liste des pages et blocs dudashboard actuellement chargs dans le navigateur, avec leur description. var info = this.ldbApplication.document.getInformations() info.templates[0].id info.templates[0].blocks[0].id info.templates[0].blocks[0].title

    this.ldbApplication.infoMessage est un objet qui permet d'afficher un message d'information dansla page HTML, il disparat automatiquement au bout de 3,5 secondes. this.ldbApplication.infoMessage.open(message) o message est la chane afficher.

    this.ldbApplication.errorMessage est un objet qui permet d'afficher un message d'erreur dans lapage HTML, il ne disparat pas automatiquement. this.ldbApplication.errorMessage.open(message) o message est la chane afficher.

  • Session externe de type "plugin"

    34

    this.ldbApplication.loadJsUrl(url, parentCallback) est une mthode qui permet de char-ger un fichier Javascript dans la page, et de garantir que le fichier n'est charg qu'une seule fois dans la page(par exemple si le mme plugin est prsent plusieurs fois dans le mme dashboard). parentCallback() estune fonction qui est appele lorsque le fichier est effectivement charg.

    this.ldbTemplateId est un entier indiquant l'id de la page du dashboard dans laquelle se trouve le plugin. this.ldbBlockId est un entier indiquant l'id du bloc dans la page du dashboard dans laquelle se trouve le

    plugin. La page et le bloc forment un identifiant unique du plugin dans un dashboard.

    Si le plugin n'est pas dans un dashboard, ces deux dernires proprits n'existent pas (typeofthis.ldbTemplateId == 'undefined').

    De plus, le plugin doit appeler une fonction javascript la fin du fichier, pour s'enregistrer auprs de l'application :ldb.api440.registerJsUrl(URL); o URL est une chane indiquant l'URL relative du fichier (la mmeque celle indique dans le paramtrage du plugin).

    4. Exemple de fichier JavascriptLiveDashBoard utilise la bibliothque "prototype.js [http://prototypejs.org]" (version 1.6.0.2) pour son code Javas-cript. L'exemple ci-dessous s'appuie sur certaines fonctions de cette bibliothque.

    /* * Test de plugin */TestSession = Class.create({

    initialize: function() { }, ldbInit: function() { this.ldbDiv.innerHTML = 'Hello world, API version ' + this.ldbApplication.version + '';

    var div0 = document.createElement('DIV'); div0.id = this.ldbDiv.id + ':div0'; div0.innerHTML = 'Afficher message'; div0.style.border = '1px solid black'; div0.style.margin = '5px'; div0.style.textAlign = 'center'; div0.style.cursor = 'pointer'; Event.observe(div0, 'click', this._message.bindAsEventListener(this)); this.ldbDiv.appendChild(div0);

    var div1 = document.createElement('DIV'); div1.id = this.ldbDiv.id + ':div1'; div1.innerHTML = 'Lire le filtre'; div1.style.border = '1px solid black'; div1.style.margin = '5px'; div1.style.textAlign = 'center'; div1.style.cursor = 'pointer'; Event.observe(div1, 'click', this._getFilter.bindAsEventListener(this)); this.ldbDiv.appendChild(div1); var div2 = document.createElement('DIV'); div2.id = this.ldbDiv.id + ':div2'; this.ldbDiv.appendChild(div2);

    var div3 = document.createElement('DIV'); div3.id = this.ldbDiv.id + ':div3'; div3.innerHTML = 'Lire les infos'; div3.style.border = '1px solid black'; div3.style.margin = '5px'; div3.style.textAlign = 'center';

  • Session externe de type "plugin"

    35

    div3.style.cursor = 'pointer'; Event.observe(div3, 'click', this._getInfo.bindAsEventListener(this)); this.ldbDiv.appendChild(div3); var div4 = document.createElement('DIV'); div4.id = this.ldbDiv.id + ':div4'; this.ldbDiv.appendChild(div4);

    var div5 = document.createElement('DIV'); div5.id = this.ldbDiv.id + ':div5'; div5.innerHTML = 'Filtrer un bloc'; div5.style.border = '1px solid black'; div5.style.margin = '5px'; div5.style.textAlign = 'center'; div5.style.cursor = 'pointer'; Event.observe(div5, 'click', this._filterBlock.bindAsEventListener(this)); this.ldbDiv.appendChild(div5);

    var div6 = document.createElement('DIV'); div6.id = this.ldbDiv.id + ':div6'; div6.innerHTML = 'Ouvrir un rapport'; div6.style.border = '1px solid black'; div6.style.margin = '5px'; div6.style.textAlign = 'center'; div6.style.cursor = 'pointer'; Event.observe(div6, 'click', this._openBlock.bindAsEventListener(this)); this.ldbDiv.appendChild(div6);

    }, _message: function(e) { this.ldbApplication.infoMessage.open('Hello world from the plugin'); }, _openBlock: function(e) { var doctype = this.ldbApplication.document.REPORT_DOCUMENT_TYPE; this.ldbApplication.document.openInDashboard(156, doctype, 0, 2); }, _filterBlock: function(e) { var filters = new Array(); filters[0] = new Object(); filters[0].name = 'area'; filters[0].value = 'Americas'; this.ldbApplication.document.filterInDashboard(filters, 0, 1); }, _getFilter: function(e) { var ul, li; if (this.ldbFilter != null) { var div = $(this.ldbDiv.id + ':div2'); div.innerHTML = ''; ul = document.createElement('UL'); for (var i = 0; i < this.ldbFilter.length; i++) if (this.ldbFilter[i] != null) { var filter = this.ldbFilter[i]; li = document.createElement('LI'); li.innerHTML = i + ': ' + filter.name + ' ' + filter.description + ' ' + filter.value; ul.appendChild(li); } div.appendChild(ul); }

  • Session externe de type "plugin"

    36

    }, _getInfo: function(e) { var ul, li; var info = this.ldbApplication.document.getInformations(); if (info != null) { var div = $(this.ldbDiv.id + ':div4'); div.innerHTML = ''; ul = document.createElement('UL'); for (var i = 0; i < info.templates.length; i++) if (info.templates[i] != null) { var t = info.templates[i]; for (var j = 0; j < t.blocks.length; j++) if (t.blocks[j] != null) { var b = t.blocks[j]; if (b.title != null) { li = document.createElement('LI'); li.innerHTML = 't' + t.id + ':b' + b.id + ' - ' + b.type + ' - ' + b.title; ul.appendChild(li); } } } div.appendChild(ul); }

    }});

    ldb.api440.registerJsUrl('static/test.js');

    Le rsultat de ce plugin est visible ci-dessous

    Guide de programmationTable des matiresChapitre1.Programmer PRELYTIS LiveDashBoard1.EJB2.Service web3.Contenu

    Chapitre2.API Rest1.Principe de fonctionnement2.API disponibles2.1.Statut de l'installation2.2.Cration de la base de paramtrage PRELYTIS2.3.Suppression de la base de paramtrage PRELYTIS2.4.Cration de l'arborescence PRELYTIS2.5.Rechargement de PRELYTIS LiveDashBoard2.6.Rechargement du cache des libells internationaliss2.7.Licence2.8.Monitoring des sources de donnes2.9.Listes2.10.Exemple2.11.Dtail partir de l'identifiant interne2.11.1.Exemple

    2.12.Dtail partir du nom2.12.1.Exemple

    2.13.Statut du gestionnaire de tches2.14.Dmarrage du gestionnaire de tches2.15.Arrt du gestionnaire de tches2.16.Rafraichissement du gestionnaire de tches2.17.Statut de la dernire excution du gestionnaire de tches

    Chapitre3.EJBs1.EJBs de LiveDashBoard 4.2.x1.1.DashboardFacade, accs local1.2.I18nFacade, accs local1.3.Accs un document1.4.Lire la liste des libells d'une langue

    2.Accs distant aux EJBs de LiveDashBoard 4.4.x2.1.Le contexte initial2.1.1.Le serveur2.1.2.Le client

    2.2.DashboardFacade, accs distant2.3.I18nFacade, accs distant2.4.Accs un document LiveDashBoard2.5.Lire la liste des libells d'une langue2.6.JBoss 4.2.32.7.GlassFish 2.12.8.WebSphere 6.1

    Chapitre4.Service web LiveDashBoard v4.2.x : WebService1.String hello(String)2.WSParameterListResponse parameterListRequest(WSParameterListRequest)3.WSReportMetaDataResponse reportMetaDataRequest(WSReportMetaDataRequest)4.WSReportResponse reportRequest(WSReportRequest)5.WSReportFilterResponse reportFilterRequest(WSReportFilterRequest)6.WSMenuResponse menuRequest(WSMenuRequest)

    Chapitre5.Faade1.Ajout de faades spcifiques2.Faades d'authentification2.1.Authentification applicative2.2.Authentification HTTP2.3.Authentification HTTP Header2.4.Authentification LDAP2.5.Authentification LiveDashBoard 4.22.6.Authentification OEM2.7.Authentification spcifique

    Chapitre6.Intgration par URL1.Authentification2.Trackback

    Chapitre7.Session externe de type "plugin"1.Exemple de paramtrage de session externe "classique"2.Exemple de paramtrage de session externe "plugin"3.API Plugin4.Exemple de fichier Javascript