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) :
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ù
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
Partager