private void initializeDefaultPolicies()

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);
    }