mouais, du coup, c'est un peu tordu, trop peut être.
Une autre bidouille, qui ferait plus propre, et plus rapide à implémenter, serait de faire genre une ArrayList static dans la classe du service, et un flag boolean, static aussi ,pour signifier qu'un service est exécute ton code métier.
Le premier service contacté prend le contrôle de l'ArrayList, tous les autres remplissent cette ArrayList puis se termine.
Et du coup, une seule instance du service exécute ton code métier à un instant donné, même si plusieurs instance du service peuvent ajouter des messages dans la liste (et avec un synchronized pour les placer dans l'ordre).
Un truc du genre:
static boolean flag;
static ArrayList msg;
//quelques methodes static pour accéder au champs static, //synchronized pour faire vérrou sur les champs
static final int GET_FLAG = 0;
static final int FREE_FLAG = 1;
//pour gérer le flag
public static synchronized void manageFlag(int n){
if(n == GET_FLAG){
flag = true;
}else if(n == FREE_FLAG){
flag = false;
}
return flag;
}
//pour récup le premier message dans la liste
public static synchronized SOAPMessage getNextMsg(){
//si liste vide retourne null
}
//pour ajouter à la fin de la liste le nouveau message
public static synchronized SOAPMessage addMsg(SOAPMessage){...}
//et ton service
public void service(SOAPMessage request, SOAPMessage response){
addMsg(request);
if (!manageFlag(GET_FLAG)){
SOAPMessage msg = null;
while(msg=getNextMsg()!=null || manageFlag(FREE_FLAG)){
if(msg == null){
msg = getNextMsg(); //pour les pblms de synchro
}
//appel du code métier, contenu dans une méthode de la classe du service par exemple
}
}
}
c'est jouable je crois....
Sinon, je suis curieux, c'est dans quel contexte appalicatif que tu fais ça?
[^] # Re: Salut!
Posté par nj_gossein . En réponse au message Axis + Un grand nombre de messages. Évalué à 1.
Une autre bidouille, qui ferait plus propre, et plus rapide à implémenter, serait de faire genre une ArrayList static dans la classe du service, et un flag boolean, static aussi ,pour signifier qu'un service est exécute ton code métier.
Le premier service contacté prend le contrôle de l'ArrayList, tous les autres remplissent cette ArrayList puis se termine.
Et du coup, une seule instance du service exécute ton code métier à un instant donné, même si plusieurs instance du service peuvent ajouter des messages dans la liste (et avec un synchronized pour les placer dans l'ordre).
Un truc du genre:
static boolean flag;
static ArrayList msg;
//quelques methodes static pour accéder au champs static, //synchronized pour faire vérrou sur les champs
static final int GET_FLAG = 0;
static final int FREE_FLAG = 1;
//pour gérer le flag
public static synchronized void manageFlag(int n){
if(n == GET_FLAG){
flag = true;
}else if(n == FREE_FLAG){
flag = false;
}
return flag;
}
//pour récup le premier message dans la liste
public static synchronized SOAPMessage getNextMsg(){
//si liste vide retourne null
}
//pour ajouter à la fin de la liste le nouveau message
public static synchronized SOAPMessage addMsg(SOAPMessage){...}
//et ton service
public void service(SOAPMessage request, SOAPMessage response){
addMsg(request);
if (!manageFlag(GET_FLAG)){
SOAPMessage msg = null;
while(msg=getNextMsg()!=null || manageFlag(FREE_FLAG)){
if(msg == null){
msg = getNextMsg(); //pour les pblms de synchro
}
//appel du code métier, contenu dans une méthode de la classe du service par exemple
}
}
}
c'est jouable je crois....
Sinon, je suis curieux, c'est dans quel contexte appalicatif que tu fais ça?
cordialement,