IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Services Web Java Discussion :

Web Service REST gérer multi-utilisateurs


Sujet :

Services Web Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de Azerx
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2013
    Messages : 116
    Par défaut Web Service REST gérer multi-utilisateurs
    Bonjour,
    étant actuellement en train de développer un service web REST intégrant une API, je me vois confronté à un problème.
    En effet, ce dernier fonctionne parfaitement quand il est utilisé par un utilisateur à la fois, mais quand deux utilisateurs font une demande en même temps l'API met un temps qui semble infini à répondre ce qu'on lui demande.
    Ma question est donc de savoir d'où pourrait venir ce problème, ou bien de savoir comment séparer les ressources afin que chaque utilisateur puisse accéder à l'API sans engendrer de conflits.

    Bien entendu si ce n'est pas clair n"hésitez pas à me demander plus de détails!
    Merci d'avance!

  2. #2
    Membre Expert Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Par défaut
    salut,
    as-tu deja entendu parler de ceci:
    lien

    Eric

  3. #3
    Membre éprouvé Avatar de Azerx
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2013
    Messages : 116
    Par défaut
    Citation Envoyé par jeffray03 Voir le message
    salut,
    as-tu deja entendu parler de ceci:
    lien

    Eric
    Merci pour votre réponse rapide! Je vais voir ça de suite!

  4. #4
    Membre éprouvé Avatar de Azerx
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2013
    Messages : 116
    Par défaut Toujours pas :(
    Après avoir parcouru une multitude de pages informatives et tutoriels, j'ai bien l'impression que cela correspond à ce que je dois mettre en place.
    Cependant je n'arrive pas à voir comment je pourrais modifier ce que j'ai aujourd'hui pour que cela devienne asynchrone

    Ce que j'ai aujourd'hui (en très simplifié):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
     
           //[...]
           fonctionTresLente();
           request.setAttribute("unAttribut", variableUne);
           //[...]
           request.setAttribute("unAutre", variableDeux);
     
           this.getServletContext().getRequestDispatcher("lien/maJSP.jsp").forward(request, response);
    }

  5. #5
    Membre éprouvé Avatar de Azerx
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2013
    Messages : 116
    Par défaut Thread?
    Je ne suis toujours pas arrivé à mettre en place une solution qui fonctionne. Cependant j'ai aussi vu que l'utilisation des Thread pourrait me servir (ici et sont les exemples que j'ai essayé).
    De l'aide?

  6. #6
    Membre Expert Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Par défaut
    salut,
    voici un exemple que je viens de tester:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    package in.webtuts.rest.resources;
     
    import java.util.concurrent.TimeUnit;
     
    import javax.ws.rs.GET;
    import javax.ws.rs.Path;
    import javax.ws.rs.container.AsyncResponse;
    import javax.ws.rs.container.Suspended;
    import javax.ws.rs.container.TimeoutHandler;
    import javax.ws.rs.core.Response;
     
    @Path("/resource")
    public class AsyncResource {
     
      @GET
      @Path("/timeoutAsync")
      public void asyncGetWithTimeout(@Suspended final AsyncResponse asyncResponse) {
        asyncResponse.setTimeoutHandler(new TimeoutHandler() {
          @Override
          public void handleTimeout(AsyncResponse asyncResponse) {
            asyncResponse.resume(Response.status(Response.Status.SERVICE_UNAVAILABLE).entity("Operation time out.").build());
          }
        });
        asyncResponse.setTimeout(5, TimeUnit.SECONDS);
     
        new Thread(new Runnable() {
     
          @Override
          public void run() {
            String result = veryExpensiveOperation();
            asyncResponse.resume(result);
          }
     
          private String veryExpensiveOperation() {
            return "Very Expensive Operation with Timeout";
          }
        }).start();
      }
     
    }
    et un Test pour verifier cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    package in.webtuts.rest.resources;
     
    import java.net.URI;
    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.Future;
     
    import javax.ws.rs.client.AsyncInvoker;
    import javax.ws.rs.client.Client;
    import javax.ws.rs.client.ClientBuilder;
    import javax.ws.rs.client.WebTarget;
    import javax.ws.rs.core.Response;
     
    import org.glassfish.grizzly.http.server.HttpServer;
    import org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpServerFactory;
    import org.glassfish.jersey.server.ResourceConfig;
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
    public class AsyncResourceTest {
     
      private HttpServer httpServer;
      private WebTarget webTarget;
      private static final URI baseUri = URI.create("http://localhost:8080/rest/");
     
      @Before
      public void setup() throws Exception {
        //create ResourceConfig from Resource class
        ResourceConfig rc = new ResourceConfig(AsyncResource.class);
     
        //create the Grizzly server instance
        httpServer = GrizzlyHttpServerFactory.createHttpServer(baseUri, rc);
        //start the server
        httpServer.start();
     
        //configure client with the base URI path
        Client client = ClientBuilder.newClient();
        webTarget = client.target(baseUri);
      }
     
      @After
      public void tearDown() throws Exception {
        //if you want to stop the server from the input through keyboard then uncomment below two lines
        // System.out.println(String
        // .format("Application started.%nHit enter to stop it..."));
        // System.in.read();
     
        //stop the server
        httpServer.shutdown();
      }
     
      @Test
      public void testAsyncGetWithTimeout() throws InterruptedException, ExecutionException {
        final AsyncInvoker asyncInvoker = webTarget.path("resource/timeoutAsync").request().async();
        final Future<Response> responseFuture = asyncInvoker.get();
        System.out.println("Request is being processed asynchronously.");
        final Response response = responseFuture.get();
        // get() waits for the response to be ready
        System.out.println("Response received : " + response);
        System.out.println("Response from GET method : " + response.readEntity(String.class));
      }
     
    }
    le fichier web.xml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://java.sun.com/xml/ns/javaee"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
        id="WebApp_ID" version="3.0">
        <display-name>rest</display-name>
        <servlet>
            <servlet-name>REST</servlet-name>
            <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
            <init-param>
                <param-name>jersey.config.server.provider.packages</param-name>
                <param-value>in.webtuts.rest.resources</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <!-- Map /rest/* to Jersey -->
        <servlet-mapping>
            <servlet-name>REST</servlet-name>
            <url-pattern>/*</url-pattern>
        </servlet-mapping>
    </web-app>
    sie t´as des questions n´hesites pas.

    Eric

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. web services REST
    Par mafanta dans le forum Services Web
    Réponses: 1
    Dernier message: 08/02/2011, 08h44
  2. web service restful
    Par linda2010 dans le forum Services Web
    Réponses: 0
    Dernier message: 07/03/2010, 23h51
  3. Web service REST
    Par Lexandre dans le forum Développement de jobs
    Réponses: 0
    Dernier message: 27/01/2010, 10h31
  4. Problème FLEX Web Service REST
    Par Florian_44 dans le forum Flex
    Réponses: 1
    Dernier message: 25/06/2009, 00h58
  5. communication web services et systeme multi agent
    Par hadi200 dans le forum Programmation par agent
    Réponses: 0
    Dernier message: 01/04/2009, 10h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo