blob: 63bec8b1161e1b132daddcfe3866ff7440424491 [file] [log] [blame]
/*
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* Licensed Materials - Property of IBM
* RMI-IIOP v1.0
* Copyright IBM Corp. 1998 1999 All Rights Reserved
*
*/
package com.sun.corba.se.impl.orb;
import java.util.Collection;
import java.util.Properties;
import java.util.Hashtable;
import java.applet.Applet;
import java.net.URL;
import java.io.IOException ;
import java.util.logging.Logger ;
import org.omg.CORBA.Context;
import org.omg.CORBA.ContextList;
import org.omg.CORBA.Environment;
import org.omg.CORBA.ExceptionList;
import org.omg.CORBA.ORBPackage.InvalidName;
import org.omg.CORBA.NVList;
import org.omg.CORBA.TCKind;
import org.omg.CORBA.NamedValue;
import org.omg.CORBA.NO_IMPLEMENT;
import org.omg.CORBA.Object;
import org.omg.CORBA.Request;
import org.omg.CORBA.TypeCode;
import org.omg.CORBA.Any;
import org.omg.CORBA.StructMember;
import org.omg.CORBA.UnionMember;
import org.omg.CORBA.ValueMember;
import org.omg.CORBA.Policy;
import org.omg.CORBA.PolicyError;
import org.omg.CORBA.portable.OutputStream;
import org.omg.CORBA.portable.RemarshalException;
import com.sun.corba.se.pept.protocol.ClientInvocationInfo ;
import com.sun.corba.se.pept.transport.ContactInfo;
import com.sun.corba.se.pept.transport.ConnectionCache;
import com.sun.corba.se.pept.transport.Selector ;
import com.sun.corba.se.pept.transport.TransportManager;
import com.sun.corba.se.spi.legacy.connection.ORBSocketFactory;
import com.sun.corba.se.spi.orb.ORBData;
import com.sun.corba.se.spi.orb.Operation;
import com.sun.corba.se.spi.orb.ORB;
import com.sun.corba.se.spi.orb.ORBVersion;
import com.sun.corba.se.spi.orb.ORBVersionFactory;
import com.sun.corba.se.spi.oa.OAInvocationInfo;
import com.sun.corba.se.spi.oa.ObjectAdapter;
import com.sun.corba.se.spi.protocol.CorbaMessageMediator;
import com.sun.corba.se.spi.protocol.ClientDelegateFactory;
import com.sun.corba.se.spi.protocol.RequestDispatcherRegistry;
import com.sun.corba.se.spi.protocol.CorbaServerRequestDispatcher;
import com.sun.corba.se.spi.protocol.PIHandler;
import com.sun.corba.se.spi.resolver.Resolver;
import com.sun.corba.se.spi.resolver.LocalResolver;
import com.sun.corba.se.spi.ior.IOR;
import com.sun.corba.se.spi.ior.IdentifiableFactoryFinder;
import com.sun.corba.se.spi.ior.TaggedComponentFactoryFinder;
import com.sun.corba.se.spi.ior.ObjectKey;
import com.sun.corba.se.spi.ior.ObjectKeyFactory;
import com.sun.corba.se.spi.ior.iiop.GIOPVersion;
import com.sun.corba.se.pept.transport.ByteBufferPool ;
import com.sun.corba.se.spi.transport.CorbaContactInfoListFactory ;
import com.sun.corba.se.spi.transport.CorbaTransportManager;
import com.sun.corba.se.spi.legacy.connection.LegacyServerSocketManager;
import com.sun.corba.se.spi.orbutil.closure.Closure;
import com.sun.corba.se.spi.orbutil.threadpool.ThreadPoolManager;
import com.sun.corba.se.spi.logging.LogWrapperFactory;
import com.sun.corba.se.spi.logging.LogWrapperBase;
import com.sun.corba.se.spi.copyobject.CopierManager;
import com.sun.corba.se.spi.presentation.rmi.PresentationManager;
import com.sun.corba.se.spi.presentation.rmi.PresentationDefaults;
import com.sun.corba.se.spi.servicecontext.ServiceContextRegistry;
import com.sun.corba.se.spi.servicecontext.ServiceContexts;
import com.sun.corba.se.impl.corba.TypeCodeFactory;
import com.sun.corba.se.impl.corba.TypeCodeImpl;
import com.sun.corba.se.impl.corba.NVListImpl;
import com.sun.corba.se.impl.corba.NamedValueImpl;
import com.sun.corba.se.impl.corba.ExceptionListImpl;
import com.sun.corba.se.impl.corba.ContextListImpl;
import com.sun.corba.se.impl.corba.EnvironmentImpl;
import com.sun.corba.se.impl.corba.AnyImpl;
import com.sun.corba.se.impl.encoding.BufferManagerFactory;
import com.sun.corba.se.impl.encoding.CodeSetComponentInfo;
import com.sun.corba.se.impl.encoding.MarshalInputStream;
import com.sun.corba.se.impl.encoding.EncapsOutputStream;
import com.sun.corba.se.impl.encoding.MarshalOutputStream;
import com.sun.corba.se.impl.oa.poa.BadServerIdHandler;
import com.sun.corba.se.impl.orbutil.ORBConstants;
import com.sun.corba.se.spi.legacy.connection.LegacyServerSocketEndPointInfo;
/*
* The restricted singleton ORB implementation.
*
* For now, this class must implement just enough functionality to be
* used as a factory for immutable TypeCode instances.
*
* See ORBImpl.java for the real ORB implementation.
*/
public class ORBSingleton extends ORB
{
// This is used to support read_Object.
private ORB fullORB;
private static PresentationManager.StubFactoryFactory staticStubFactoryFactory =
PresentationDefaults.getStaticStubFactoryFactory() ;
public void set_parameters( Properties props ) {
}
protected void set_parameters(Applet app, Properties props) {
}
protected void set_parameters (String params[], Properties props) {
}
public OutputStream create_output_stream() {
return sun.corba.OutputStreamFactory.newEncapsOutputStream(this);
}
public TypeCode create_struct_tc(String id,
String name,
StructMember[] members)
{
return new TypeCodeImpl(this, TCKind._tk_struct, id, name, members);
}
public TypeCode create_union_tc(String id,
String name,
TypeCode discriminator_type,
UnionMember[] members)
{
return new TypeCodeImpl(this,
TCKind._tk_union,
id,
name,
discriminator_type,
members);
}
public TypeCode create_enum_tc(String id,
String name,
String[] members)
{
return new TypeCodeImpl(this, TCKind._tk_enum, id, name, members);
}
public TypeCode create_alias_tc(String id,
String name,
TypeCode original_type)
{
return new TypeCodeImpl(this, TCKind._tk_alias, id, name, original_type);
}
public TypeCode create_exception_tc(String id,
String name,
StructMember[] members)
{
return new TypeCodeImpl(this, TCKind._tk_except, id, name, members);
}
public TypeCode create_interface_tc(String id,
String name)
{
return new TypeCodeImpl(this, TCKind._tk_objref, id, name);
}
public TypeCode create_string_tc(int bound) {
return new TypeCodeImpl(this, TCKind._tk_string, bound);
}
public TypeCode create_wstring_tc(int bound) {
return new TypeCodeImpl(this, TCKind._tk_wstring, bound);
}
public TypeCode create_sequence_tc(int bound,
TypeCode element_type)
{
return new TypeCodeImpl(this, TCKind._tk_sequence, bound, element_type);
}
public TypeCode create_recursive_sequence_tc(int bound,
int offset)
{
return new TypeCodeImpl(this, TCKind._tk_sequence, bound, offset);
}
public TypeCode create_array_tc(int length,
TypeCode element_type)
{
return new TypeCodeImpl(this, TCKind._tk_array, length, element_type);
}
public org.omg.CORBA.TypeCode create_native_tc(String id,
String name)
{
return new TypeCodeImpl(this, TCKind._tk_native, id, name);
}
public org.omg.CORBA.TypeCode create_abstract_interface_tc(
String id,
String name)
{
return new TypeCodeImpl(this, TCKind._tk_abstract_interface, id, name);
}
public org.omg.CORBA.TypeCode create_fixed_tc(short digits, short scale)
{
return new TypeCodeImpl(this, TCKind._tk_fixed, digits, scale);
}
// orbos 98-01-18: Objects By Value -- begin
public org.omg.CORBA.TypeCode create_value_tc(String id,
String name,
short type_modifier,
TypeCode concrete_base,
ValueMember[] members)
{
return new TypeCodeImpl(this, TCKind._tk_value, id, name,
type_modifier, concrete_base, members);
}
public org.omg.CORBA.TypeCode create_recursive_tc(String id) {
return new TypeCodeImpl(this, id);
}
public org.omg.CORBA.TypeCode create_value_box_tc(String id,
String name,
TypeCode boxed_type)
{
return new TypeCodeImpl(this, TCKind._tk_value_box, id, name, boxed_type);
}
public TypeCode get_primitive_tc( TCKind tckind )
{
return get_primitive_tc( tckind.value() ) ;
}
public Any create_any() {
return new AnyImpl(this);
}
// TypeCodeFactory interface methods.
// Keeping track of type codes by repository id.
/*
* Not strictly needed for TypeCode factory duty but these seem
* harmless enough.
*/
public NVList create_list(int count) {
return new NVListImpl(this, count);
}
public org.omg.CORBA.NVList
create_operation_list(org.omg.CORBA.Object oper) {
throw wrapper.genericNoImpl() ;
}
public org.omg.CORBA.NamedValue
create_named_value(String s, Any any, int flags) {
return new NamedValueImpl(this, s, any, flags);
}
public org.omg.CORBA.ExceptionList create_exception_list() {
return new ExceptionListImpl();
}
public org.omg.CORBA.ContextList create_context_list() {
return new ContextListImpl(this);
}
public org.omg.CORBA.Context get_default_context()
{
throw wrapper.genericNoImpl() ;
}
public org.omg.CORBA.Environment create_environment()
{
return new EnvironmentImpl();
}
public org.omg.CORBA.Current get_current()
{
throw wrapper.genericNoImpl() ;
}
/*
* Things that aren't allowed.
*/
public String[] list_initial_services ()
{
throw wrapper.genericNoImpl() ;
}
public org.omg.CORBA.Object resolve_initial_references(String identifier)
throws InvalidName
{
throw wrapper.genericNoImpl() ;
}
public void register_initial_reference(
String id, org.omg.CORBA.Object obj ) throws InvalidName
{
throw wrapper.genericNoImpl() ;
}
public void send_multiple_requests_oneway(Request[] req) {
throw new SecurityException("ORBSingleton: access denied");
}
public void send_multiple_requests_deferred(Request[] req) {
throw new SecurityException("ORBSingleton: access denied");
}
public boolean poll_next_response() {
throw new SecurityException("ORBSingleton: access denied");
}
public org.omg.CORBA.Request get_next_response() {
throw new SecurityException("ORBSingleton: access denied");
}
public String object_to_string(org.omg.CORBA.Object obj) {
throw new SecurityException("ORBSingleton: access denied");
}
public org.omg.CORBA.Object string_to_object(String s) {
throw new SecurityException("ORBSingleton: access denied");
}
public java.rmi.Remote string_to_remote(String s)
throws java.rmi.RemoteException
{
throw new SecurityException("ORBSingleton: access denied");
}
public void connect(org.omg.CORBA.Object servant) {
throw new SecurityException("ORBSingleton: access denied");
}
public void disconnect(org.omg.CORBA.Object obj) {
throw new SecurityException("ORBSingleton: access denied");
}
public void run()
{
throw new SecurityException("ORBSingleton: access denied");
}
public void shutdown(boolean wait_for_completion)
{
throw new SecurityException("ORBSingleton: access denied");
}
protected void shutdownServants(boolean wait_for_completion) {
throw new SecurityException("ORBSingleton: access denied");
}
protected void destroyConnections() {
throw new SecurityException("ORBSingleton: access denied");
}
public void destroy() {
throw new SecurityException("ORBSingleton: access denied");
}
public boolean work_pending()
{
throw new SecurityException("ORBSingleton: access denied");
}
public void perform_work()
{
throw new SecurityException("ORBSingleton: access denied");
}
public org.omg.CORBA.portable.ValueFactory register_value_factory(String repositoryID,
org.omg.CORBA.portable.ValueFactory factory)
{
throw new SecurityException("ORBSingleton: access denied");
}
public void unregister_value_factory(String repositoryID)
{
throw new SecurityException("ORBSingleton: access denied");
}
public org.omg.CORBA.portable.ValueFactory lookup_value_factory(String repositoryID)
{
throw new SecurityException("ORBSingleton: access denied");
}
public TransportManager getTransportManager()
{
throw new SecurityException("ORBSingleton: access denied");
}
public CorbaTransportManager getCorbaTransportManager()
{
throw new SecurityException("ORBSingleton: access denied");
}
public LegacyServerSocketManager getLegacyServerSocketManager()
{
throw new SecurityException("ORBSingleton: access denied");
}
/*************************************************************************
These are methods from com.sun.corba.se.impl.se.core.ORB
************************************************************************/
private synchronized ORB getFullORB()
{
if (fullORB == null) {
Properties props = new Properties() ;
fullORB = new ORBImpl() ;
fullORB.set_parameters( props ) ;
}
return fullORB ;
}
public RequestDispatcherRegistry getRequestDispatcherRegistry()
{
// To enable read_Object.
return getFullORB().getRequestDispatcherRegistry();
}
/**
* Return the service context registry
*/
public ServiceContextRegistry getServiceContextRegistry()
{
throw new SecurityException("ORBSingleton: access denied");
}
/**
* Get the transient server ID
*/
public int getTransientServerId()
{
throw new SecurityException("ORBSingleton: access denied");
}
/**
* Return the bootstrap naming port specified in the ORBInitialPort param.
*/
public int getORBInitialPort()
{
throw new SecurityException("ORBSingleton: access denied");
}
/**
* Return the bootstrap naming host specified in the ORBInitialHost param.
*/
public String getORBInitialHost()
{
throw new SecurityException("ORBSingleton: access denied");
}
public String getORBServerHost()
{
throw new SecurityException("ORBSingleton: access denied");
}
public int getORBServerPort()
{
throw new SecurityException("ORBSingleton: access denied");
}
public CodeSetComponentInfo getCodeSetComponentInfo()
{
return new CodeSetComponentInfo();
}
public boolean isLocalHost( String host )
{
// To enable read_Object.
return false;
}
public boolean isLocalServerId( int subcontractId, int serverId )
{
// To enable read_Object.
return false;
}
/*
* Things from corba.ORB.
*/
public ORBVersion getORBVersion()
{
// Always use our latest ORB version (latest fixes, etc)
return ORBVersionFactory.getORBVersion();
}
public void setORBVersion(ORBVersion verObj)
{
throw new SecurityException("ORBSingleton: access denied");
}
public String getAppletHost()
{
throw new SecurityException("ORBSingleton: access denied");
}
public URL getAppletCodeBase()
{
throw new SecurityException("ORBSingleton: access denied");
}
public int getHighWaterMark(){
throw new SecurityException("ORBSingleton: access denied");
}
public int getLowWaterMark(){
throw new SecurityException("ORBSingleton: access denied");
}
public int getNumberToReclaim(){
throw new SecurityException("ORBSingleton: access denied");
}
public int getGIOPFragmentSize() {
return ORBConstants.GIOP_DEFAULT_BUFFER_SIZE;
}
public int getGIOPBuffMgrStrategy(GIOPVersion gv) {
return BufferManagerFactory.GROW;
}
public IOR getFVDCodeBaseIOR(){
throw new SecurityException("ORBSingleton: access denied");
}
public Policy create_policy( int type, Any val ) throws PolicyError
{
throw new NO_IMPLEMENT();
}
public LegacyServerSocketEndPointInfo getServerEndpoint()
{
return null ;
}
public void setPersistentServerId( int id )
{
}
public TypeCodeImpl getTypeCodeForClass( Class c )
{
return null ;
}
public void setTypeCodeForClass( Class c, TypeCodeImpl tcimpl )
{
}
public boolean alwaysSendCodeSetServiceContext()
{
return true ;
}
public boolean isDuringDispatch()
{
return false ;
}
public void notifyORB() { }
public PIHandler getPIHandler()
{
return null ;
}
public void checkShutdownState()
{
}
public void startingDispatch()
{
}
public void finishedDispatch()
{
}
public void registerInitialReference( String id, Closure closure )
{
}
public ORBData getORBData()
{
return getFullORB().getORBData() ;
}
public void setClientDelegateFactory( ClientDelegateFactory factory )
{
}
public ClientDelegateFactory getClientDelegateFactory()
{
return getFullORB().getClientDelegateFactory() ;
}
public void setCorbaContactInfoListFactory( CorbaContactInfoListFactory factory )
{
}
public CorbaContactInfoListFactory getCorbaContactInfoListFactory()
{
return getFullORB().getCorbaContactInfoListFactory() ;
}
public Operation getURLOperation()
{
return null ;
}
public void setINSDelegate( CorbaServerRequestDispatcher sdel )
{
}
public TaggedComponentFactoryFinder getTaggedComponentFactoryFinder()
{
return getFullORB().getTaggedComponentFactoryFinder() ;
}
public IdentifiableFactoryFinder getTaggedProfileFactoryFinder()
{
return getFullORB().getTaggedProfileFactoryFinder() ;
}
public IdentifiableFactoryFinder getTaggedProfileTemplateFactoryFinder()
{
return getFullORB().getTaggedProfileTemplateFactoryFinder() ;
}
public ObjectKeyFactory getObjectKeyFactory()
{
return getFullORB().getObjectKeyFactory() ;
}
public void setObjectKeyFactory( ObjectKeyFactory factory )
{
throw new SecurityException("ORBSingleton: access denied");
}
public void handleBadServerId( ObjectKey okey )
{
}
public OAInvocationInfo peekInvocationInfo()
{
return null ;
}
public void pushInvocationInfo( OAInvocationInfo info )
{
}
public OAInvocationInfo popInvocationInfo()
{
return null ;
}
public ClientInvocationInfo createOrIncrementInvocationInfo()
{
return null ;
}
public void releaseOrDecrementInvocationInfo()
{
}
public ClientInvocationInfo getInvocationInfo()
{
return null ;
}
public ConnectionCache getConnectionCache(ContactInfo contactInfo)
{
return null;
}
public void setResolver( Resolver resolver )
{
}
public Resolver getResolver()
{
return null ;
}
public void setLocalResolver( LocalResolver resolver )
{
}
public LocalResolver getLocalResolver()
{
return null ;
}
public void setURLOperation( Operation stringToObject )
{
}
// NOTE: REMOVE THIS METHOD ONCE WE HAVE A ORT BASED ORBD
public void setBadServerIdHandler( BadServerIdHandler handler )
{
}
// NOTE: REMOVE THIS METHOD ONCE WE HAVE A ORT BASED ORBD
public void initBadServerIdHandler()
{
}
public Selector getSelector(int x)
{
return null;
}
public void setThreadPoolManager(ThreadPoolManager mgr) {
}
public ThreadPoolManager getThreadPoolManager() {
return null;
}
public CopierManager getCopierManager() {
return null ;
}
}
// End of file.