in yoko-core/src/main/java/org/apache/yoko/orb/OBCORBA/ORB_impl.java [467:803]
private void initializeDefaultPolicies() {
org.apache.yoko.orb.OB.Logger logger = orbInstance_.getLogger();
java.util.Properties properties = orbInstance_.getProperties();
java.util.Enumeration keys = properties.keys();
while (keys.hasMoreElements()) {
String key = (String) keys.nextElement();
if (!key.startsWith("yoko.orb.policy."))
continue;
String value = properties.getProperty(key);
if (key.equals("yoko.orb.policy.protocol")) {
java.util.StringTokenizer tokenizer = new java.util.StringTokenizer(
value, ", ");
String[] seq = new String[tokenizer.countTokens()];
int n = 0;
while (tokenizer.hasMoreTokens())
seq[n++] = tokenizer.nextToken();
if (seq.length == 0) {
String err = "ORB.init: invalid value for "
+ "yoko.orb.policy.protocol: `" + value + "'";
logger.error(err);
throw new org.omg.CORBA.INITIALIZE(err);
}
org.apache.yoko.orb.OB.ProtocolPolicy_impl p = new org.apache.yoko.orb.OB.ProtocolPolicy_impl(
seq);
policies_.addElement(p);
} else if (key.equals("yoko.orb.policy.connection_reuse")) {
boolean b;
if (value.equals("true"))
b = true;
else if (value.equals("false"))
b = false;
else {
String err = "ORB.init: invalid value for "
+ "yoko.orb.policy.connection_reuse: `" + value
+ "'";
logger.error(err);
throw new org.omg.CORBA.INITIALIZE(err);
}
org.apache.yoko.orb.OB.ConnectionReusePolicy_impl p = new org.apache.yoko.orb.OB.ConnectionReusePolicy_impl(
b);
policies_.addElement(p);
} else if (key.equals("yoko.orb.policy.zero_port")) {
boolean b;
if (value.equals("true"))
b = true;
else if (value.equals("false"))
b = false;
else {
String err = "ORB.init: invalid value for "
+ "yoko.orb.policy.zero_port: `" + value
+ "'";
logger.error(err);
throw new org.omg.CORBA.INITIALIZE(err);
}
org.apache.yoko.orb.OB.ZeroPortPolicy_impl p = new org.apache.yoko.orb.OB.ZeroPortPolicy_impl(
b);
policies_.addElement(p);
} else if (key.equals("yoko.orb.policy.retry")
|| key.equals("yoko.orb.policy.retry.max")
|| key.equals("yoko.orb.policy.retry.interval")
|| key.equals("yoko.orb.policy.retry.remote")) {
// Ignore here
} else if (key.equals("yoko.orb.policy.timeout")) {
int val = Integer.parseInt(value);
if (val != -1) {
org.apache.yoko.orb.OB.TimeoutPolicy_impl p = new org.apache.yoko.orb.OB.TimeoutPolicy_impl(
val);
policies_.addElement(p);
}
} else if (key.equals("yoko.orb.policy.location_transparency")) {
short val;
if (value.equals("strict"))
val = org.apache.yoko.orb.OB.LOCATION_TRANSPARENCY_STRICT.value;
else if (value.equals("relaxed"))
val = org.apache.yoko.orb.OB.LOCATION_TRANSPARENCY_RELAXED.value;
else {
String err = "ORB.init: invalid value for "
+ "yoko.orb.policy.location_transparency: `"
+ value + "'";
logger.error(err);
throw new org.omg.CORBA.INITIALIZE(err);
}
org.apache.yoko.orb.OB.LocationTransparencyPolicy_impl p = new org.apache.yoko.orb.OB.LocationTransparencyPolicy_impl(
val);
policies_.addElement(p);
} else if (key.equals("yoko.orb.policy.interceptor")) {
boolean b;
if (value.equals("true"))
b = true;
else if (value.equals("false"))
b = false;
else {
String err = "ORB.init: invalid value for "
+ "yoko.orb.policy.interceptor: `" + value + "'";
logger.error(err);
throw new org.omg.CORBA.INITIALIZE(err);
}
org.apache.yoko.orb.OB.InterceptorPolicy_impl p = new org.apache.yoko.orb.OB.InterceptorPolicy_impl(
b);
policies_.addElement(p);
} else if (key.equals("yoko.orb.policy.connect_timeout")) {
int val = Integer.parseInt(value);
if (val != -1) {
org.apache.yoko.orb.OB.ConnectTimeoutPolicy_impl p = new org.apache.yoko.orb.OB.ConnectTimeoutPolicy_impl(
val);
policies_.addElement(p);
}
} else if (key.equals("yoko.orb.policy.request_timeout")) {
int val = Integer.parseInt(value);
if (val != -1) {
org.apache.yoko.orb.OB.RequestTimeoutPolicy_impl p = new org.apache.yoko.orb.OB.RequestTimeoutPolicy_impl(
val);
policies_.addElement(p);
}
} else if (key.equals("yoko.orb.policy.locate_request")) {
boolean b;
if (value.equals("true"))
b = true;
else if (value.equals("false"))
b = false;
else {
String err = "ORB.init: invalid value for "
+ "yoko.orb.policy.locate_request: `" + value + "'";
logger.error(err);
throw new org.omg.CORBA.INITIALIZE(err);
}
org.apache.yoko.orb.OB.LocateRequestPolicy_impl p = new org.apache.yoko.orb.OB.LocateRequestPolicy_impl(
b);
policies_.addElement(p);
} else if (key.equals("yoko.orb.policy.rebind")) {
short val;
if (value.equals("transparent"))
val = org.omg.Messaging.TRANSPARENT.value;
else if (value.equals("no_rebind"))
val = org.omg.Messaging.NO_REBIND.value;
else if (value.equals("no_reconnect"))
val = org.omg.Messaging.NO_RECONNECT.value;
else {
String err = "ORB.init: invalid value for "
+ "yoko.orb.policy.rebind: `" + value + "'";
logger.error(err);
throw new org.omg.CORBA.INITIALIZE(err);
}
org.apache.yoko.orb.Messaging.RebindPolicy_impl p = new org.apache.yoko.orb.Messaging.RebindPolicy_impl(
val);
policies_.addElement(p);
} else if (key.equals("yoko.orb.policy.sync_scope")) {
short val;
if (value.equals("none"))
val = org.omg.Messaging.SYNC_NONE.value;
else if (value.equals("transport"))
val = org.omg.Messaging.SYNC_WITH_TRANSPORT.value;
else if (value.equals("server"))
val = org.omg.Messaging.SYNC_WITH_SERVER.value;
else if (value.equals("target"))
val = org.omg.Messaging.SYNC_WITH_TARGET.value;
else {
String err = "ORB.init: invalid value for "
+ "yoko.orb.policy.sync_scope: `" + value + "'";
logger.error(err);
throw new org.omg.CORBA.INITIALIZE(err);
}
org.apache.yoko.orb.Messaging.SyncScopePolicy_impl p = new org.apache.yoko.orb.Messaging.SyncScopePolicy_impl(
val);
policies_.addElement(p);
}
/*
* TODO - Add the config keys for the new Message routing policies
* here...
*
* else if(key.equals("yoko.orb.policy.max_hops")) {
* } else if(key.equals("yoko.orb.policy.queue_order")) {
* }
*/
else {
String err = "ORB.init: unknown property `" + key + "'";
logger.error(err);
throw new org.omg.CORBA.INITIALIZE(err);
}
}
//
// Set the default policies, if not already set
//
if (properties.getProperty("yoko.orb.policy.connection_reuse") == null) {
org.apache.yoko.orb.OB.ConnectionReusePolicy_impl p = new org.apache.yoko.orb.OB.ConnectionReusePolicy_impl(
true);
policies_.addElement(p);
}
//
// Set the retry policy
//
short retry_mode = org.apache.yoko.orb.OB.RETRY_STRICT.value;
int retry_interval = 0;
int max_retries = 1;
boolean retry_remote = false;
String value;
if ((value = properties.getProperty("yoko.orb.policy.retry")) != null) {
if (value.equals("never"))
retry_mode = org.apache.yoko.orb.OB.RETRY_NEVER.value;
else if (value.equals("strict"))
retry_mode = org.apache.yoko.orb.OB.RETRY_STRICT.value;
else if (value.equals("always"))
retry_mode = org.apache.yoko.orb.OB.RETRY_ALWAYS.value;
else {
String err = "ORB.init: invalid value for "
+ "yoko.orb.policy.retry: `" + value + "'";
logger.error(err);
throw new org.omg.CORBA.INITIALIZE(err);
}
}
if ((value = properties.getProperty("yoko.orb.policy.retry.interval")) != null) {
try {
retry_interval = Integer.parseInt(value);
} catch (NumberFormatException ex) {
String err = "ORB.init: invalid value for "
+ "yoko.orb.policy.retry.interval: `" + value + "'";
logger.error(err, ex);
throw new org.omg.CORBA.INITIALIZE(err);
}
}
if ((value = properties.getProperty("yoko.orb.policy.retry.max")) != null) {
try {
max_retries = Integer.parseInt(value);
} catch (NumberFormatException ex) {
String err = "ORB.init: invalid value for "
+ "yoko.orb.policy.retry.max: `" + value + "'";
logger.error(err, ex);
throw new org.omg.CORBA.INITIALIZE(err);
}
}
if ((value = properties.getProperty("yoko.orb.policy.retry.remote")) != null)
retry_remote = value.equals("true");
org.apache.yoko.orb.OB.RetryPolicy_impl p = new org.apache.yoko.orb.OB.RetryPolicy_impl(
retry_mode, retry_interval, max_retries, retry_remote);
policies_.addElement(p);
//
// Create the ORBPolicyManager
//
org.omg.CORBA.PolicyManager pm = new org.apache.yoko.orb.CORBA.ORBPolicyManager_impl(
policies_);
org.apache.yoko.orb.OB.InitialServiceManager initServiceManager = orbInstance_
.getInitialServiceManager();
try {
initServiceManager.addInitialReference("ORBPolicyManager", pm);
} catch (org.omg.CORBA.ORBPackage.InvalidName ex) {
org.apache.yoko.orb.OB.Assert._OB_assert(ex);
}
org.apache.yoko.orb.OB.ObjectFactory objectFactory = orbInstance_
.getObjectFactory();
objectFactory.setPolicyManager(pm);
//
// Register the default PolicyFactory policies for the ORB
//
org.apache.yoko.orb.OB.PolicyFactoryManager pfm = orbInstance_
.getPolicyFactoryManager();
org.omg.PortableInterceptor.PolicyFactory factory = new org.apache.yoko.orb.CORBA.ORBPolicyFactory_impl();
pfm.registerPolicyFactory(
org.apache.yoko.orb.OB.CONNECTION_REUSE_POLICY_ID.value,
factory, true);
pfm.registerPolicyFactory(
org.apache.yoko.orb.OB.ZERO_PORT_POLICY_ID.value,
factory, true);
pfm.registerPolicyFactory(
org.apache.yoko.orb.OB.PROTOCOL_POLICY_ID.value, factory, true);
pfm.registerPolicyFactory(org.apache.yoko.orb.OB.RETRY_POLICY_ID.value,
factory, true);
pfm.registerPolicyFactory(
org.apache.yoko.orb.OB.TIMEOUT_POLICY_ID.value, factory, true);
pfm.registerPolicyFactory(
org.apache.yoko.orb.OB.LOCATION_TRANSPARENCY_POLICY_ID.value,
factory, true);
pfm.registerPolicyFactory(org.omg.Messaging.REBIND_POLICY_TYPE.value,
factory, true);
pfm.registerPolicyFactory(
org.omg.Messaging.SYNC_SCOPE_POLICY_TYPE.value, factory, true);
pfm.registerPolicyFactory(
org.apache.yoko.orb.OB.INTERCEPTOR_POLICY_ID.value, factory,
true);
pfm.registerPolicyFactory(
org.apache.yoko.orb.OB.CONNECT_TIMEOUT_POLICY_ID.value,
factory, true);
pfm.registerPolicyFactory(
org.apache.yoko.orb.OB.REQUEST_TIMEOUT_POLICY_ID.value,
factory, true);
pfm.registerPolicyFactory(
org.omg.Messaging.REQUEST_START_TIME_POLICY_TYPE.value,
factory, true);
pfm.registerPolicyFactory(
org.omg.Messaging.REQUEST_END_TIME_POLICY_TYPE.value, factory,
true);
pfm.registerPolicyFactory(
org.omg.Messaging.REPLY_START_TIME_POLICY_TYPE.value, factory,
true);
pfm.registerPolicyFactory(
org.omg.Messaging.REPLY_END_TIME_POLICY_TYPE.value, factory,
true);
pfm.registerPolicyFactory(
org.omg.Messaging.RELATIVE_REQ_TIMEOUT_POLICY_TYPE.value,
factory, true);
pfm.registerPolicyFactory(
org.omg.Messaging.RELATIVE_RT_TIMEOUT_POLICY_TYPE.value,
factory, true);
pfm.registerPolicyFactory(
org.omg.BiDirPolicy.BIDIRECTIONAL_POLICY_TYPE.value, factory,
true);
pfm.registerPolicyFactory(
org.omg.Messaging.REQUEST_PRIORITY_POLICY_TYPE.value, factory,
true);
pfm.registerPolicyFactory(
org.omg.Messaging.REPLY_PRIORITY_POLICY_TYPE.value, factory,
true);
pfm.registerPolicyFactory(org.omg.Messaging.ROUTING_POLICY_TYPE.value,
factory, true);
pfm.registerPolicyFactory(org.omg.Messaging.MAX_HOPS_POLICY_TYPE.value,
factory, true);
pfm.registerPolicyFactory(
org.omg.Messaging.QUEUE_ORDER_POLICY_TYPE.value, factory, true);
}