Précédent   Forum des professionnels en informatique > Autres langages > Autres langages > CORBA
CORBA Forum d'entraide et de discussion sur le développement distribué avec CORBA & les ORB
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/10/2011, 12h29   #1
Invité de passage
 
Homme
Inscription : septembre 2011
Messages : 3
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : septembre 2011
Messages : 3
Points : 0
Points : 0
Par défaut Redémarrage des services corba

Bonjour,

j'utilise l'ORB de sun et le jdk 6, et aimerais savoir comment faire pour que le client puisse invoquer des méthodes sur le même stub après un redémarrage du serveur.

Un scénario saura sûrement mieux expliquer la chose :

Soient deux interfaces Hello et Bye avec leurs implémentations respectives HelloImpl et ByeImpl.

Soit un serveur qui référence deux objets HelloImpl et ByeImpl.

Démarrage du serveur

Démarrage du client (les appels de méthodes marchent, c'est normal).

Arrêt du serveur

Les appels de méthodes sur les stubs du client ne marchent plus, c'est normal.

Redémarrage du serveur

Les appels de méthodes sur les stubs du client ne marchent plus, la connexion est refusée sur le nouveau port attribué au serveur.

Ma question est la suivant : Peut-on fixer (dans la configuration de l'ORB ou du serveur) le port d'écoute des appels de procédures ?

Je voudrais ne pas avoir à redemander de nouvelles instances de stubs côté client si la connexion échoue.

Est-ce possible ?

Si non, quelle serait la meilleure solution pour obtenir ce comportement ? (nous avons pensé à rajouter une méthode 'isUp()' à nos interfaces, qui précèdera chaque appel afin de déterminé l'état de la connexion et si il est nécéssaire d'obtenir un nouveau stub.)

Merci pour votre aide.

Pierre.
PierreBroco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/10/2011, 17h54   #2
Membre confirmé
 
Homme Julien Enoch
Architecte technique
Inscription : septembre 2006
Messages : 215
Détails du profil
Informations personnelles :
Nom : Homme Julien Enoch
Âge : 36
Localisation : France

Informations professionnelles :
Activité : Architecte technique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2006
Messages : 215
Points : 291
Points : 291
Bonjour,

Il faut effectivement fixer le port d'écoute du serveur avec l'option -ORBInitialPort <num_port>.

Mais il faut aussi utiliser pour le serveur un POA configuré avec les politiques LifespanPolicy = PERSISTENT et IdAssignmentPolicy = USER_ID
Ainsi l'IOR créé sera toujours le même, à chaque démarrage du serveur. Et le client pourra réutiliser son stub créé à partir de cet IOR, même si le serveur redémarre.

Voici un exemple de code pour configurer le POA:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// initialisation de l'ORB
org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args,null);

// récupération du rootPOA
org.omg.PortableServer.POA rootPOA = org.omg.PortableServer.POAHelper.narrow(orb.resolve_initial_references("RootPOA"));

// création des politiques du POA persistant
org.omg.CORBA.Policy[] policies = {
   rootPOA.create_lifespan_policy(org.omg.PortableServer.LifespanPolicyValue.PERSISTENT),
   rootPOA.create_id_assignment_policy(org.omg.PortableServer.IdAssignmentPolicyValue.USER_ID)
};

// création du POA persistent
org.omg.PortableServer.POA myPOA = rootPOA.create_POA( "persistentPOA", rootPOA.the_POAManager(), policies );

// création du servant de mon objet CORBA
// NOTE: ce servant doit ré-implémenter l'opération _default_POA() pour retourner myPOA.
HelloImpl helloServant = new HelloImpl(myPOA);

// création d'un identifiant unique pour l'objet CORBA
byte[] servantId = "Hello".getBytes();

// activation du servant avec l'ID sur myPOA
myPOA.activate_object_with_id(servantId, helloServant);

// activation du POA manager
rootPOA.the_POAManager().activate();

// récupération de l'objet CORBA pour donner au client
Hello h = myPOA.servant_to_reference(helloServant);
CorbAddict est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h29.


 
 
 
 
Partenaires

Hébergement Web