Salut,

Les RemoteObjects semblent bien limités dans Flex : on ne peut pas toujours les appeler en parallèle.

J'ai fait un petit exemple minimal qui permet de mettre en évidence les problèmes.

J'ai une classe java, qui sera le service appelé à distance. La méthode attend un certain temps (8 secondes ici) pour bien avoir le temps de se rendre compte du problème :
Code java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
public class Service {
 
    public void method(int n) {
        System.out.println("method(" + n + ") starts");
        try {
            Thread.sleep(8000);
        } catch(InterruptedException e) {}
        System.out.println("method(" + n + ") ends");
    }
 
}

Dans remoting-config, je déclare ce service :
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
    <destination id="service">
        <properties>
            <source>Service</source>
        </properties>
    </destination>

Et voici mon application MXML :
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
	<mx:RemoteObject id="service1" destination="service" />
	<mx:RemoteObject id="service2" destination="service" />
	<mx:Button label="service1" click="{service1.method(1)}" />
	<mx:Button label="service2" click="{service2.method(2)}" />
	<mx:Button label="service1 AND service2" click="{service1.method(1);service2.method(2)}" />
</mx:Application>

Problème 1
Il est impossible d'appeler une méthode d'un même RemoteObject (par exemple service1) plusieurs fois en parallèle.
Pour vous en rendre compte, lancez l'application et cliquez plusieurs fois sur le bouton service1, et regardez la console du serveur : le deuxième commence après la fin du premier, le troisième commence après la fin du deuxième, etc.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
method(1) starts
method(1) ends
method(1) starts
method(1) ends
method(1) starts
method(1) ends
EDIT: En fait c'est encore plus étrange que ça, la première fois on ne peut l'appeler qu'une fois, mais si on attend de recevoir le résultat, ensuite on peut faire jusqu'à 6 appels en parallèle... Mais si on appelle les 6 la première fois, ils seront tous séquentiels...

Workaround pour le problème 1
Pour éviter le problème, il suffit de faire 2 RemoteObjects : service1 et service2. Et là ça fonctionne : appuyez sur le bouton service1 puis sur le bouton service2, ils sont bien exécutés en parallèle sur le serveur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
method(1) starts
method(2) starts
method(1) ends
method(2) ends
Problème 2
Mais ce workaround ne fonctionne que s'ils sont appelés sur des évènements différents.
Essayez de cliquer une fois sur le bouton service1 AND service2 : les deux appels sont séquentiels.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
method(1) starts
method(1) ends
method(2) starts
method(2) ends
Comment éviter ces problèmes?

Merci d'avance.

®om