2010-04-15 5 views
3

modifier: Retagged comme tomcat/jboss, car cela pourrait être une question sur le Tomcat embarqué dans JBoss 6, plutôt que JBoss setraitement asynchrone dans JBoss 6 ("Comet")

J'ai un extrêmement simple servlet, qui fonctionne sur Glassfish v3. Il utilise le traitement asynchrone de Servlet 3.0. Voici une version simplifiée (qui ne fait pas grand chose):

@WebServlet(asyncSupported=true) 
public class SimpleServlet extends HttpServlet { 

    @Override 
    protected void doGet(HttpServletRequest request, 
      HttpServletResponse response) 
      throws ServletException, IOException { 

     final AsyncContext ac = request.startAsync(); 
     ac.setTimeout(3000); 
    } 
} 

sur JBoss 6.0.0 Milestone 2, je reçois l'exception suivante:

java.lang.IllegalStateException: The servlet or filters that are being used 
      by this request do not support async operation 
    at org.apache.catalina.connector.Request.startAsync(Request.java:3096) 
    at org.apache.catalina.connector.Request.startAsync(Request.java:3090) 
    at org.apache.catalina.connector.RequestFacade.startAsync(RequestFacade.java:990) 
    at playcomet.SimpleServlet.doGet(SimpleServlet.java:18) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:734) 
    ... 

Dois-je faire quoi que ce soit spécial activer le traitement asynchrone dans JBoss 6? Ou ai-je besoin d'un descripteur de déploiement supplémentaire? ...

+0

@skaffman: Merci pour l'indice avec Tomcat! Cependant, JBoss 6.0.0 Milestone 2 inclut une toute nouvelle approche du traitement asynchrone (basé sur Servlet 3.0), et AFAIK, ce n'est pas encore disponible dans les versions de Tomcat - je ne suis pas sûr à 100%. –

Répondre

2

Si vous avez le web.xml déployé avec .. Juste enlever cela. la structure doit être

test.war

  • WEB-INF/
  • WEB-INF/classes/*. class

  • WEB-INF/lib/*. jar


Votre fichier web.xml est redéfini comme yncSupported = vraie annotation et donc l'erreur

+0

Merci d'avoir creusé ma vieille question et pour votre réponse! En général, je ne peux pas simplement supprimer le fichier web.xml, car j'en ai généralement besoin. Y a-t-il un moyen d'obtenir 'asyncSupported = true' en modifiant le fichier web.xml d'une manière ou d'une autre? Je ne me souviens pas de l'avoir défini explicitement sur 'false' dans le fichier web.xml. (Je n'ai plus mon ancienne configuration de projet, mais je suis toujours intéressé.) –

+0

@Chris: vous pouvez toujours avoir web.xml mais ne définissez pas le servlet async dedans et laissez l'annotation se déclencher pour ce servlet. Cependant, je n'ai pas exploré la possibilité de l'attribut asyncSupported = true dans web.xml –

Questions connexes