Salut tout le monde,
J'ai une question sur comment je peux modifier le timout de Apache fourni avec gwt ?
Merci pour vos aides.
Salut tout le monde,
J'ai une question sur comment je peux modifier le timout de Apache fourni avec gwt ?
Merci pour vos aides.
je crois que ça revient à donner un timeout à mon callback de type AsyncCallback<String>, comment faire je n'ai absolument aucune idée !
Si vous en avez quelques unes je suis preneur .
Tu veux parler de Jetty (gwt 1.6) ou de Tomcat (gwt 1.5) ?
j'ai installé gwt 1.6 et j'utilise hostedMod, je crois entendu parler de Tomcat fourni avec.
Comme je rencontre un problème avec une requête HTTP coté serveur :
Je faisça marche bien lorsque le traitement ne prend que 20 secondes à peu près. dès que le traitement dépasse ce 20 secondes j'obtiens une IOException car je fais myConnection.getInputStream(); alors qu'il est vide, je me suis dis peut être si je pourrai configurer mon apache fourni avec GWT mais je ne l'ai pas trouvé dans le fichier d'installation.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 fileURL = new URL(query); InputStream iStream = null; HttpURLConnection myConnection = (HttpURLConnection) fileURL.openConnection(); try { myConnection.connect(); iStream = myConnection.getInputStream();
Merci.
Si tu utilises gwt , c'est jetty qui est utilisé en hosted mode et il n'y a pas d'apache.
Maintenant, dans le code (côté serveur) que tu nous montre, tu ouvre une connexion http sur une url.
Est-ce que cette url commence par http://locahost, dans ce cas, c'est bien jetty qui te fourni la ressource et il y a peut être un problème de config.
Si cette url commence par autre chose, il faudrait voir du côté du serveur http qui délivre cette ressource, c'est lui qui est a paramétré.
En tout cas, ça n'a pas l'air d'un problème gwt mais plutôt serveur http (jetty si localhost ou autre)
Tout à fait ma requête commence bien par localhost.
la voilà :
mais j'ai une architecture un petit peu bizarre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part http://localhost/monAlias/prog.exe/Service1?callBack=Information¶meters=
coté serveur GWT je lance une requête HTTP en java classique, si le temps d'exécution de ma requête est petit ça marche sinon lorsque je fait :
avec :
Code : Sélectionner tout - Visualiser dans une fenêtre à part iStream = myConnection.getInputStream();
ça me lève une exception :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 fileURL = new URL(query); InputStream iStream = null; HttpURLConnection myConnection = (HttpURLConnection) fileURL.openConnection();
J'ai trouvé un code pour les requête HTTP à partir du client :
Code : Sélectionner tout - Visualiser dans une fenêtre à part "http://localhost/monAlias/prog.exe/Service1?callBack=Information¶meters=" false timed out.
mais il me signale que ma requête n'est pas bien formée !
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 public void doGetWithTimeout(String url) { RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, url); try { builder.setTimeoutMillis(1); builder.sendRequest( "Content-type: text/xml", new RequestCallback() { public void onError(Request request, Throwable exception) { if (exception instanceof RequestTimeoutException) { Window.alert("Timeout: " + ((RequestTimeoutException)exception).getTimeoutMillis() + "msec."); } else { Window.alert("Exception: " + exception.getMessage()); } } public void onResponseReceived(Request request, Response response) { System.out.println("######## Response HTTP :" + response.getText()); } }); } catch (RequestException e) { Window.alert("Failed to send the request: " + e.getMessage()); } }
C'est quoi l'exception qui te délivre "http://localhost/monAlias/prog.exe/Service1?callBack=Information¶meters=" false timed out.
Tu n'as rien d'autre que ce message, la trace de l'exception par ex. ?
voilà la trace de l'exception avec le premier cas lorsque je fais myConnection.getInputStream() :
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 java.io.IOException: http method GET against URL http://localhost/monAlias/prog.exe/Service1?callBack=Information¶meters= timed out. at com.google.appengine.api.urlfetch.URLFetchServiceImpl.handleApplicationException(URLFetchServiceImpl.java:56) at com.google.appengine.api.urlfetch.URLFetchServiceImpl.fetch(URLFetchServiceImpl.java:30) at com.google.apphosting.utils.security.urlfetch.URLFetchServiceStreamHandler$Connection.fetchResponse(URLFetchServiceStreamHandler.java:378) at com.google.apphosting.utils.security.urlfetch.URLFetchServiceStreamHandler$Connection.getInputStream(URLFetchServiceStreamHandler.java:278) at com.exemple.server.HttpQuery.getResponseQuery(HttpQuery.java:31) at com.exemple.server.GreetingServiceImpl.greetServer(GreetingServiceImpl.java:27) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:527) at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:166) at com.google.gwt.user.server.rpc.RemoteServiceServlet.doPost(RemoteServiceServlet.java:86) at javax.servlet.http.HttpServlet.service(HttpServlet.java:713) at javax.servlet.http.HttpServlet.service(HttpServlet.java:806) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1093) at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405) at com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:54) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139) at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:306) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139) at org.mortbay.jetty.Server.handle(Server.java:313) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:506) at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:844) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:644) at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:205) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:381) at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:396) at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442)
Mais ça c'est lorsque j'utlise l'appel à une application distante via un serveur Apache, et ça marche lorsque le traitement n'est pas lourd.
Je me demande est ce qu'on peut faire des requêtes à un serveur Apache à partir de mon client GWT type :Car avec le deuxième code que j'ai poster ou j'utilise "RequestBuilder ", il m'affiche le message suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part http://localhost/monAlias/prog.exe/Service1?callBack=Information¶meters=
Code : Sélectionner tout - Visualiser dans une fenêtre à part The URL http://localhost/monAlias/prog.exe/Service1?callBack=Information¶meters= is invalid or violates the same-origin security restriction
J'ai bien fait de te demander la trace complète car tu es un sacré coquin, tu ne m'avais pas dit que tu utilisais Google App Engine !!!
Pour appeler à partir du client GWT une URL d'un autre domaine, pour des question de sécurité (XSS), tu dois ajouter une whilelist pour éviter des warnings.
Avec GAE, j'ai bien peur que ce soit encore plus restrictif et que tu ne puisses pas à partir du client attaquer une url d'un autre domaine ...
Pour appeler à partir du serveur Java une autre url, tu peux faire ce que tu veux.
Avec GAE, il te faut passer par l'API des URL Fetch comme tu sembles le faire (et qui semble marcher lorsque le traitement est léger).
Sinon, tu devrais lire la page :
Ce qui semble être ton cas non ?The URL Fetch service waits up to 5 seconds for the remote server to respond. If the server does not respond before the fetch deadline, the request fails, and an exception is thrown.
C'est critiquable mais compréhensible : A quoi sert une application GAE scalable (qui répond vite !!!) si tu fais appel à des ressources lentes.
Je ne sais pas en fait les types des applications GWT, et précisément GAE, tu peux m'éclaircir s.t.p est ce que mon choix n'est pas correct ? ou bien il ne tiendra pas la route si c'est le cas alors quel type d'application de GWT je dois utiliser.C'est critiquable mais compréhensible : A quoi sert une application GAE scalable (qui répond vite !!!) si tu fais appel à des ressources lentes.
Je suis preneur.
Merci d'avance
Il faut distinguer deux choses :
- GWT : une techno pour faire des applications web riches
- GAE : un outil pour déployer certaines applications web sur l'infrastructure de google.
GWT simplifie le développement d'interface web ajax dans le browser du client mais côté serveur, tu fais tout ce que tu veux ... (il faudra après déployer ton application dans un serveur d'application Java)
GAE offre une solution de déploiement d'application web "gratuite" et limitée. Ce qui fait que même si on peux faire pas mal de chose, on ne peut pas tout faire non plus ... Il y a pas mal de limitations quand même, certaines liées à l'infrastructure du cloud, d'autres liées à la jeunesse du service.
La question à te poser est-ce que tu veux faire ?
- Que doit elle faire ? (des besoins spécifiques peuvent exclure GAE de l'équation parce que c'est pas possible dessus)
- A qui se destine l'application ?
- Comment tu vas la déployer ?
Avec le plugin de google (et cela peut induire en erreur), tu peux choisir :
- faire une application GWT/GAE : Tu fais ton client en GWT. La partie serveur peut tout faire ce qui est autorisé par GAE (voir les limitations de GAE: pas de base de données relationnelles, pas de thread, pas de socket, ...)
- faire une application GAE seule : Tu fais ton client avec des JSP/servlet. La partie serveur peut tout faire ce qui est autorisé par GAE.
- faire une application GWT seule : Tu fais ton client en GWT. La partie serveur peut tout faire mais il te faut un serveur Java (Tomcat, Jetty, Glassfish, WebLogic, JBoss, ...) installé sur une machine.
c'est ça ce que je pense faire, car j'ai installé le plugin eclipse pour gwt win 1.6.4, j'ai google !-> web application Projectfaire une application GWT seule : Tu fais ton client en GWT. La partie serveur peut tout faire mais il te faut un serveur Java (Tomcat, Jetty, Glassfish, WebLogic, JBoss, ...) installé sur une machine.
mon application contient le client et le serveur, et ils communiquent via l'interface Asynchrone, je le compile en hostedMod . Et je n'ai pas encore fait le déploiement et je compte le faire sur Apache 2.2.
Tout ça n'a rien à voir avec GAE. c'est du GWT classique non?
alors la question est ce que le 5 sec et 1Mo comme limite de taille de réponse reste aussi limite pour GWT ?
Si oui comment les modifiés .
Merci
Merci benwit infiniment.
Partager