private void initialize()

in yoko-core/src/main/java/org/apache/yoko/orb/OBCORBA/ORB_impl.java [94:455]


    private void initialize(org.omg.CORBA.StringSeqHolder args, String orbId,
            String serverId, String serverInstance, int concModel,
            org.apache.yoko.orb.OB.CoreTraceLevels coreTraceLevels,
            java.util.Properties properties,
            org.apache.yoko.orb.OB.Logger logger, int nativeCs, int nativeWcs,
            int defaultWcs) {
        String javaVersion = getSystemProperty("java.version");
        float version = Float.parseFloat(javaVersion.substring(0, 3));
        if (version < 1.3f) {
            throw new org.omg.CORBA.INITIALIZE("Unsupported Java version: "
                    + version);
        }

        try (AutoLock writeLock = destroyLock_.getWriteLock()) {
            destroy_ = false;

            //
            // Create the ORBControl
            //
            orbControl_ = new org.apache.yoko.orb.OB.ORBControl();

            //
            // Create the OCI Plugin Manager
            //
            pluginManager_ = new org.apache.yoko.orb.OB.PluginManager(this);

            //
            // Create the ORBInstance object
            //
            //
            org.apache.yoko.orb.OB.InitialServiceManager initServiceManager = new org.apache.yoko.orb.OB.InitialServiceManager();
            org.apache.yoko.orb.OB.ClientManager clientManager = new org.apache.yoko.orb.OB.ClientManager(
                    concModel);
            org.apache.yoko.orb.OB.ObjectFactory objectFactory = new org.apache.yoko.orb.OB.ObjectFactory();
            org.apache.yoko.orb.OB.PolicyFactoryManager pfManager = new org.apache.yoko.orb.OB.PolicyFactoryManager();
            org.apache.yoko.orb.OB.PIManager piManager = new org.apache.yoko.orb.OB.PIManager(
                    this);
            org.apache.yoko.orb.OB.ValueFactoryManager valueFactoryManager = new org.apache.yoko.orb.OB.ValueFactoryManager();
            org.apache.yoko.orb.IOP.CodecFactory_impl codecFactory = new org.apache.yoko.orb.IOP.CodecFactory_impl();
            org.apache.yoko.orb.OBPortableServer.POAManagerFactory_impl pmFactory = new org.apache.yoko.orb.OBPortableServer.POAManagerFactory_impl();
            org.apache.yoko.orb.OB.MultiRequestSender multiRequestSender = new org.apache.yoko.orb.OB.MultiRequestSender();
            org.apache.yoko.orb.OB.DispatchStrategyFactory_impl dsf = new org.apache.yoko.orb.OB.DispatchStrategyFactory_impl();
            org.apache.yoko.orb.OB.BootManager_impl bootManager = new org.apache.yoko.orb.OB.BootManager_impl(this);
            org.apache.yoko.orb.OCI.ConFactoryRegistry conFactoryRegistry = new org.apache.yoko.orb.OCI.ConFactoryRegistry_impl();
            org.apache.yoko.orb.OCI.AccFactoryRegistry accFactoryRegistry = new org.apache.yoko.orb.OCI.AccFactoryRegistry_impl();
            org.apache.yoko.orb.OB.UnknownExceptionStrategy unknownExceptionStrategy = new org.apache.yoko.orb.OB.UnknownExceptionStrategy_impl(
                    this);
            org.apache.yoko.orb.OB.URLRegistry_impl urlRegistry = new org.apache.yoko.orb.OB.URLRegistry_impl();

            orbInstance_ = new org.apache.yoko.orb.OB.ORBInstance(this, orbId,
                    serverId, serverInstance, objectFactory, clientManager,
                    pfManager, piManager, initServiceManager,
                    valueFactoryManager, codecFactory, pmFactory,
                    multiRequestSender, properties, dsf, bootManager, logger,
                    coreTraceLevels, conFactoryRegistry, accFactoryRegistry,
                    unknownExceptionStrategy, urlRegistry, nativeCs, nativeWcs,
                    defaultWcs);

            objectFactory.setORBInstance(orbInstance_);
            initServiceManager.setORBInstance(orbInstance_);
            pmFactory._OB_setORBInstance(orbInstance_);
            piManager.setORBInstance(orbInstance_);
            codecFactory._OB_setORBInstance(orbInstance_);
            clientManager.setORBInstance(orbInstance_);
            dsf._OB_setORBInstance(orbInstance_);
            try {
                urlRegistry
                .add_scheme(new org.apache.yoko.orb.OB.IORURLScheme_impl(
                        orbInstance_));
                urlRegistry
                .add_scheme(new org.apache.yoko.orb.OB.FileURLScheme_impl(
                        false, urlRegistry));
                urlRegistry
                .add_scheme(new org.apache.yoko.orb.OB.FileURLScheme_impl(
                        true, urlRegistry));
                urlRegistry
                .add_scheme(new org.apache.yoko.orb.OB.CorbalocURLScheme_impl(
                        orbInstance_));
                urlRegistry
                .add_scheme(new org.apache.yoko.orb.OB.CorbanameURLScheme_impl(
                        this, urlRegistry));
            } catch (org.apache.yoko.orb.OB.URLRegistryPackage.SchemeAlreadyExists ex) {
                org.apache.yoko.orb.OB.Assert._OB_assert(ex);
            }

            //
            // Set the ORBInstance on the ORBControl
            //
            orbControl_.setORBInstance(orbInstance_);

            //
            // Initialize default policies
            //
            initializeDefaultPolicies();

            //
            // Create the DynamicAny::DynAnyFactory object
            //
            org.omg.DynamicAny.DynAnyFactory dynAnyFactory = new org.apache.yoko.orb.DynamicAny.DynAnyFactory_impl(
                    orbInstance_);

            //
            // Add initial references
            //
            try {
                initServiceManager.addInitialReference("POAManagerFactory",
                        pmFactory);
                initServiceManager.addInitialReference("DynAnyFactory",
                        dynAnyFactory);
                initServiceManager.addInitialReference("CodecFactory",
                        codecFactory);
                initServiceManager.addInitialReference(
                        "DispatchStrategyFactory", dsf);
                initServiceManager.addInitialReference("BootManager",
                        bootManager);
                initServiceManager.addInitialReference("RootPOA", null); // Dummy
                initServiceManager.addInitialReference("OCIConFactoryRegistry",
                        conFactoryRegistry);
                initServiceManager.addInitialReference("OCIAccFactoryRegistry",
                        accFactoryRegistry);
                initServiceManager.addInitialReference("URLRegistry",
                        urlRegistry);
            } catch (org.omg.CORBA.ORBPackage.InvalidName ex) {
                org.apache.yoko.orb.OB.Assert._OB_assert(ex);
            }

            //
            // Initialize the OCI client plug-ins
            //
            {
                String prop = properties.getProperty("yoko.oci.client");
                if (prop == null)
                    prop = "iiop";
                int pos = 0;
                while (pos != -1) {
                    java.util.Vector paramList = new java.util.Vector();
                    pos = org.apache.yoko.orb.OB.ParseParams.parse(prop, pos,
                            paramList);
                    String name = (String) paramList.firstElement();
                    paramList.removeElementAt(0);
                    String[] params = new String[paramList.size()];
                    paramList.copyInto(params);

                    org.apache.yoko.orb.OCI.Plugin plugin = pluginManager_
                            .initPlugin(name, args);
                    if (plugin == null) {
                        String err = "OCI client initialization failed "
                                + "for `" + name + "'";
                        throw new org.omg.CORBA.INITIALIZE(err);
                    } else
                        plugin.init_client(params);
                }
            }

            //
            // Initialize the OCI server plug-ins
            //
            {
                String prop = properties.getProperty("yoko.oci.server");
                if (prop == null)
                    prop = "iiop";
                int pos = 0;
                while (pos != -1) {
                    java.util.Vector paramList = new java.util.Vector();
                    pos = org.apache.yoko.orb.OB.ParseParams.parse(prop, pos,
                            paramList);
                    String name = (String) paramList.firstElement();
                    paramList.removeElementAt(0);
                    String[] params = new String[paramList.size()];
                    paramList.copyInto(params);

                    org.apache.yoko.orb.OCI.Plugin plugin = pluginManager_
                            .initPlugin(name, args);
                    if (plugin == null) {
                        String err = "OCI server initialization failed "
                                + "for `" + name + "'";
                        throw new org.omg.CORBA.INITIALIZE(err);
                    } else
                        plugin.init_server(params);
                }
            }

            //
            // Initialize Portable Interceptors - this must be done after
            // installing the OCI plug-ins to allow an ORBInitializer
            // or interceptor to make a remote invocation
            //

            //
            // Install IOR interceptor for code sets
            //
            try {
                piManager.addIORInterceptor(
                        new org.apache.yoko.orb.OB.CodeSetIORInterceptor_impl(
                                nativeCs, nativeWcs), false);
            } catch (org.omg.PortableInterceptor.ORBInitInfoPackage.DuplicateName ex) {
                org.apache.yoko.orb.OB.Assert._OB_assert(ex);
            }
            
            //
            // Install interceptors for Yoko Auxilliary Stream Format
            //
            try {
                piManager.addIORInterceptor(new YasfIORInterceptor(), true);
                piManager.addClientRequestInterceptor(new YasfClientInterceptor());
                piManager.addServerRequestInterceptor(new YasfServerInterceptor(piManager.allocateSlotId()));
            } catch (org.omg.PortableInterceptor.ORBInitInfoPackage.DuplicateName ex) {
                org.apache.yoko.orb.OB.Assert._OB_assert(ex);
            }
            //
            // Install interceptors for Custom Marshal Stream Format negotiation
            //
            try {
                piManager.addIORInterceptor(new CmsfIORInterceptor(), false);
                piManager.addClientRequestInterceptor(new CmsfClientInterceptor());
                piManager.addServerRequestInterceptor(new CmsfServerInterceptor(piManager.allocateSlotId()));
            } catch (org.omg.PortableInterceptor.ORBInitInfoPackage.DuplicateName ex) {
                org.apache.yoko.orb.OB.Assert._OB_assert(ex);
            }

            //
            // Install IOR interceptor for Message Routing
            //
            try {
                //
                // Get the router list from configuration data
                //
                org.omg.MessageRouting.RouterListHolder routerListHolder = new org.omg.MessageRouting.RouterListHolder();
                routerListHolder.value = new org.omg.MessageRouting.Router[0];

                org.apache.yoko.orb.OB.MessageRoutingUtil
                .getRouterListFromConfig(orbInstance_, routerListHolder);
                piManager
                .addIORInterceptor(
                        new org.apache.yoko.orb.OB.MessageRoutingIORInterceptor_impl(
                                routerListHolder.value), false);
            } catch (org.omg.PortableInterceptor.ORBInitInfoPackage.DuplicateName ex) {
                org.apache.yoko.orb.OB.Assert._OB_assert(ex);
            }

            //
            // Register the valuetype factory for ExceptionHolders
            //
            org.omg.CORBA.portable.ValueFactory exhFactory = new org.apache.yoko.orb.OBMessaging.ExceptionHolderFactory_impl();
            valueFactoryManager.registerValueFactory(
                    "IDL:omg.org/Messaging/ExceptionHolder:1.0", exhFactory);

            //
            // Register the appropriate router admin factory for each
            // router admin policy.
            //
            org.omg.CORBA.portable.ValueFactory routerAdminPolicyFactory = new org.apache.yoko.orb.OBMessageRouting.ImmediateSuspendPolicyFactory_impl();
            valueFactoryManager.registerValueFactory(
                    "IDL:omg.org/MessageRouting/ImmediateSuspendPolicy:1.0",
                    routerAdminPolicyFactory);

            routerAdminPolicyFactory = new org.apache.yoko.orb.OBMessageRouting.UnlimitedPingPolicyFactory_impl();
            valueFactoryManager.registerValueFactory(
                    "IDL:omg.org/MessageRouting/UnlimitedPingPolicy:1.0",
                    routerAdminPolicyFactory);

            routerAdminPolicyFactory = new org.apache.yoko.orb.OBMessageRouting.LimitedPingPolicyFactory_impl();
            valueFactoryManager.registerValueFactory(
                    "IDL:omg.org/MessageRouting/LimitedPingPolicy:1.0",
                    routerAdminPolicyFactory);

            routerAdminPolicyFactory = new org.apache.yoko.orb.OBMessageRouting.DecayPolicyFactory_impl();
            valueFactoryManager.registerValueFactory(
                    "IDL:omg.org/MessageRouting/DecayPolicy:1.0",
                    routerAdminPolicyFactory);

            routerAdminPolicyFactory = new org.apache.yoko.orb.OBMessageRouting.ResumePolicyFactory_impl();
            valueFactoryManager.registerValueFactory(
                    "IDL:omg.org/MessageRouting/ResumePolicy:1.0",
                    routerAdminPolicyFactory);

            //
            // Register the valuetype factory for the persistent POA Object
            // Reference Template and the IMR Object Reference Template.
            //
            org.omg.CORBA.portable.ValueFactory ortFactory = new org.apache.yoko.orb.OBPortableInterceptor.TransientORTFactory_impl(
                    orbInstance_);
            valueFactoryManager
            .registerValueFactory(
                    "IDL:orb.yoko.apache.org/OBPortableInterceptor/TransientORT:1.0",
                    ortFactory);

            ortFactory = new org.apache.yoko.orb.OBPortableInterceptor.PersistentORTFactory_impl(
                    orbInstance_);
            valueFactoryManager
            .registerValueFactory(
                    "IDL:orb.yoko.apache.org/OBPortableInterceptor/PersistentORT:1.0",
                    ortFactory);

            ortFactory = new org.apache.yoko.orb.OBPortableInterceptor.IMRORTFactory_impl();
            valueFactoryManager.registerValueFactory(
                    "IDL:orb.yoko.apache.org/OBPortableInterceptor/IMRORT:1.0",
                    ortFactory);

            //
            // Instantiate ORB initializers using the properties given
            // to ORB.init()
            //
            instantiateORBInitializers(properties, logger);

            //
            // Instantiate ORB initializers using the System properties.
            // Note that a SecurityException may be raised for applets.
            //
            try {
                java.util.Properties sysProperties = System.getProperties();
                instantiateORBInitializers(sysProperties, logger);
            } catch (SecurityException ex) {
                // Ignore
            }

            //
            // Call each of the ORB initializers. If there are no ORB
            // initializers it's not necessary to setup the PIManager
            // since no interceptors will be called.
            //
            if (!orbInitializers_.isEmpty()) {
                org.apache.yoko.orb.OBPortableInterceptor.ORBInitInfo_impl info = new org.apache.yoko.orb.OBPortableInterceptor.ORBInitInfo_impl(
                        this, args.value, orbId, piManager, initServiceManager,
                        codecFactory);

                java.util.Enumeration e = orbInitializers_.elements();
                while (e.hasMoreElements()) {
                    ((org.omg.PortableInterceptor.ORBInitializer) e
                            .nextElement()).pre_init(info);
                }

                // TODO: change state
                e = orbInitializers_.elements();
                while (e.hasMoreElements()) {
                    ((org.omg.PortableInterceptor.ORBInitializer) e
                            .nextElement()).post_init(info);
                }

                info._OB_destroy();
            }
            piManager.setupComplete();
        } catch (RuntimeException ex) {
            //
            // Here the same thing as ORB::destroy must be done since
            // although the ORB itself isn't fully initialized all of the
            // ORB components may be.
            //
            if (orbControl_ != null) {
                orbControl_.shutdownServerClient();
                orbControl_.destroy();
            }
            if (pluginManager_ != null) {
                pluginManager_.destroy();
            }
            if (orbInstance_ != null) {
                orbInstance_.destroy();
                orbInstance_ = null;
            }
            throw ex;
        }
    }