Services de JMap Server

La classe JMap Server

La classe JMapServer est la principale classe à partir de laquelle vous pouvez accéder aux différents services du serveur JMap. Cette classe est un singleton. Vous pouvez donc y avoir accès de n'importe où  par la méthode statique JMapServer.getInstance().

JMapHome

Le chemin du répertoire principal de JMap Server est accessible par la méthode statique getJMapHome() de la classe JMapServer. Cela peut être utile de connaître ce chemin pour lire ou écrire des données dans les sous-répertoires de JMap Server.

 

Journalisation

L'outil de journalisation de JMap Server permet d'enregistrer des événements dans les fichiers de journalisation. La classe de l'outil est Logger et c'est un signleton. On peut donc avoir accès à l'instance unique par la méthode statique Logger.getInstance().

Les différentes versions de la méthode log sont utilisées pour enregistrer les messages, selon le type d'information à enregistrer.

Le tableau suivant présente les méthode les plus utilisées de la classe Logger.

Méthodes de la classe Logger

log(int, String)

Enregistre un message du niveau spécifié.

log(int, String, String)

Enregistre un message du niveau spécifié associé à l'utilisateur spécifié.

log(int, String, Throwable)

Enregistre un message du niveau spécifié ainsi que la trace de l'exception passée en paramètre.

log(int, String, Throwable, String)

Enregistre un message du niveau spécifié, associé à l'utilisateur spécifié, ainsi que la trace de l'exception passée en paramètre.

setLogLevel(int)

Modifie le niveau des messages qui seront enregistrés.

 

Les différents niveaux de messages disponibles sont définies par des constantes de la classe Logger.

LEVEL_DEBUG

LEVEL_INFO

LEVEL_WARNING

LEVEL_ERROR

LEVEL_FATAL

 

L'exemple de code suivant montre comment enregistrer un message avec les différentes méthodes.

 

    // Logs a message of level INFO

    Logger.getInstance().log(Logger.LEVEL_INFO, "Extension ABC recieved a request for ...");

 

    // Logs a message of level WARNING, tagged to user etardif

    Logger.getInstance().log(Logger.LEVEL_WARNING, "Something occurred in Extension ABC ...", "etardif");

    

    // Logs a message of level ERROR, and includes the exception stack trace

    Exception e = ...;

    Logger.getInstance().log(Logger.LEVEL_ERROR, "An unexpected error occurred in Extension ABC ...", e);

 

 

Bases de données

Les connexions aux bases de données relationnelles auxquelles JMap Server est connecté sont disponibles par programmation. Cela simplifie grandement les accès aux données car vous n'avez pas besoin d'ouvrir, de fermer et de gérer les connexions vers ces bases de données.

JMap Server gère les connexions aux bases de données dans des réserves de connexions (connection pools). Le principe de fonctionnement d'une réserve est le suivant. Lorsqu'une connexion est requise, elle est empruntée de la réserve. Elle est ensuite utilisée brièvement le temps d'exécuter une ou plusieurs requêtes. Finalement, et très important, la connexion est retournée dans la réserve et redevient disponible pour d'autres besoins. Les connexions ne sont donc jamais fermées.

Les méthodes getDBConnPool(int) et getDBConnPool(String) permettent d'obtenir une réserve de connexions (instance de la classe DatabaseConnectionPool) par son identifiant numérique ou par son nom.

Le tableau suivant montre les méthodes de la classe DatabaseConnectionPool les plus souvent utilisées.

Méthodes les plus utiles de la classe DatabaseConnectionPool

borrowConnection()

Emprunte une connexion JDBC de la réserve. La connexion est alors réservée exclusivement.

returnConnection(Connection)

Retourne une connexion JDBC empruntée dans la réserve. Il est très important d'appeler cette méthode après l'utilisation d'une connexion.

getStatus()

Permet d'obtenir l'état de la réserve de connexions. Peut être appelée pour valider le bon fonctionnement de la réserve avant d'emprunter une connexion. Les états possibles sont définies par des constantes de la classe ConnectionPoolInfo (CONNECTION_NOT_TESTED, CONNECTION_ERROR ou CONNECTION_OK)

 

L'exemple de code source suivant montre comment utiliser une réserve de connexions vers des bases de données.

 

    DatabaseConnectionPool pool = JMapServer.getInstance().getDBConnPool("parcels");

    Connection conn = null;

    

    try

    {

      conn = pool.borrowConnection();

      

      // use connection to do queries.....

      

    }

    catch (SQLException e)

    {

      e.printStackTrace();

    }

    finally

    {

      // It is very important to return the connection to the pool.

      // Doing it in a finally clause is a good practice

      if (conn != null)

        pool.returnConnection(conn);

    }

 

 

Extractions de données spatiales

Il est possible d'effectuer des extractions de données spatiales en utilisant le gestionnaire de données (classe JMapServerDataManager) de JMap Server. Le gestionnaire de données est accessible par la méthode getDataManager() de la classe JMapServer.

Le tableau suivant montre les méthodes les plus utilisées de la classe JMapServerDataManager.

Méthodes de la classe JMapServerDataManager

extractElements (JMapServerProject, JMapServerVectorLayer, QueryFilter[], Attribute[])

Effectue l'extraction des données spatiales et de leurs attributs pour la couche spécifiée, appartenant au projet spécifié et qui passent les filtres passés en paramètres. Seuls les attributs qui sont indiqués dans le dernier paramètre sont inclus dans le résultat.

extractElements (String)

Effectue l'extraction des données spatiales et de leurs attributs selon la requête passée en paramètres. La syntaxe générale des requêtes et la suivante :

select $element from $source { $project { PROJECT_NAME } $layer { LAYER_NAME } } where CONDITION

Exemple :

select $element from $source { $project { The World } $layer { Countries } } where COUNTRY = 'Peru'

extractElements (String, long[])

Effectue l'extraction des données spatiales et de leurs attributs selon la requête passée en paramètres et la liste d'identifiants spécifiée. Seuls les éléments dont l'identifiant est présent dans la liste sont retournés.

extractElements (String, long[], OrientedRectangle)

Effectue l'extraction des données spatiales et de leurs attributs selon la requête passée en paramètres, la liste d'identifiants ainsi que la région spécifiées. Seuls les éléments dont l'identifiant est présent dans la liste et qui intersectent la région sont retournés.

 

Pour faire l'extraction des données, vous pouvez aussi utiliser des filtres. Les filtres sont des objets qui permettent, selon différents critères, de contrôler quelles données doivent être extraites.

Les classes de filtres sont toutes dérivées de la classe abstraite QueryFilter. Le tableau suivant montre l'ensemble des types de filtres qui sont disponibles:

Types de filtres de requêtes

AttributeFilter

Permet de définir une condition basée sur un attribut des données. La condition est définie par un attribut et par un ensemble de valeurs. Seules les données dont l'attribut en question a une valeur inclue dans l'ensemble de valeurs passent le filtre.

GeometryTypesFilter

Permet de définir une condition basée sur le type de géométries des données. La condition est définie par un u plusieurs types de géométries. Seules les données dont le type de géométrie correspond à ceux du filtre passent le filtre.

SpatialQueryFilter

Permet de définir une condition spatiale. Seules les données qui remplissent la condition passent le filtre. La condition est définie par une géométrie et une contrainte. Par exemple: toutes les géométries qui intersectent le polygone spécifié, ou toutes les géométries qui contiennent le point spécifié, etc.

SQLQueryFilter

Permet de définir une condition en langage SQL. C'est l'équivalent de la clause where d'une requête SQL. La clause where est interprétée par le système de base de données qui contient les données.

 

L'exemple de code source suivant montre comment extraire des données spatiales en utilisant un filtre spatial.

  

  JMapServerProject serverProject = ...

  JMapServerVectorLayer serverLayer = ...

  Polygon region = ...

 

  final JMapServerDataManager dataMgr = JMapServer.getInstance().getDataManager();

 

  // Create a new spatial filter for all elements that intersect the polygon

  final SpatialQueryFilter newFilter = new SpatialQueryFilter();

 

  newFilter.setGeometry(region);

  newFilter.setType(SpatialQueryFilter.SPATIAL_OP_INTERSECTS);

  

  // Set the projection on the filter to indicate the coordinate system of the geometry

  newFilter.setProjection(serverProject.getProject().getMapProjection());

 

  // Do the extraction using the data manager. All attributes of the layer will be included

  JMapGeoElement[] result = dataMgr.extractElements(serverProject,

                                                    serverLayer,

                                                    new QueryFilter[]{newFilter},

                                                    serverLayer.getBoundAttributes() );

 

 

Envoi de courriels

La méthode statique sendMail() de la classe MailService permet l'envoi de courriels par JMap Server. Pour que l'envoi fonctionne, JMap Server doit être connecté à un serveur SMTP. Cette connexion peut être configurée lors de l'installation de JMap ou dans la section Paramètres de JMap Admin.

 

    String to = "jo32@gmail.com;ann122@hotmail.com";

    String from = "admin@123map.com";

    

    try

    {

      MailService.sendMail(MailService.toAddresses(to), "Map extraction completed", "The data was extracted successfully and is available here.", new InternetAddress(from));

    }

    catch (AddressException e)

    {

      e.printStackTrace();

    }

    catch (Exception e)

    {

      e.printStackTrace();

    }

 

 

Gestionnaire de sessions

Le gestionnaire de sessions (classe JMapServerSessionManager) de JMap Server est responsable de gérer les sessions actives dans le système. Il permet notamment d'accéder à l'utilisateur relié à une session en utilisant le numéro de session (session id). Ce numéro de session est accessible depuis chaque requête reçue par JMap Server, incluant les requêtes destinées aux extensions serveur. Le gestionnaire de session peut donc être utilisé pour connaître l'identité de l'utilisateur à l'origine d'une requête.

L'exemple de code qui suit montre comment accéder à l'utilisateur à l'origine d'une requête.

 

  public JMapExtensionResponse processRequest(JMapExtensionRequest request)

  {

    int sessionId = request.getSessionId();

    User user = JMapServer.getInstance().getSessionManager().getSessionUser(sessionId);

    System.out.println("##### Request originating from user: " + user.getName() + " (" + user.getFullName() + ")");

    

    ...

  }

 

 

Gestionnaire d'utilisateurs

Le gestionnaire d'utilisateurs (interface UserManager) permet d'accéder à la liste des utilisateurs et des groupes utilisés par JMap Server pour le contrôle des accès. Il permet aussi d'accéder aux informations sur les utilisateurs. Si vous développez une extension serveur qui doit gérer sa propre liste de permissions, il est très utile d'accéder à la liste des utilisateurs utilisée par le système.

La méthode getUserManager() de la classe JMapServer retourne le gestionnaire d'utilisateurs (classe implémentant l'interface UserManager) en utilisation.

 

Méthodes les plus utiles de la classe UserManager

getUser(String)

Retourne l'utilisateur (instance de la classe User) dont le nom est spécifié en paramètre.

getGroup(String)

Retourne le groupe (instance de la classe Group) dont le nom est spécifié en paramètre.

users()

Retourne la liste des utilisateurs (instances de la classe User) utilisée par JMap Server.

groups()

Retourne la liste des groupes (instances de la classe Group) utilisée par JMap Server.

 

La classe User contient les informations relatives à un utilisateur telles que son nom complet, son adresse courriel, etc.

 

Workspaces

Les workspaces dans JMap sont des espaces réservés pour le stockage individuel des données des utilisateurs. Chaque workspace est en fait un sous-répertoire distinct du serveur JMap. C'est dans les workspaces que sont stockés les contextes créés par les utilisateurs. Comme programmeur, vous pouvez les utiliser pour y déposer des données.

La méthode getWorkSpaceManager() de la classe JMapServer permet d'accéder au gestionnaire de workspaces (classe WorkSpaceManager). Ce dernier fournit quelques méthodes utiles relatives aux workspaces. Par défaut, les workspaces sont localisés dans le répertoire JMAP_HOME/workspaces.

Le tableau suivant montre les méthodes les plus utiles de la classe WorkSpaceManager.

Méthodes les plus utiles de la classe WorkSpaceManager

getUserWSDirectory(String)

Retourne le chemin complet vers le répertoire du workspace de l'utilisateur spécifié en paramètre.

emptyUserWS(String)

Efface tout le contenu du workspace de l'utilisateur spécifié en paramètre.

deleteUserWS(String)

Efface le répertoire du workspace de l'utilisateur spécifié en paramètre.