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