Communication client-serveur

 

Lors de l'ouverture de l'application JMap Pro, une connexion est établie vers le JMap Server associé. Cette connexion est utilisée pour acheminer les différentes requêtes systèmes, dont les requêtes de chargement de la configuration du projet et des données, ainsi que les requêtes d'extension.

La communication entre une application JMap Pro et JMap Server

La communication entre une application JMap Pro et JMap Server

La communication entre une application JMap Pro et JMap Server s'effectue par l'échange de requêtes et de réponses. Les requêtes et les réponses sont en fait des objets sérialisés que vous devez typiquement programmer et qui contiendront les propriétés nécessaires à l'exécution de la requête et au retour de l'information vers le client. Par exemple, pour une application de gestion des demandes des citoyens d'une ville, la requête et la réponse pourraient contenir les propriétés suivantes:

Requête

Réponse

nom du demandeur

type de demande

description

coordonnées x et y de la localisation de la demande

statut de la sauvegarde de la demande dans la base de données

identifiant unique généré à l'enregistrement

Exemple des propriétés d'une requête et d'une réponse

Pour plus d'information, consultez la section Programmation des requêtes d'extension.

 

Statut de la réponse

Chaque réponse possède un statut qui indique si la requête a été exécutée avec succès ou si un problème est survenu. La méthode getStatus() de la classe JMapExtensionResponse permet d'obtenir le statut de la réponse. Pour la liste des statuts possibles et leur description, référez-vous à la documentation de la classe JMapExtensionResponse.

Votre extension devrait toujours vérifier le statut d'une réponse avant de l'utiliser. Si le statut n'est pas égal à JMAPSRV_STS_SUCCESS, un traitement spécial doit être fait afin de gérer la situation d'erreur. Dans ce cas, la méthode getMessage() permet d'obtenir un message explicatif décrivant la cause de l'erreur.

Envoi des requêtes à JMap Server

La classe JMapSrvConnection est responsable de toutes les communications entre JMap client et JMap Server. Il est possible d'accéder à l'instance de la connexion en utilisant le contexte de l'application JMap tel que montré dans l'exemple suivant.

 
  JMapSrvConnection jmapConn = JMapApplicationContext.getInstance().getConnection();

 

Les méthode suivantes (héritées de la classe JMapNetworkConnection) sont utilisées pour l'envoi des requêtes à JMap Server et pour la réception des réponses.

Méthode

Description

executeRequest()

Envoie la requête passée en paramètre à JMap Server et retourne la réponse produite par JMap Server ou par une extension serveur. Cette méthode est bloquante. Cette méthode convient bien aux situations où il faut attendre la réponse du serveur avant de continuer.

pushRequest()

Envoie la requête passée en paramètre à JMap Server. Cette méthode est non bloquante. Lorsque la réponse sera reçue, la méthode callback() du client de la requête sera appelée. Cette méthode convient bien aux situations où il faut redonner le contrôle à l'utilisateur rapidement, et quand on peut traiter la réponse de manière asynchrone.

 

L'exemple de code suivant montre comment utiliser la méthode executeRequest.

 
  MyRequest request = new MyRequest("This is a test", 555);
  JMapSrvConnection jmapConn = JMapApplicationContext.getInstance().getConnection();
  MyResponse response = (MyResponse)jmapConn.executeRequest(request); // Execution WILL block here
    
  if (response.getStatus() == MyResponse.JMAPSRV_STS_SUCCESS)
  {
    // Do something useful with the response
  }
  else
  {
    // Handle error here
  }
 

 

L'exemple de code suivant montre comment utiliser la méthode pushRequest.

 

  MyRequest request = new MyRequest("This is a test", 555);
  request.setClient(new JMapRequestClient()
  {
    // Will be called when the response is received from JMapServer

    @Override
    public void callback(JMapRequest request, JMapResponse response)
    {
      if (response.getStatus() == MyResponse.JMAPSRV_STS_SUCCESS)
      {
        // Do something useful with the response
      }
      else
      {
        // Handle error here
      }
    }
  });
  JMapSrvConnection jmapConn = JMapApplicationContext.getInstance().getConnection();

  jmapConn.pushRequest(request); // Execution WILL NOT block here