| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package org.apache.yoko.orb.OBCORBA; |
| |
| import java.security.AccessController; |
| import java.util.Properties; |
| import java.util.concurrent.locks.ReadWriteLock; |
| import java.util.concurrent.locks.ReentrantReadWriteLock; |
| |
| import org.apache.yoko.orb.cmsf.CmsfClientInterceptor; |
| import org.apache.yoko.orb.cmsf.CmsfIORInterceptor; |
| import org.apache.yoko.orb.cmsf.CmsfServerInterceptor; |
| import org.apache.yoko.orb.util.AutoLock; |
| import org.apache.yoko.orb.util.AutoReadWriteLock; |
| import org.apache.yoko.orb.util.GetSystemPropertyAction; |
| import org.apache.yoko.util.osgi.ProviderLocator; |
| import org.omg.CORBA.OBJECT_NOT_EXIST; |
| |
| // This class must be public and not final |
| public class ORB_impl extends org.apache.yoko.orb.CORBA.ORBSingleton { |
| // |
| // All registered ORBInitializers |
| // |
| private java.util.Hashtable orbInitializers_ = new java.util.Hashtable(); |
| |
| // |
| // The ORB Control |
| // |
| private org.apache.yoko.orb.OB.ORBControl orbControl_; |
| |
| // |
| // Has the ORB been destroyed? |
| // |
| private final AutoReadWriteLock destroyLock_ = new AutoReadWriteLock(); |
| private boolean destroy_; |
| // |
| // The OCI Plugin Manager |
| // |
| private org.apache.yoko.orb.OB.PluginManager pluginManager_; |
| |
| // |
| // The ORBInstance object |
| // |
| private org.apache.yoko.orb.OB.ORBInstance orbInstance_; |
| |
| // |
| // Default set of policies |
| // |
| private java.util.Vector policies_ = new java.util.Vector(); |
| |
| // |
| // The ORB option filter |
| // |
| private static org.apache.yoko.orb.OB.OptionFilter orbOptionFilter_; |
| |
| // |
| // The OA option filter |
| // |
| private static org.apache.yoko.orb.OB.OptionFilter oaOptionFilter_; |
| |
| // |
| // Whether DII operations should raise system exceptions |
| // |
| private boolean raiseDIIExceptions_ = true; |
| |
| // ------------------------------------------------------------------ |
| // Private and protected member implementations |
| // ------------------------------------------------------------------ |
| |
| // |
| // This method does most of the ORB initialization that would |
| // normally be done in the constructor. However, the constructor |
| // cannot perform these steps because some of the initialization |
| // requires that the command-line options and properties have |
| // already been processed, which doesn't occur until set_parameters |
| // is called. |
| // |
| 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 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; |
| } |
| } |
| |
| protected void finalize() throws Throwable { |
| if (orbInstance_ != null) { |
| org.apache.yoko.orb.OB.Logger logger = orbInstance_.getLogger(); |
| logger.debug("ORB.destroy() was not called. " |
| + "This may result in resource leaks."); |
| } |
| |
| super.finalize(); |
| } |
| |
| 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); |
| } |
| |
| private void instantiateORBInitializers(java.util.Properties properties, |
| org.apache.yoko.orb.OB.Logger logger) { |
| final String magic = "org.omg.PortableInterceptor.ORBInitializerClass."; |
| |
| java.util.Enumeration e = properties.keys(); |
| while (e.hasMoreElements()) { |
| String key = (String) e.nextElement(); |
| if (key.startsWith(magic)) { |
| // |
| // The remaining portion of the key is the initializer |
| // class name. The value of the property is ignored. |
| // |
| String initClass = key.substring(magic.length()); |
| if (!orbInitializers_.containsKey(initClass)) { |
| try { |
| // get the appropriate class for the loading. |
| ClassLoader loader = Thread.currentThread().getContextClassLoader(); |
| org.omg.PortableInterceptor.ORBInitializer init = (org.omg.PortableInterceptor.ORBInitializer) |
| ProviderLocator.loadClass(initClass, getClass(), loader).newInstance(); |
| orbInitializers_.put(initClass, init); |
| } |
| // Exceptions have to be ignored here |
| catch (ClassNotFoundException ex) { |
| logger.warning("ORB.init: initializer class " |
| + initClass + " not found", ex); |
| } catch (InstantiationException ex) { |
| logger.warning("ORB.init: error occurred while " |
| + "instantiating initializer class " |
| + initClass, ex); |
| } catch (IllegalAccessException ex) { |
| logger.warning("ORB.init: cannot access " |
| + "initializer class " + initClass, ex); |
| } |
| } |
| } |
| } |
| } |
| |
| private static boolean loadConfigFile(String configFile, |
| java.util.Properties properties, |
| org.apache.yoko.orb.OB.Logger logger) { |
| // |
| // Load the contents of the configuration file |
| // |
| java.io.InputStream in = null; |
| |
| // |
| // Try to open URL connection first |
| // |
| try { |
| try { |
| java.net.URL url = new java.net.URL(configFile); |
| in = url.openStream(); |
| } catch (java.net.MalformedURLException e) { |
| // |
| // Try to open plain file, if `configFile' is not a |
| // URL specification |
| // |
| in = new java.io.FileInputStream(configFile); |
| } |
| } catch (java.io.IOException ex) { |
| logger.warning("ORB.init: could not load configuration " + "file " |
| + configFile, ex); |
| } |
| |
| if (in != null) { |
| try { |
| java.io.BufferedInputStream bin = new java.io.BufferedInputStream( |
| in); |
| properties.load(bin); |
| in.close(); |
| return true; |
| } catch (java.io.IOException ex) { |
| logger.warning("ORB.init: could not load configuration " |
| + "file " + configFile, ex); |
| } |
| } |
| |
| return false; |
| } |
| |
| private static String[] parseAppletParams(java.applet.Applet app) { |
| String[] args = new String[0]; |
| |
| // |
| // Check for parameter list |
| // |
| String paramList = app.getParameter("ORBparams"); |
| if (paramList != null) { |
| java.util.StringTokenizer p = new java.util.StringTokenizer( |
| paramList); |
| |
| args = new String[p.countTokens()]; |
| |
| int i = 0; |
| while (p.hasMoreTokens()) |
| args[i++] = p.nextToken(); |
| } |
| |
| return args; |
| } |
| |
| private void setParameters(org.omg.CORBA.StringSeqHolder args, |
| java.util.Properties properties, |
| org.apache.yoko.orb.OB.Logger logger) { |
| if (args.value == null) |
| args.value = new String[0]; |
| |
| // |
| // Initialize the Logger |
| // |
| if (logger == null) |
| logger = new org.apache.yoko.orb.OB.Logger_impl(); |
| |
| // |
| // Initialize the properties |
| // |
| if (properties == null) { |
| properties = new Properties(); |
| try { |
| properties.putAll(System.getProperties()); |
| } catch (SecurityException ex) { |
| // |
| // May be raised in an applet |
| // |
| // logger.warning("ORB.init: Unable to access System " + |
| // "properties"); |
| } |
| } |
| |
| args.value = ParseArgs(args.value, properties, logger); |
| |
| // |
| // Process each property |
| // |
| String orbId = ""; |
| String serverId = ""; |
| String serverInstance = ""; |
| int concModel = org.apache.yoko.orb.OB.Client.Blocking; |
| int nativeCs = org.apache.yoko.orb.OB.CodeSetDatabase.ISOLATIN1; |
| int nativeWcs = org.apache.yoko.orb.OB.CodeSetDatabase.UTF16; |
| int defaultWcs = 0; |
| |
| java.util.Enumeration keys = properties.keys(); |
| while (keys.hasMoreElements()) { |
| String key = (String) keys.nextElement(); |
| if (!key.startsWith("yoko.orb.")) |
| continue; |
| |
| String value = properties.getProperty(key); |
| org.apache.yoko.orb.OB.Assert._OB_assert(value != null); |
| |
| if (key.equals("yoko.orb.conc_model")) { |
| if (value.equals("threaded")) { |
| concModel = org.apache.yoko.orb.OB.Client.Threaded; |
| } |
| else { |
| logger.warning("ORB.init: unknown value for " |
| + "yoko.orb.conc_model: " + value); |
| } |
| } else if (key.startsWith("yoko.orb.trace.")) { |
| // Ignore -- handled in CoreTraceLevels |
| } else if (key.startsWith("yoko.orb.policy.")) { |
| // Ignore -- handled in initializeDefaultPolicies() |
| } else if (key.equals("yoko.orb.id")) { |
| orbId = value; |
| } else if (key.equals("yoko.orb.server_name")) { |
| // |
| // The server name must begin with an alpha-numeric |
| // character |
| // |
| if (value.length() == 0 |
| || !Character.isLetterOrDigit(value.charAt(0))) { |
| String err = "ORB.init: illegal value for " |
| + "yoko.orb.server_name: " + value; |
| logger.error(err); |
| throw new org.omg.CORBA.INITIALIZE(err); |
| } |
| serverId = value; |
| } else if (key.equals("yoko.orb.server_instance")) { |
| serverInstance = value; |
| } else if (key.equals("yoko.orb.raise_dii_exceptions")) { |
| if (value.equalsIgnoreCase("true")) |
| raiseDIIExceptions_ = true; |
| else |
| raiseDIIExceptions_ = false; |
| } else if (key.equals("yoko.orb.native_cs")) { |
| int csid = org.apache.yoko.orb.OB.CodeSetDatabase.instance() |
| .nameToId(value); |
| if (csid != 0 |
| && csid != org.apache.yoko.orb.OB.CodeSetDatabase.UTF8) |
| nativeCs = csid; |
| else { |
| String err = "ORB.init: unknown value for " |
| + "yoko.orb.native_cs: " + value; |
| logger.error(err); |
| throw new org.omg.CORBA.INITIALIZE(err); |
| } |
| } else if (key.equals("yoko.orb.native_wcs")) { |
| int csid = org.apache.yoko.orb.OB.CodeSetDatabase.instance() |
| .nameToId(value); |
| if (csid != 0 |
| && csid != org.apache.yoko.orb.OB.CodeSetDatabase.UTF8) |
| nativeWcs = csid; |
| else { |
| String err = "ORB.init: unknown value for " |
| + "yoko.orb.native_wcs: " + value; |
| logger.error(err); |
| throw new org.omg.CORBA.INITIALIZE(err); |
| } |
| } else if (key.equals("yoko.orb.default_wcs")) { |
| int csid = org.apache.yoko.orb.OB.CodeSetDatabase.instance() |
| .nameToId(value); |
| if (csid != 0 |
| && csid != org.apache.yoko.orb.OB.CodeSetDatabase.UTF8) |
| defaultWcs = csid; |
| else { |
| String err = "ORB.init: unknown value for " |
| + "yoko.orb.default_wcs: " + value; |
| logger.error(err); |
| throw new org.omg.CORBA.INITIALIZE(err); |
| } |
| } else if (key.equals("yoko.orb.extended_wchar")) { |
| if (!value.equals("true") && !value.equals("false")) { |
| String err = "ORB.init: unknown value for " |
| + "yoko.orb.extended_wchar: " + value; |
| logger.error(err); |
| throw new org.omg.CORBA.INITIALIZE(err); |
| } |
| } else if (key.equals("yoko.orb.default_init_ref")) { |
| if (value.length() == 0) |
| logger.warning("ORB.init: invalid value for " |
| + "yoko.orb.default_init_ref"); |
| } else if (key.equals("yoko.orb.server_timeout") |
| || key.equals("yoko.orb.server_shutdown_timeout")) { |
| // Used by GIOPServerWorker |
| } else if (key.equals("yoko.orb.client_timeout") |
| || key.equals("yoko.orb.client_shutdown_timeout")) { |
| // Used by GIOPClientWorker |
| } else if (key.startsWith("yoko.orb.service.")) { |
| // Ignore |
| } else if (key.startsWith("yoko.orb.oa.")) { |
| // Ignore |
| } else if (key.startsWith("yoko.orb.poamanager.")) { |
| // Ignore |
| } else if (key.equals("yoko.orb.noIMR")) { |
| // Ignore |
| } else if (key.equals("yoko.orb.use_type_code_cache")) { |
| if (!value.equals("true") && !value.equals("false")) { |
| String err = "ORB.init: unknown value for " |
| + "yoko.orb.use_type_code_cache: " + value; |
| logger.error(err); |
| throw new org.omg.CORBA.INITIALIZE(err); |
| } |
| } else if (key.equals("yoko.orb.giop.max_message_size")) { |
| try { |
| int max = Integer.valueOf(value).intValue(); |
| org.apache.yoko.orb.OB.GIOPIncomingMessage |
| .setMaxMessageSize(max); |
| org.apache.yoko.orb.OB.GIOPOutgoingMessage |
| .setMaxMessageSize(max); |
| } catch (NumberFormatException ex) { |
| String err = "ORB.init: invalid value for " |
| + "yoko.orb.giop.max_message_size: " + value; |
| logger.error(err, ex); |
| throw new org.omg.CORBA.INITIALIZE(err); |
| } |
| } else if (key.equals("yoko.orb.ami_workers")) { |
| // ignore |
| } else { |
| logger.warning("ORB.init: unknown property `" + key + "'"); |
| } |
| } |
| |
| // |
| // Parse the tracing levels from the properties |
| // |
| org.apache.yoko.orb.OB.CoreTraceLevels coreTraceLevels = new org.apache.yoko.orb.OB.CoreTraceLevels( |
| logger, properties); |
| |
| // |
| // Initialize the ORB state - this must be done after processing |
| // command-line options and properties |
| // |
| initialize(args, orbId, serverId, serverInstance, concModel, |
| coreTraceLevels, properties, logger, nativeCs, nativeWcs, |
| defaultWcs); |
| } |
| |
| // ------------------------------------------------------------------ |
| // Standard IDL to Java Mapping |
| // ------------------------------------------------------------------ |
| |
| public String[] list_initial_services() { |
| try (AutoLock readLock = destroyLock_.getReadLock()) { |
| if (destroy_) |
| throw new org.omg.CORBA.OBJECT_NOT_EXIST("ORB is destroyed"); |
| |
| return orbInstance_.getInitialServiceManager().listInitialServices(); |
| } |
| } |
| |
| public org.omg.CORBA.Object resolve_initial_references( |
| String identifier) throws org.omg.CORBA.ORBPackage.InvalidName { |
| try (AutoLock readLock = destroyLock_.getReadLock()) { |
| if (destroy_) { |
| throw new org.omg.CORBA.OBJECT_NOT_EXIST("ORB is destroyed"); |
| } |
| |
| org.apache.yoko.orb.OB.InitialServiceManager initServiceManager = orbInstance_ |
| .getInitialServiceManager(); |
| |
| org.omg.CORBA.Object obj = null; |
| |
| try { |
| obj = initServiceManager.resolveInitialReferences(identifier); |
| } catch (org.omg.CORBA.ORBPackage.InvalidName ex) { |
| // |
| // If the service is the RootPOA and it hasn't yet been |
| // initialized, create it. We could put in some automatic method |
| // here for late binding of objects at some later point. |
| // |
| if (identifier.equals("RootPOA")) { |
| orbControl_.initializeRootPOA(this); |
| return resolve_initial_references(identifier); |
| } else { |
| throw ex; |
| } |
| } |
| return obj; |
| } |
| } |
| |
| public void register_initial_reference(String name, |
| org.omg.CORBA.Object obj) |
| throws org.omg.CORBA.ORBPackage.InvalidName { |
| try (AutoLock readLock = destroyLock_.getReadLock()) { |
| |
| if (destroy_) |
| throw new org.omg.CORBA.OBJECT_NOT_EXIST("ORB is destroyed"); |
| |
| orbInstance_.getInitialServiceManager().addInitialReference(name, obj); |
| } |
| } |
| |
| public String object_to_string(org.omg.CORBA.Object p) { |
| try (AutoLock readLock = destroyLock_.getReadLock()) { |
| if (destroy_) |
| throw new org.omg.CORBA.OBJECT_NOT_EXIST("ORB is destroyed"); |
| |
| org.omg.IOP.IOR ior; |
| |
| if (p == null) { |
| ior = new org.omg.IOP.IOR("", new org.omg.IOP.TaggedProfile[0]); |
| } else { |
| if (p instanceof org.omg.CORBA.LocalObject) |
| throw new org.omg.CORBA.MARSHAL( |
| org.apache.yoko.orb.OB.MinorCodes |
| .describeMarshal(org.apache.yoko.orb.OB.MinorCodes.MinorLocalObject), |
| org.apache.yoko.orb.OB.MinorCodes.MinorLocalObject, |
| org.omg.CORBA.CompletionStatus.COMPLETED_NO); |
| |
| org.apache.yoko.orb.CORBA.Delegate delegate = (org.apache.yoko.orb.CORBA.Delegate) (((org.omg.CORBA.portable.ObjectImpl) p) |
| ._get_delegate()); |
| ior = delegate._OB_origIOR(); |
| } |
| |
| org.apache.yoko.orb.OCI.Buffer buf = new org.apache.yoko.orb.OCI.Buffer(); |
| org.apache.yoko.orb.CORBA.OutputStream out = new org.apache.yoko.orb.CORBA.OutputStream( |
| buf); |
| |
| out._OB_writeEndian(); |
| org.omg.IOP.IORHelper.write(out, ior); |
| |
| String str = org.apache.yoko.orb.OB.HexConverter.octetsToAscii(buf |
| .data(), buf.length()); |
| return "IOR:" + str; |
| } |
| } |
| |
| public org.omg.CORBA.Object string_to_object(String ior) { |
| try (AutoLock readLock = destroyLock_.getReadLock()) { |
| if (destroy_) |
| throw new org.omg.CORBA.OBJECT_NOT_EXIST("ORB is destroyed"); |
| |
| return orbInstance_.getObjectFactory().stringToObject(ior); |
| } |
| } |
| |
| public org.omg.CORBA.NVList create_list(int count) { |
| try (AutoLock readLock = destroyLock_.getReadLock()) { |
| |
| if (destroy_) |
| throw new org.omg.CORBA.OBJECT_NOT_EXIST("ORB is destroyed"); |
| |
| if (count < 0) |
| count = 0; |
| |
| return new org.apache.yoko.orb.CORBA.NVList(this, count); |
| } |
| } |
| |
| /** |
| * @deprecated Deprecated by CORBA 2.3. |
| */ |
| public org.omg.CORBA.NVList create_operation_list( |
| org.omg.CORBA.OperationDef oper) { |
| try (AutoLock readLock = destroyLock_.getReadLock()) { |
| |
| if (destroy_) |
| throw new org.omg.CORBA.OBJECT_NOT_EXIST("ORB is destroyed"); |
| |
| // |
| // Get operation description |
| // |
| org.omg.CORBA.ContainedPackage.Description d = oper.describe(); |
| org.omg.CORBA.OperationDescription desc = org.omg.CORBA.OperationDescriptionHelper |
| .extract(d.value); |
| |
| // |
| // Create list |
| // |
| org.apache.yoko.orb.CORBA.NVList list = new org.apache.yoko.orb.CORBA.NVList( |
| this); |
| for (int i = 0; i < desc.parameters.length; i++) { |
| org.omg.CORBA.ParameterDescription par = desc.parameters[i]; |
| |
| org.omg.CORBA.Any any = create_any(); |
| any.type(par.type); |
| |
| int flags = 0; |
| switch (par.mode.value()) { |
| case org.omg.CORBA.ParameterMode._PARAM_IN: |
| flags = org.omg.CORBA.ARG_IN.value; |
| break; |
| |
| case org.omg.CORBA.ParameterMode._PARAM_OUT: |
| flags = org.omg.CORBA.ARG_OUT.value; |
| break; |
| |
| case org.omg.CORBA.ParameterMode._PARAM_INOUT: |
| flags = org.omg.CORBA.ARG_INOUT.value; |
| break; |
| |
| default: |
| org.apache.yoko.orb.OB.Assert._OB_assert(false); |
| } |
| |
| list.add_value(par.name, any, flags); |
| } |
| |
| return list; |
| } |
| } |
| |
| public org.omg.CORBA.NVList create_operation_list( |
| org.omg.CORBA.Object oper) { |
| try (AutoLock readLock = destroyLock_.getReadLock()) { |
| |
| if (destroy_) |
| throw new org.omg.CORBA.OBJECT_NOT_EXIST("ORB is destroyed"); |
| |
| org.omg.CORBA.OperationDef def = org.omg.CORBA.OperationDefHelper |
| .narrow(oper); |
| return create_operation_list(def); |
| } |
| } |
| |
| public org.omg.CORBA.NamedValue create_named_value( |
| String name, org.omg.CORBA.Any value, int flags) { |
| try (AutoLock readLock = destroyLock_.getReadLock()) { |
| if (destroy_) |
| throw new org.omg.CORBA.OBJECT_NOT_EXIST("ORB is destroyed"); |
| |
| return new org.apache.yoko.orb.CORBA.NamedValue(name, value, flags); |
| } |
| } |
| |
| public org.omg.CORBA.ExceptionList create_exception_list() { |
| try (AutoLock readLock = destroyLock_.getReadLock()) { |
| if (destroy_) |
| throw new org.omg.CORBA.OBJECT_NOT_EXIST("ORB is destroyed"); |
| |
| return new org.apache.yoko.orb.CORBA.ExceptionList(); |
| } |
| } |
| |
| public org.omg.CORBA.ContextList create_context_list() { |
| try (AutoLock readLock = destroyLock_.getReadLock()) { |
| if (destroy_) |
| throw new org.omg.CORBA.OBJECT_NOT_EXIST("ORB is destroyed"); |
| |
| return new org.apache.yoko.orb.CORBA.ContextList(); |
| } |
| } |
| |
| public org.omg.CORBA.Context get_default_context() { |
| try (AutoLock readLock = destroyLock_.getReadLock()) { |
| if (destroy_) |
| throw new org.omg.CORBA.OBJECT_NOT_EXIST("ORB is destroyed"); |
| |
| return new org.apache.yoko.orb.CORBA.Context(this, ""); |
| } |
| } |
| |
| public org.omg.CORBA.Environment create_environment() { |
| try (AutoLock readLock = destroyLock_.getReadLock()) { |
| if (destroy_) |
| throw new org.omg.CORBA.OBJECT_NOT_EXIST("ORB is destroyed"); |
| |
| return new org.apache.yoko.orb.CORBA.Environment(); |
| } |
| } |
| |
| public void send_multiple_requests_oneway( |
| org.omg.CORBA.Request[] requests) { |
| try (AutoLock readLock = destroyLock_.getReadLock()) { |
| if (destroy_) |
| throw new org.omg.CORBA.OBJECT_NOT_EXIST("ORB is destroyed"); |
| |
| org.apache.yoko.orb.OB.MultiRequestSender multi = orbInstance_ |
| .getMultiRequestSender(); |
| multi.sendMultipleRequestsOneway(requests); |
| } |
| } |
| |
| public void send_multiple_requests_deferred( |
| org.omg.CORBA.Request[] requests) { |
| try (AutoLock readLock = destroyLock_.getReadLock()) { |
| if (destroy_) |
| throw new org.omg.CORBA.OBJECT_NOT_EXIST("ORB is destroyed"); |
| |
| org.apache.yoko.orb.OB.MultiRequestSender multi = orbInstance_ |
| .getMultiRequestSender(); |
| multi.sendMultipleRequestsDeferred(requests); |
| } |
| } |
| |
| public boolean poll_next_response() { |
| try (AutoLock readLock = destroyLock_.getReadLock()) { |
| if (destroy_) |
| throw new org.omg.CORBA.OBJECT_NOT_EXIST("ORB is destroyed"); |
| |
| org.apache.yoko.orb.OB.MultiRequestSender multi = orbInstance_ |
| .getMultiRequestSender(); |
| return multi.pollNextResponse(); |
| } |
| } |
| |
| public org.omg.CORBA.Request get_next_response() |
| throws org.omg.CORBA.WrongTransaction { |
| try (AutoLock readLock = destroyLock_.getReadLock()) { |
| if (destroy_) |
| throw new org.omg.CORBA.OBJECT_NOT_EXIST("ORB is destroyed"); |
| |
| org.apache.yoko.orb.OB.MultiRequestSender multi = orbInstance_ |
| .getMultiRequestSender(); |
| return multi.getNextResponse(); |
| } |
| } |
| |
| public boolean get_service_information(short service_type, |
| org.omg.CORBA.ServiceInformationHolder service_info) { |
| try (AutoLock readLock = destroyLock_.getReadLock()) { |
| if (destroy_) |
| throw new org.omg.CORBA.OBJECT_NOT_EXIST("ORB is destroyed"); |
| |
| service_info.value = new org.omg.CORBA.ServiceInformation(); |
| service_info.value.service_options = new int[0]; |
| service_info.value.service_details = new org.omg.CORBA.ServiceDetail[0]; |
| return false; |
| } |
| } |
| |
| public boolean work_pending() { |
| // |
| // Ensure that the ORB mutex is not locked during the call to |
| // ORBControl methods |
| // |
| try (AutoLock readLock = destroyLock_.getReadLock()) { |
| if (destroy_) |
| throw new org.omg.CORBA.OBJECT_NOT_EXIST("ORB is destroyed"); |
| |
| // |
| // Ensure that other threads get a chance to execute if |
| // work_pending() is being called in a tight loop. |
| // |
| Thread.yield(); |
| |
| return orbControl_.workPending(); |
| } |
| } |
| |
| public void perform_work() { |
| // |
| // Ensure that the ORB mutex is not locked during the call to |
| // ORBControl methods |
| // |
| try (AutoLock readLock = destroyLock_.getReadLock()) { |
| if (destroy_) |
| throw new org.omg.CORBA.OBJECT_NOT_EXIST("ORB is destroyed"); |
| orbControl_.performWork(); |
| } |
| } |
| |
| public void run() { |
| // |
| // Ensure that the ORB mutex is not locked during the call to |
| // ORBControl methods |
| // |
| try (AutoLock readLock = destroyLock_.getReadLock()) { |
| if (destroy_) |
| throw new OBJECT_NOT_EXIST("ORB is destroyed"); |
| orbControl_.run(); |
| } |
| } |
| |
| public void shutdown(boolean wait_for_completion) { |
| // |
| // Ensure that the ORB mutex is not locked during the call to |
| // ORBControl methods |
| // |
| try (AutoLock readLock = destroyLock_.getReadLock()) { |
| if (destroy_) |
| throw new OBJECT_NOT_EXIST("ORB is destroyed"); |
| orbControl_.shutdownServer(wait_for_completion); |
| } |
| } |
| |
| public void destroy() { |
| try (AutoLock writelock = destroyLock_.getWriteLock()) { |
| // |
| // From the specification: |
| // |
| // This operation destroys the ORB so that its resources can be |
| // reclaimed by the application. Any operation invoked on a |
| // destroyed ORB reference will raise the OBJECT_NOT_EXIST |
| // exception. Once an ORB has been destroyed, another call to |
| // ORB_init with the same ORBid will return a reference to a newly |
| // constructed ORB. |
| // |
| // If destroy is called on an ORB that has not been shut down, it |
| // will start the shut down process and block until the ORB has |
| // shut down before it destroys the ORB. If an application calls |
| // destroy in a thread that is currently servicing an invocation, |
| // the BAD_INV_ORDER system exception will be raised with the OMG |
| // minor code 3, since blocking would result in a deadlock. |
| // |
| // For maximum portability and to avoid resource leaks, an |
| // application should always call shutdown and destroy on all ORB |
| // instances before exiting. |
| // |
| |
| // |
| // Has the ORB been destroyed yet? |
| // |
| if (destroy_) |
| throw new org.omg.CORBA.OBJECT_NOT_EXIST("ORB is destroyed"); |
| |
| // |
| // Shutdown both the server & client side of the ORB |
| // |
| orbControl_.shutdownServerClient(); |
| |
| // |
| // Destroy the ORBControl. Don't set to _nil. |
| // |
| orbControl_.destroy(); |
| // orbControl_ = null; |
| |
| // |
| // Destroy the ORBInstance object |
| // |
| orbInstance_.destroy(); |
| orbInstance_ = null; |
| |
| // |
| // Destroy the OCI Plugin Manager. This must be done after all |
| // the OCI objects have been destroyed. |
| // |
| pluginManager_.destroy(); |
| pluginManager_ = null; |
| |
| // |
| // Mark the ORB as destroyed |
| // |
| destroy_ = true; |
| } |
| } |
| |
| public org.omg.CORBA.portable.OutputStream create_output_stream() { |
| try (AutoLock readLock = destroyLock_.getReadLock()) { |
| if (destroy_) |
| throw new org.omg.CORBA.OBJECT_NOT_EXIST("ORB is destroyed"); |
| |
| org.apache.yoko.orb.OCI.Buffer buf = new org.apache.yoko.orb.OCI.Buffer(); |
| org.apache.yoko.orb.CORBA.OutputStream out = new org.apache.yoko.orb.CORBA.OutputStream( |
| buf); |
| out._OB_ORBInstance(orbInstance_); |
| return out; |
| } |
| } |
| |
| public org.omg.CORBA.Object get_value_def(String repid) |
| throws org.omg.CORBA.BAD_PARAM { |
| try (AutoLock readLock = destroyLock_.getReadLock()) { |
| if (destroy_) |
| throw new org.omg.CORBA.OBJECT_NOT_EXIST("ORB is destroyed"); |
| |
| try { |
| org.omg.CORBA.Object obj = resolve_initial_references("InterfaceRepository"); |
| org.omg.CORBA.Repository repository = org.omg.CORBA.RepositoryHelper |
| .narrow(obj); |
| org.omg.CORBA.Contained cont = repository.lookup_id(repid); |
| if (cont != null) |
| return org.omg.CORBA.ValueDefHelper.narrow(cont); |
| } catch (org.omg.CORBA.ORBPackage.InvalidName ex) { |
| } |
| |
| throw new org.omg.CORBA.BAD_PARAM("Repository lookup failed for " |
| + repid); |
| } |
| } |
| |
| public void set_delegate(java.lang.Object wrapper) { |
| try (AutoLock readLock = destroyLock_.getReadLock()) { |
| if (destroy_) |
| throw new org.omg.CORBA.OBJECT_NOT_EXIST("ORB is destroyed"); |
| |
| try { |
| org.omg.PortableServer.Servant servant = (org.omg.PortableServer.Servant) wrapper; |
| servant |
| ._set_delegate(new org.apache.yoko.orb.PortableServer.Delegate( |
| this)); |
| } catch (ClassCastException ex) { |
| throw (org.omg.CORBA.BAD_PARAM)new org.omg.CORBA.BAD_PARAM( |
| "Argument is not of type " |
| + "org.omg.PortableServer." + "Servant").initCause(ex); |
| } |
| } |
| } |
| |
| protected void set_parameters(String[] args, java.util.Properties properties) { |
| setParameters(new org.omg.CORBA.StringSeqHolder(args), properties, null); |
| } |
| |
| protected void set_parameters(java.applet.Applet app, |
| java.util.Properties properties) { |
| String[] args = parseAppletParams(app); |
| setParameters(new org.omg.CORBA.StringSeqHolder(args), properties, null); |
| } |
| |
| // ------------------------------------------------------------------ |
| // Additional Yoko specific functions |
| // ------------------------------------------------------------------ |
| |
| public static org.omg.CORBA.ORB init(String[] args, |
| java.util.Properties props, org.apache.yoko.orb.OB.Logger logger) { |
| return init(new org.omg.CORBA.StringSeqHolder(args), props, logger); |
| } |
| |
| public static org.omg.CORBA.ORB init(org.omg.CORBA.StringSeqHolder args, |
| java.util.Properties props, org.apache.yoko.orb.OB.Logger logger) { |
| final String propName = "org.omg.CORBA.ORBClass"; |
| String orbClassName = null; |
| |
| ORB_impl orb; |
| |
| try { |
| orb = (ORB_impl) ProviderLocator.getService(propName, ORB_impl.class, Thread.currentThread().getContextClassLoader()); |
| if (orb == null) { |
| |
| if (props != null) |
| orbClassName = props.getProperty(propName); |
| |
| try { |
| if (orbClassName == null) |
| orbClassName = getSystemProperty(propName); |
| } catch (SecurityException ex) { |
| // ignore |
| } |
| |
| if (orbClassName == null) |
| orbClassName = "org.apache.yoko.orb.CORBA.ORB"; |
| orb = (ORB_impl) ProviderLocator.loadClass(orbClassName, ORB_impl.class, Thread.currentThread().getContextClassLoader()).newInstance(); |
| } |
| } catch (Throwable ex) { |
| throw (org.omg.CORBA.INITIALIZE)new org.omg.CORBA.INITIALIZE("Invalid ORB class: " |
| + orbClassName + '\n' + ex.getMessage()).initCause(ex); |
| } |
| |
| orb.setParameters(args, props, logger); |
| |
| return orb; |
| } |
| |
| public static org.omg.CORBA.ORB init(java.applet.Applet app, |
| java.util.Properties props, org.apache.yoko.orb.OB.Logger logger) { |
| String javaVersion = getSystemProperty("java.vm.version"); |
| float version = Float.parseFloat(javaVersion); |
| if (version < 1.5) { |
| throw new org.omg.CORBA.INITIALIZE("Unsupported Java version: " |
| + version); |
| } |
| |
| final String propName = "org.omg.CORBA.ORBClass"; |
| String orbClassName = null; |
| ORB_impl orb; |
| |
| try { |
| orb = (ORB_impl) ProviderLocator.getService(propName, ORB_impl.class, Thread.currentThread().getContextClassLoader()); |
| if (orb == null) { |
| |
| if (props != null) |
| orbClassName = props.getProperty(propName); |
| |
| try { |
| if (orbClassName == null) |
| orbClassName = getSystemProperty(propName); |
| } catch (SecurityException ex) { |
| // ignore |
| } |
| |
| if (orbClassName == null) |
| orbClassName = "org.apache.yoko.orb.CORBA.ORB"; |
| orb = (ORB_impl) ProviderLocator.loadClass(orbClassName, ORB_impl.class, Thread.currentThread().getContextClassLoader()).newInstance(); |
| } |
| } catch (Throwable ex) { |
| throw (org.omg.CORBA.INITIALIZE)new org.omg.CORBA.INITIALIZE("Invalid ORB class: " |
| + orbClassName + '\n' + ex.getMessage()).initCause(ex); |
| } |
| |
| String[] args = parseAppletParams(app); |
| orb.setParameters(new org.omg.CORBA.StringSeqHolder(args), props, |
| logger); |
| |
| return orb; |
| } |
| |
| static public String[] ParseArgs(String[] args, |
| java.util.Properties properties, |
| org.apache.yoko.orb.OB.Logger logger) { |
| if (logger == null) |
| logger = new org.apache.yoko.orb.OB.Logger_impl(); |
| |
| // |
| // If the yoko.config property is defined, and the yoko.config_loaded |
| // property is NOT defined, then load the configuration file into |
| // the given property set and define yoko.config_loaded so we |
| // don't load it again |
| // |
| String yokoConfig = properties.getProperty("yoko.config"); |
| String yokoConfigLoaded = properties.getProperty("yoko.config_loaded"); |
| if (yokoConfig != null && yokoConfigLoaded == null) { |
| if (loadConfigFile(yokoConfig, properties, logger)) |
| properties.put("yoko.config_loaded", "true"); |
| } |
| |
| // |
| // Create list with options supported by the ORB |
| // |
| if (orbOptionFilter_ == null) { |
| orbOptionFilter_ = new org.apache.yoko.orb.OB.OptionFilter( |
| "ORB.init", "-ORB"); |
| orbOptionFilter_.add("id", 1); |
| orbOptionFilter_.add("service", 2); |
| orbOptionFilter_.add("InitRef", 1); |
| orbOptionFilter_.add("DefaultInitRef", 1); |
| orbOptionFilter_.add("property", 1); |
| orbOptionFilter_.add("repository", 1); |
| orbOptionFilter_.add("naming", 1); |
| orbOptionFilter_.add("config", 1); |
| orbOptionFilter_.add("threaded", 0); |
| orbOptionFilter_.add("version", 0); |
| orbOptionFilter_.add("native_cs", 1); |
| orbOptionFilter_.add("native_wcs", 1); |
| orbOptionFilter_.add("default_wcs", 1); |
| orbOptionFilter_.add("ServerId", 1); |
| orbOptionFilter_.add("register", 1); |
| orbOptionFilter_.add("ListenEndpoints", 1); |
| orbOptionFilter_.add("NoProprietaryAction", 0); |
| orbOptionFilter_.add("server_instance", 1); |
| orbOptionFilter_.add("trace_connections", 1); |
| orbOptionFilter_.add("trace_requests", 1); |
| orbOptionFilter_.add("trace_requests_in", 1); |
| orbOptionFilter_.add("trace_requests_out", 1); |
| orbOptionFilter_.add("trace_retry", 1); |
| orbOptionFilter_.add("_AmiWorkers", 1); |
| } |
| |
| // |
| // Create list with options supported by the Object Adaptor |
| // |
| if (oaOptionFilter_ == null) { |
| oaOptionFilter_ = new org.apache.yoko.orb.OB.OptionFilter( |
| "ORB.init", "-OA"); |
| oaOptionFilter_.add("host", 1); // Deprecated |
| oaOptionFilter_.add("port", 1); // Deprecated |
| oaOptionFilter_.add("numeric", 0); // Deprecated |
| oaOptionFilter_.add("version", 1); |
| oaOptionFilter_.add("threaded", 0); |
| oaOptionFilter_.add("thread_per_client", 0); |
| oaOptionFilter_.add("thread_per_request", 0); |
| oaOptionFilter_.add("thread_pool", 1); |
| } |
| |
| String configFile = null; |
| |
| // |
| // First scan through the argument list looking for the config |
| // file option. We need to do this since command line arguments |
| // have precedence over the properties. |
| // |
| if (args != null) { |
| int i = 0; |
| while (i < args.length) { |
| if (args[i].equals("-ORBconfig")) { |
| if (i + 1 >= args.length) { |
| String msg = "ORB.init: argument expected " |
| + "for -ORBconfig"; |
| logger.error(msg); |
| throw new org.omg.CORBA.INITIALIZE(msg); |
| } |
| |
| configFile = args[i + 1]; |
| break; |
| } else |
| ++i; |
| } |
| } |
| |
| // |
| // Load the contents of the configuration file if present |
| // |
| if (configFile != null && configFile.length() > 0) { |
| loadConfigFile(configFile, properties, logger); |
| } |
| |
| // |
| // Set the default value of the ORB and OA concurrency models if |
| // they are not already set |
| // |
| if (properties.getProperty("yoko.orb.conc_model") == null) { |
| properties.put("yoko.orb.conc_model", "threaded"); |
| } |
| |
| if (properties.getProperty("yoko.orb.oa.conc_model") == null) { |
| properties.put("yoko.orb.oa.conc_model", "thread_per_request"); |
| } |
| |
| // |
| // set the default number of AMI workers if not already set |
| // |
| if (properties.getProperty("yoko.orb.ami_workers") == null) { |
| properties.put("yoko.orb.ami_workers", "1"); |
| } |
| |
| // |
| // Process each argument. Turn each argument into an appropriate |
| // property. |
| // |
| org.apache.yoko.orb.OB.OptionFilter.Option[] options = orbOptionFilter_ |
| .parse(logger, args); |
| for (int i = 0; i < options.length; i++) { |
| String name = options[i].name; |
| String[] value = options[i].value; |
| |
| if (name.equals("id")) { |
| properties.put("yoko.orb.id", value[0]); |
| } else if (name.equals("server_name")) { |
| properties.put("yoko.orb.server_name", value[0]); |
| } else if (name.equals("register")) { |
| properties.put("yoko.orb.server_name", value[0]); |
| // |
| // TODO: What do we do for Java? |
| // |
| // properties.put("yoko.orb.imr.register", value[0]); |
| } else if (name.equals("server_instance")) { |
| properties.put("yoko.orb.server_instance", value[0]); |
| } else if (name.equals("ListenEndpoints")) { |
| properties.put("yoko.orb.oa.endpoint", value[0]); |
| } else if (name.equals("NoProprietaryAction")) { |
| properties.put("yoko.orb.noIMR", "true"); |
| } else if (name.equals("service")) { |
| properties.put("yoko.orb.service." + value[0], value[1]); |
| } else if (name.equals("InitRef")) { |
| int n = value[0].indexOf('='); |
| if (n <= 0 || value[0].length() == n + 1) { |
| logger.error("ORB.init: invalid value for -ORBInitRef"); |
| throw new org.omg.CORBA.INITIALIZE(); |
| } |
| String svc = value[0].substring(0, n); |
| String url = value[0].substring(n + 1); |
| properties.put("yoko.orb.service." + svc, url); |
| } else if (name.equals("DefaultInitRef")) { |
| properties.put("yoko.orb.default_init_ref", value[0]); |
| } else if (name.equals("property")) { |
| int n = value[0].indexOf('='); |
| if (n <= 0 || value[0].length() == n + 1) { |
| logger.error("ORB.init: invalid value for -ORBproperty"); |
| throw new org.omg.CORBA.INITIALIZE(); |
| } |
| String propName = value[0].substring(0, n); |
| String propValue = value[0].substring(n + 1); |
| properties.put(propName, propValue); |
| } else if (name.equals("repository")) { |
| properties |
| .put("yoko.orb.service.InterfaceRepository", value[0]); |
| } else if (name.equals("naming")) { |
| properties.put("yoko.orb.service.NameService", value[0]); |
| } else if (name.equals("trace_connections") |
| || name.equals("trace_retry") |
| || name.equals("trace_requests") |
| || name.equals("trace_requests_in") |
| || name.equals("trace_requests_out")) { |
| String prop = "yoko.orb.trace."; |
| prop += name.substring(6); |
| properties.put(prop, value[0]); |
| } else if (name.equals("threaded")) { |
| properties.put("yoko.orb.conc_model", "threaded"); |
| } else if (name.equals("version")) { |
| logger.info(org.apache.yoko.orb.OB.Version.getVersion()); |
| } else if (name.equals("native_cs")) { |
| properties.put("yoko.orb.native_cs", value[0]); |
| } else if (name.equals("native_wcs")) { |
| properties.put("yoko.orb.native_wcs", value[0]); |
| } else if (name.equals("default_wcs")) { |
| properties.put("yoko.orb.default_wcs", value[0]); |
| } else if (name.equals("ServerId")) { |
| properties.put("yoko.orb.server_name", value[0]); |
| } else if (name.equals("_AmiWorkers")) { |
| properties.put("yoko.orb.ami_workers", value[0]); |
| } |
| } |
| |
| // |
| // Process each argument. Turn each argument into an appropriate |
| // property. |
| // |
| options = oaOptionFilter_.parse(logger, args); |
| for (int i = 0; i < options.length; i++) { |
| String name = options[i].name; |
| String[] value = options[i].value; |
| |
| if (name.equals("host")) // Deprecated - see IIOP plug-in |
| { |
| properties.put("yoko.iiop.host", value[0]); |
| } else if (name.equals("port")) // Deprecated - see IIOP plug-in |
| { |
| properties.put("yoko.iiop.port", value[0]); |
| } else if (name.equals("numeric")) // Deprecated - see IIOP plug-in |
| { |
| properties.put("yoko.iiop.numeric", "true"); |
| } else if (name.equals("version")) { |
| properties.put("yoko.orb.oa.version", value[0]); |
| } else if (name.equals("threaded")) { |
| properties.put("yoko.orb.oa.conc_model", "threaded"); |
| } else if (name.equals("thread_per_client")) { |
| properties.put("yoko.orb.oa.conc_model", "thread_per_client"); |
| } else if (name.equals("thread_per_request")) { |
| properties.put("yoko.orb.oa.conc_model", "thread_per_request"); |
| } else if (name.equals("thread_pool")) { |
| properties.put("yoko.orb.oa.conc_model", "thread_pool"); |
| properties.put("yoko.orb.oa.thread_pool", value[0]); |
| } |
| } |
| |
| args = orbOptionFilter_.filter(args); |
| args = oaOptionFilter_.filter(args); |
| return args; |
| } |
| |
| public org.omg.CORBA.Policy create_policy(int type, |
| org.omg.CORBA.Any any) throws org.omg.CORBA.PolicyError { |
| try (AutoLock readLock = destroyLock_.getReadLock()) { |
| if (destroy_) |
| throw new org.omg.CORBA.OBJECT_NOT_EXIST("ORB is destroyed"); |
| |
| return orbInstance_.getPolicyFactoryManager().createPolicy(type, any); |
| } |
| } |
| |
| public org.omg.CORBA.portable.ValueFactory register_value_factory( |
| String id, org.omg.CORBA.portable.ValueFactory factory) { |
| try (AutoLock readLock = destroyLock_.getReadLock()) { |
| if (destroy_) |
| throw new org.omg.CORBA.OBJECT_NOT_EXIST("ORB is destroyed"); |
| |
| org.apache.yoko.orb.OB.ValueFactoryManager valueFactoryManager = orbInstance_ |
| .getValueFactoryManager(); |
| return valueFactoryManager.registerValueFactory(id, factory); |
| } |
| } |
| |
| public void unregister_value_factory(String id) { |
| try (AutoLock readLock = destroyLock_.getReadLock()) { |
| if (destroy_) |
| throw new org.omg.CORBA.OBJECT_NOT_EXIST("ORB is destroyed"); |
| |
| org.apache.yoko.orb.OB.ValueFactoryManager valueFactoryManager = orbInstance_ |
| .getValueFactoryManager(); |
| valueFactoryManager.unregisterValueFactory(id); |
| } |
| } |
| |
| public org.omg.CORBA.portable.ValueFactory lookup_value_factory( |
| String id) { |
| try (AutoLock readLock = destroyLock_.getReadLock()) { |
| if (destroy_) |
| throw new org.omg.CORBA.OBJECT_NOT_EXIST("ORB is destroyed"); |
| |
| org.apache.yoko.orb.OB.ValueFactoryManager valueFactoryManager = orbInstance_ |
| .getValueFactoryManager(); |
| return valueFactoryManager.lookupValueFactory(id); |
| } |
| } |
| |
| // ------------------------------------------------------------------ |
| // Additional Yoko specific functions |
| // ------------------------------------------------------------------ |
| |
| public java.util.Properties properties() { |
| try (AutoLock readLock = destroyLock_.getReadLock()) { |
| if (destroy_) |
| throw new org.omg.CORBA.OBJECT_NOT_EXIST("ORB is destroyed"); |
| |
| return orbInstance_.getProperties(); |
| } |
| } |
| |
| public org.apache.yoko.orb.OB.Logger logger() { |
| try (AutoLock readLock = destroyLock_.getReadLock()) { |
| if (destroy_) |
| throw new org.omg.CORBA.OBJECT_NOT_EXIST("ORB is destroyed"); |
| |
| return orbInstance_.getLogger(); |
| } |
| } |
| |
| public org.apache.yoko.orb.OB.UnknownExceptionStrategy set_unknown_exception_strategy( |
| org.apache.yoko.orb.OB.UnknownExceptionStrategy strategy) { |
| try (AutoLock readLock = destroyLock_.getReadLock()) { |
| if (destroy_) |
| throw new org.omg.CORBA.OBJECT_NOT_EXIST("ORB is destroyed"); |
| |
| return orbInstance_.setUnknownExceptionStrategy(strategy); |
| } |
| } |
| |
| // ------------------------------------------------------------------ |
| // Yoko internal functions |
| // Application programs must not use these functions directly |
| // ------------------------------------------------------------------ |
| |
| public ORB_impl() { |
| // |
| // Most of the initialization is done in initialize() |
| // |
| } |
| |
| public boolean _OB_raiseDIIExceptions() { |
| return raiseDIIExceptions_; |
| } |
| |
| public org.apache.yoko.orb.OB.ORBInstance _OB_ORBInstance() { |
| return orbInstance_; |
| } |
| |
| |
| /** |
| * Simple utility for retrieving a system property |
| * using the AccessController. |
| * |
| * @param name The property name |
| * |
| * @return The property value. |
| */ |
| private static String getSystemProperty(String name) { |
| return (String)AccessController.doPrivileged(new GetSystemPropertyAction(name)); |
| } |
| } |