Bonjour,

je suis très loin de maitriser CORBA, et j'ai un petit problème.

J'ai 2 programmes : C et JAVA, le programme C initialise un ORB sur le port 1234 avec omniORB sans passer par omninames.

Le programme JAVA se connecte à C en connaissait son ip (ou nom de machine) et son port, 1234, à partir de là, on appelle une méthode 'abo', qui dans C stocke la référence du client JAVA.

A partir de là le programme C appelle régulièrement une méthode 'notification' du client JAVA. Dans les traces de omniORB, on voit qu'il utilise un port alloué dynamiquement, et dans mon exemple il utilise le port 3448 (de C vers JAVA donc).

Tout se passe assez bien.

omniORB: (0) 2010-08-31 08:37:56.608540: Invoke 'notification' on remote: key<............................RootPOA..............>
omniORB: (0) 2010-08-31 08:37:56.608631: sendChunk: to giop:tcp:192.9.10.218:3448 573 bytes
omniORB: (0) 2010-08-31 08:37:56.608706: Return 'notification' on remote: key<............................RootPOA..............>
Jusqu'à ce que le programme JAVA appelle une méthode 'ping' (qui ne transporte rien, et qui ne fait rien du tout) sur le port 3453 dont voici la trace omniORB :

omniORB: (5) 2010-08-31 08:39:14.808765: Dispatching remote call 'ping' to: key<ciorAdmin> (active)
omniORB: (5) 2010-08-31 08:39:14.808839: sendChunk: to giop:tcp:[::ffff:192.9.10.218]:3453 24 bytes
omniORB: (5) 2010-08-31 08:39:14.808857:
4749 4f50 0100 0001 0000 000c 0000 0000 GIOP............
0000 0005 0000 0000 ........
omniORB: (5) 2010-08-31 08:39:14.808910: Return from remote call 'ping' to: key<ciorAdmin> (active)
omniORB: (1) 2010-08-31 08:39:15.120103: SocketCollection idle. Sleeping.
omniORB: (5) 2010-08-31 08:39:15.298103: Error in network receive (start of message): giop:tcp:[::ffff:192.9.10.218]:3453
omniORB: (5) 2010-08-31 08:39:15.298148: throw giopStream::CommFailure from giopStream.cc:878(0,NO,COMM_FAILURE_UnMarshalArguments)
omniORB: (5) 2010-08-31 08:39:15.298258: Server connection refcount = 1
omniORB: (5) 2010-08-31 08:39:15.298378: Server connection refcount = 0
omniORB: (5) 2010-08-31 08:39:15.298395: Server close connection from giop:tcp:[::ffff:192.9.10.218]:3453
D'après ce que je comprend, l'appel à 'ping' fonctionne vu que j'ai le return ... (et que dans le programme JAVA tout semble bien se passer, mais je ne comprend pas d'où vient le problème qui est juste après.

De plus il semble que ce port (3453) soit utilisée juste après par omniORB pour faire les appels à 'notification' qui echouent, puis repasse sur le port 3448 et là les appels refonctionnent.

Je comprend pas très bien d'où peut venir ce problème.

Enfin, mon programme C casse tout, en effet il n'arrive plus à communiquer avec le client, et me retourne ce message d'erreur :

omniORB: (0) 2010-08-31 09:06:19.521184: Error in network send: giop:tcp:192.9.10.218:3448
omniORB: (0) 2010-08-31 09:06:19.521200: throw giopStream::CommFailure from giopStream.cc:1186(1,NO,COMM_FAILURE_MarshalArguments)
omniORB: (0) 2010-08-31 09:06:19.521366: Client connection refcount = 0
omniORB: (0) 2010-08-31 09:06:19.521386: Client close connection to giop:tcp:192.9.10.218:3448
omniORB: (0) 2010-08-31 09:06:19.521463: Invoke 'notification' on remote: key<............................RootPOA..............>
omniORB: (0) 2010-08-31 09:06:19.521496: Send codeset service context: (ISO-8859-1,UTF-16)
omniORB: (0) 2010-08-31 09:06:19.521563: Client attempt to connect to giop:tcp:192.9.10.218:3448
omniORB: (0) 2010-08-31 09:06:19.521757: Failed to connect (no peer name): 192.9.10.218
omniORB: (0) 2010-08-31 09:06:19.521801: Switch rope to use address giop:tcp:192.9.10.218:3448
omniORB: (0) 2010-08-31 09:06:19.521818: Unable to open new connection: giop:tcp:192.9.10.218:3448
omniORB: (0) 2010-08-31 09:06:19.521833: throw giopStream::CommFailure from giopStream.cc:1152(0,NO,TRANSIENT_ConnectFailed)
omniORB: (0) 2010-08-31 09:06:19.521935: throw TRANSIENT from omniObjRef.cc:813 (NO,TRANSIENT_ConnectFailed)
omniORB: (0) 2010-08-31 09:06:19.523954: omniRemoteIdentity deleted.
omniORB: (0) 2010-08-31 09:06:19.523989: ObjRef(IDL:CLA/Client:1.0) -- deleted.

A partir de là, ORB sur le port 1234 n'existe plus, il n'est plus possible de se connecter au programme C.


Avez vous un début de petite idée qui me permettrait de trouver d'où vient ce (ces ?) problème ??


Merci d'avance.