Précédent   Forum du club des développeurs et IT Pro > 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
 
Outils de la discussion
Publicité
'
Vieux 17/01/2012, 22h45   #1
stourni
Invité de passage
 
Stéphane Tournié
Inscription : novembre 2010
Messages : 1
Détails du profil
Informations personnelles :
Nom : Stéphane Tournié

Informations forums :
Inscription : novembre 2010
Messages : 1
Points : 0
Points : 0
Par défaut Problème PolicyError lors de la déclaration d'une RelativeRoundtripTimeoutPolicy

Bonjour à tous,

Pour un projet, j'ai mis en place une architecture CORBA "classique" où plusieurs clients utilisent les services fournis par les objets distribués d'un même serveur.

Afin de gérer la robustesse du système, j'aimerai trouver un moyen de définir un timeout lorsque des clients souhaitent souhaitent joindre un des objets distribués mais que celui-ci n'est pas accessible ou met trop de temps à répondre (câble débranché, réseau indisponible ou autre).

En parcourant la documentation disponible sur le web, j'ai trouvé une manière de faire qui me semble adaptée : l'utilisation de "timeout policies" et notamment de la RelativeRoundtripTimeoutPolicy (décrite à la page 270 de ce document).

Il est possible d'utiliser de telles politiques à différents niveaux (ORB, thread ou POA). De mon côté, je souhaite utiliser cette politique pour tous les appels de services, je pense donc que le plus simple est que je définisse la RelativeRoundtripTimeoutPolicy au moment de l'initialisation du bus ORB chez chaque client.

J'ai donc suivi à la lettre la suite d'instructions donnée dans le document pré-cité et initialisé un PolicyManager (tout cela est fait juste après l'initialisation de l'ORB) :

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
		
long relative_expiry = 4L * 10000000L; // 4 seconds
		try{
			Any relative_roundtrip_timeout_value = orbInstance.create_any();
			TimeTHelper.insert(
					relative_roundtrip_timeout_value,
					relative_expiry
			);
			Policy [] policies = new Policy[1];
			policies[0] = orbInstance.create_policy(
					RELATIVE_RT_TIMEOUT_POLICY_TYPE.value, 
					relative_roundtrip_timeout_value);

			PolicyManager policy_manager = PolicyManagerHelper.narrow(orbInstance.resolve_initial_references("ORBPolicyManager"));
			policy_manager.set_policy_overrides(
					policies, 
					SetOverrideType.ADD_OVERRIDE);
		}
		catch(PolicyError e){
			logger.error(e); 
		}
		catch(InvalidPolicies e){
			logger.error(e); 
		}
		catch (InvalidName e) {
			logger.error(e);
		} 
		catch(SystemException e){
			logger.error(e); 
		}
Malheureusement je recolte à chaque fois une PolicyError au niveau de la ligne où
Code :
orbInstance.create_policy(...)
est appelé.

Le code de l'erreur est de type BAD_POLICY_TYPE, ce qui signifie que "le type de la valeur demandée pour la politique n'est pas valide pour ce type de politique".
J'ai fait pas mal de recherche depuis une semaine mais je ne vois pas ce que je dois modifier.

Une âme charitable aurait-elle une idée pour m'aider?

Merci d'avance
stourni est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2012, 18h21   #2
CorbAddict
Membre éclairé
 
Homme Julien Enoch
Architecte technique
Inscription : septembre 2006
Messages : 219
Détails du profil
Informations personnelles :
Nom : Homme Julien Enoch
Âge : 37
Localisation : France

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

Informations forums :
Inscription : septembre 2006
Messages : 219
Points : 308
Points : 308
Bonjour,

navré si la réponse vient trop tard...

D'après la spec, le type TimeBase::TimeT est un "long long" (avec comme unité: 100 nanoseconds).
Le code correct devrait donc être:
Code :
1
2
3
4
Any relative_roundtrip_timeout_value = orbInstance.create_any();
relative_roundtrip_timeout_value.insert_longlong(relative_expiry);
...
CorbAddict est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 02h54.


 
 
 
 
Partenaires

Hébergement Web