2009-11-12 2 views
2

J'utilise JAXWS pour générer des services web et servir en utilisant EndPoint.publish() ainsi qu'en déployant le fichier war, mais dès qu'il a servi 100 requêtes, il ne retournera pas la réponse 101st . Comment configurer JAXWS pour changer ce compte à illimité?JAXWS ne traite que 100 demandes simultanées, comment configurer JAXWS pour le changer en illimité?

EDIT: solution trouvée, tout d'abord il n'était pas lié à JAXWS et je suis désolé de l'avoir posté ici, dans ma première impression je pensais que le problème était avec JAXWS mais après exploration profonde et débogage j'ai trouvé problème avec ma persistance couche (Hibernate) où le nombre maximum de sessions autorisées est de 100 par défaut. Désolé encore de vous avoir fait réfléchir à ce qui n'a pas de sens.

+1

Veuillez indiquer le code source pour un exemple minimal montrant ce comportement. –

+0

Quel conteneur utilisez-vous? – Karl

+0

Voulez-vous dire 100 demandes (séquentielles) à partir du démarrage du conteneur; ou qu'il ne peut pas traiter plus de 100 demandes simultanées? –

Répondre

2

Ceci est très étrange et je n'ai pas réussi à reproduire le comportement que vous décrivez.

J'ai rapidement créé le service Hello suivant (en utilisant JAX-WS RI 2.1.6 de mon JDK 6):

import java.net.URL; 

import javax.jws.WebService; 
import javax.xml.ws.Endpoint; 

@WebService() 
public class Hello { 

    // Business method we want to expose as Web service operation 
    public String sayHello(String name) { 
     return "Hello " + name + "!"; 
    } 

    public static void main(String[] args) throws Exception { 
     String address = "http://localhost:8080/HelloWebService/HelloService?WSDL"; 
     URL wsdlURL = new URL(address + "?wsdl"); 
     Endpoint ep = Endpoint.publish(address, new Hello()); 
    } 

} 

Ensuite, j'ai installé un test SoapUI rapide qui appelle le service bonjour 110 fois, juste pour être sûr, pendant que la méthode main est en cours d'exécution. Ci-dessous une capture d'écran du résultat réel:

alt text http://img404.imageshack.us/img404/5366/screenshotsoapui301.png

Comme vous pouvez le voir, le test a fonctionné très bien avec 0 erreur sur 110 (pas tous en même temps) les appels.

Veuillez fournir un code indiquant ce que vous faites, il doit y avoir une différence quelque part (peut-être que vous exécutez des requêtes fortement parallélisées, auquel cas je ne teste pas la même chose).

3

En interne, un pool de threads (Executor) est utilisé pour gérer les demandes. Sa taille par défaut est de 100 requêtes. Vous pouvez définir votre propre ThreadPoolExecutor facilement via Endpoint # setExecutor (Executor) après avoir créé l'instance Endpoint.

+0

Je me doutais de cela (mais je voulais que l'OP confirme qu'il parlait de demande parallèle) mais, pour ma culture, où est-il documenté? Je ne trouve aucune mention de cela dans le javadoc. –

+1

Il est documenté dans le commentaire de type, en haut de la page Javadoc Endpoint (http://java.sun.com/javase/6/docs/api/javax/xml/ws/Endpoint.html). – cafebabe

+0

Eh bien, la limite de 100 threads n'est pas documentée. Mais vous pouvez le rechercher en obtenant l'Executor, le jeter à son type. Ça doit être sth. de ThreadPoolExecutor avec une taille de pool de base de 25 et un maximum de 100. Je n'ai jamais regardé ça;) – cafebabe

Questions connexes