ORBSingleton.java revision 608:7e06bf1dcb09
1/*
2 * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.  Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25/*
26 * Licensed Materials - Property of IBM
27 * RMI-IIOP v1.0
28 * Copyright IBM Corp. 1998 1999  All Rights Reserved
29 *
30 */
31
32package com.sun.corba.se.impl.orb;
33
34import java.util.Collection;
35import java.util.Properties;
36import java.util.Hashtable;
37
38import java.applet.Applet;
39
40import java.net.URL;
41
42import java.io.IOException ;
43
44import java.util.logging.Logger ;
45
46import org.omg.CORBA.Context;
47import org.omg.CORBA.ContextList;
48import org.omg.CORBA.Environment;
49import org.omg.CORBA.ExceptionList;
50import org.omg.CORBA.ORBPackage.InvalidName;
51import org.omg.CORBA.NVList;
52import org.omg.CORBA.TCKind;
53import org.omg.CORBA.NamedValue;
54import org.omg.CORBA.NO_IMPLEMENT;
55import org.omg.CORBA.Object;
56import org.omg.CORBA.Request;
57import org.omg.CORBA.TypeCode;
58import org.omg.CORBA.Any;
59import org.omg.CORBA.StructMember;
60import org.omg.CORBA.UnionMember;
61import org.omg.CORBA.ValueMember;
62import org.omg.CORBA.Policy;
63import org.omg.CORBA.PolicyError;
64
65import org.omg.CORBA.portable.OutputStream;
66import org.omg.CORBA.portable.RemarshalException;
67
68import com.sun.corba.se.pept.protocol.ClientInvocationInfo ;
69import com.sun.corba.se.pept.transport.ContactInfo;
70import com.sun.corba.se.pept.transport.ConnectionCache;
71import com.sun.corba.se.pept.transport.Selector ;
72import com.sun.corba.se.pept.transport.TransportManager;
73
74import com.sun.corba.se.spi.legacy.connection.ORBSocketFactory;
75import com.sun.corba.se.spi.orb.ORBData;
76import com.sun.corba.se.spi.orb.Operation;
77import com.sun.corba.se.spi.orb.ORB;
78import com.sun.corba.se.spi.orb.ORBVersion;
79import com.sun.corba.se.spi.orb.ORBVersionFactory;
80import com.sun.corba.se.spi.oa.OAInvocationInfo;
81import com.sun.corba.se.spi.oa.ObjectAdapter;
82import com.sun.corba.se.spi.protocol.CorbaMessageMediator;
83import com.sun.corba.se.spi.protocol.ClientDelegateFactory;
84import com.sun.corba.se.spi.protocol.RequestDispatcherRegistry;
85import com.sun.corba.se.spi.protocol.CorbaServerRequestDispatcher;
86import com.sun.corba.se.spi.protocol.PIHandler;
87import com.sun.corba.se.spi.resolver.Resolver;
88import com.sun.corba.se.spi.resolver.LocalResolver;
89import com.sun.corba.se.spi.ior.IOR;
90import com.sun.corba.se.spi.ior.IdentifiableFactoryFinder;
91import com.sun.corba.se.spi.ior.TaggedComponentFactoryFinder;
92import com.sun.corba.se.spi.ior.ObjectKey;
93import com.sun.corba.se.spi.ior.ObjectKeyFactory;
94import com.sun.corba.se.spi.ior.iiop.GIOPVersion;
95import com.sun.corba.se.pept.transport.ByteBufferPool ;
96import com.sun.corba.se.spi.transport.CorbaContactInfoListFactory ;
97import com.sun.corba.se.spi.transport.CorbaTransportManager;
98import com.sun.corba.se.spi.legacy.connection.LegacyServerSocketManager;
99import com.sun.corba.se.spi.orbutil.closure.Closure;
100import com.sun.corba.se.spi.orbutil.threadpool.ThreadPoolManager;
101import com.sun.corba.se.spi.logging.LogWrapperFactory;
102import com.sun.corba.se.spi.logging.LogWrapperBase;
103import com.sun.corba.se.spi.copyobject.CopierManager;
104import com.sun.corba.se.spi.presentation.rmi.PresentationManager;
105import com.sun.corba.se.spi.presentation.rmi.PresentationDefaults;
106
107import com.sun.corba.se.spi.servicecontext.ServiceContextRegistry;
108import com.sun.corba.se.spi.servicecontext.ServiceContexts;
109
110import com.sun.corba.se.impl.corba.TypeCodeFactory;
111import com.sun.corba.se.impl.corba.TypeCodeImpl;
112import com.sun.corba.se.impl.corba.NVListImpl;
113import com.sun.corba.se.impl.corba.NamedValueImpl;
114import com.sun.corba.se.impl.corba.ExceptionListImpl;
115import com.sun.corba.se.impl.corba.ContextListImpl;
116import com.sun.corba.se.impl.corba.EnvironmentImpl;
117import com.sun.corba.se.impl.corba.AnyImpl;
118import com.sun.corba.se.impl.encoding.BufferManagerFactory;
119import com.sun.corba.se.impl.encoding.CodeSetComponentInfo;
120import com.sun.corba.se.impl.encoding.MarshalInputStream;
121import com.sun.corba.se.impl.encoding.EncapsOutputStream;
122import com.sun.corba.se.impl.encoding.MarshalOutputStream;
123import com.sun.corba.se.impl.oa.poa.BadServerIdHandler;
124import com.sun.corba.se.impl.orbutil.ORBConstants;
125import com.sun.corba.se.spi.legacy.connection.LegacyServerSocketEndPointInfo;
126
127/*
128 * The restricted singleton ORB implementation.
129 *
130 * For now, this class must implement just enough functionality to be
131 * used as a factory for immutable TypeCode instances.
132 *
133 * See ORBImpl.java for the real ORB implementation.
134 */
135public class ORBSingleton extends ORB
136{
137    // This is used to support read_Object.
138    private ORB fullORB;
139    private static PresentationManager.StubFactoryFactory staticStubFactoryFactory =
140        PresentationDefaults.getStaticStubFactoryFactory() ;
141
142    public void set_parameters( Properties props ) {
143    }
144
145    protected void set_parameters(Applet app, Properties props) {
146    }
147
148    protected void set_parameters (String params[], Properties props) {
149    }
150
151    public OutputStream create_output_stream() {
152        return sun.corba.OutputStreamFactory.newEncapsOutputStream(this);
153    }
154
155    public TypeCode create_struct_tc(String id,
156                                     String name,
157                                     StructMember[] members)
158    {
159        return new TypeCodeImpl(this, TCKind._tk_struct, id, name, members);
160    }
161
162    public TypeCode create_union_tc(String id,
163                                    String name,
164                                    TypeCode discriminator_type,
165                                    UnionMember[] members)
166    {
167        return new TypeCodeImpl(this,
168                                TCKind._tk_union,
169                                id,
170                                name,
171                                discriminator_type,
172                                members);
173    }
174
175    public TypeCode create_enum_tc(String id,
176                                   String name,
177                                   String[] members)
178    {
179        return new TypeCodeImpl(this, TCKind._tk_enum, id, name, members);
180    }
181
182    public TypeCode create_alias_tc(String id,
183                                    String name,
184                                    TypeCode original_type)
185    {
186        return new TypeCodeImpl(this, TCKind._tk_alias, id, name, original_type);
187    }
188
189    public TypeCode create_exception_tc(String id,
190                                        String name,
191                                        StructMember[] members)
192    {
193        return new TypeCodeImpl(this, TCKind._tk_except, id, name, members);
194    }
195
196    public TypeCode create_interface_tc(String id,
197                                        String name)
198    {
199        return new TypeCodeImpl(this, TCKind._tk_objref, id, name);
200    }
201
202    public TypeCode create_string_tc(int bound) {
203        return new TypeCodeImpl(this, TCKind._tk_string, bound);
204    }
205
206    public TypeCode create_wstring_tc(int bound) {
207        return new TypeCodeImpl(this, TCKind._tk_wstring, bound);
208    }
209
210    public TypeCode create_sequence_tc(int bound,
211                                       TypeCode element_type)
212    {
213        return new TypeCodeImpl(this, TCKind._tk_sequence, bound, element_type);
214    }
215
216    public TypeCode create_recursive_sequence_tc(int bound,
217                                                 int offset)
218    {
219        return new TypeCodeImpl(this, TCKind._tk_sequence, bound, offset);
220    }
221
222    public TypeCode create_array_tc(int length,
223                                    TypeCode element_type)
224    {
225        return new TypeCodeImpl(this, TCKind._tk_array, length, element_type);
226    }
227
228    public org.omg.CORBA.TypeCode create_native_tc(String id,
229                                                   String name)
230    {
231        return new TypeCodeImpl(this, TCKind._tk_native, id, name);
232    }
233
234    public org.omg.CORBA.TypeCode create_abstract_interface_tc(
235                                                               String id,
236                                                               String name)
237    {
238        return new TypeCodeImpl(this, TCKind._tk_abstract_interface, id, name);
239    }
240
241    public org.omg.CORBA.TypeCode create_fixed_tc(short digits, short scale)
242    {
243        return new TypeCodeImpl(this, TCKind._tk_fixed, digits, scale);
244    }
245
246    // orbos 98-01-18: Objects By Value -- begin
247
248    public org.omg.CORBA.TypeCode create_value_tc(String id,
249                                                  String name,
250                                                  short type_modifier,
251                                                  TypeCode concrete_base,
252                                                  ValueMember[] members)
253    {
254        return new TypeCodeImpl(this, TCKind._tk_value, id, name,
255                                type_modifier, concrete_base, members);
256    }
257
258    public org.omg.CORBA.TypeCode create_recursive_tc(String id) {
259        return new TypeCodeImpl(this, id);
260    }
261
262    public org.omg.CORBA.TypeCode create_value_box_tc(String id,
263                                                      String name,
264                                                      TypeCode boxed_type)
265    {
266        return new TypeCodeImpl(this, TCKind._tk_value_box, id, name, boxed_type);
267    }
268
269    public TypeCode get_primitive_tc( TCKind tckind )
270    {
271        return get_primitive_tc( tckind.value() ) ;
272    }
273
274    public Any create_any() {
275        return new AnyImpl(this);
276    }
277
278    // TypeCodeFactory interface methods.
279    // Keeping track of type codes by repository id.
280    /*
281     * Not strictly needed for TypeCode factory duty but these seem
282     * harmless enough.
283     */
284
285    public NVList create_list(int count) {
286        return new NVListImpl(this, count);
287    }
288
289    public org.omg.CORBA.NVList
290        create_operation_list(org.omg.CORBA.Object oper) {
291        throw wrapper.genericNoImpl() ;
292    }
293
294    public org.omg.CORBA.NamedValue
295        create_named_value(String s, Any any, int flags) {
296        return new NamedValueImpl(this, s, any, flags);
297    }
298
299    public org.omg.CORBA.ExceptionList create_exception_list() {
300        return new ExceptionListImpl();
301    }
302
303    public org.omg.CORBA.ContextList create_context_list() {
304        return new ContextListImpl(this);
305    }
306
307    public org.omg.CORBA.Context get_default_context()
308    {
309        throw wrapper.genericNoImpl() ;
310    }
311
312    public org.omg.CORBA.Environment create_environment()
313    {
314        return new EnvironmentImpl();
315    }
316
317    public org.omg.CORBA.Current get_current()
318    {
319        throw wrapper.genericNoImpl() ;
320    }
321
322    /*
323     * Things that aren't allowed.
324     */
325
326    public String[] list_initial_services ()
327    {
328        throw wrapper.genericNoImpl() ;
329    }
330
331    public org.omg.CORBA.Object resolve_initial_references(String identifier)
332        throws InvalidName
333    {
334        throw wrapper.genericNoImpl() ;
335    }
336
337    public void register_initial_reference(
338        String id, org.omg.CORBA.Object obj ) throws InvalidName
339    {
340        throw wrapper.genericNoImpl() ;
341    }
342
343    public void send_multiple_requests_oneway(Request[] req) {
344        throw new SecurityException("ORBSingleton: access denied");
345    }
346
347    public void send_multiple_requests_deferred(Request[] req) {
348        throw new SecurityException("ORBSingleton: access denied");
349    }
350
351    public boolean poll_next_response() {
352        throw new SecurityException("ORBSingleton: access denied");
353    }
354
355    public org.omg.CORBA.Request get_next_response() {
356        throw new SecurityException("ORBSingleton: access denied");
357    }
358
359    public String object_to_string(org.omg.CORBA.Object obj) {
360        throw new SecurityException("ORBSingleton: access denied");
361    }
362
363    public org.omg.CORBA.Object string_to_object(String s) {
364        throw new SecurityException("ORBSingleton: access denied");
365    }
366
367    public java.rmi.Remote string_to_remote(String s)
368        throws java.rmi.RemoteException
369    {
370        throw new SecurityException("ORBSingleton: access denied");
371    }
372
373    public void connect(org.omg.CORBA.Object servant) {
374        throw new SecurityException("ORBSingleton: access denied");
375    }
376
377    public void disconnect(org.omg.CORBA.Object obj) {
378        throw new SecurityException("ORBSingleton: access denied");
379    }
380
381    public void run()
382    {
383        throw new SecurityException("ORBSingleton: access denied");
384    }
385
386    public void shutdown(boolean wait_for_completion)
387    {
388        throw new SecurityException("ORBSingleton: access denied");
389    }
390
391    protected void shutdownServants(boolean wait_for_completion) {
392        throw new SecurityException("ORBSingleton: access denied");
393    }
394
395    protected void destroyConnections() {
396        throw new SecurityException("ORBSingleton: access denied");
397    }
398
399    public void destroy() {
400        throw new SecurityException("ORBSingleton: access denied");
401    }
402
403    public boolean work_pending()
404    {
405        throw new SecurityException("ORBSingleton: access denied");
406    }
407
408    public void perform_work()
409    {
410        throw new SecurityException("ORBSingleton: access denied");
411    }
412
413    public org.omg.CORBA.portable.ValueFactory register_value_factory(String repositoryID,
414                                org.omg.CORBA.portable.ValueFactory factory)
415    {
416        throw new SecurityException("ORBSingleton: access denied");
417    }
418
419    public void unregister_value_factory(String repositoryID)
420    {
421        throw new SecurityException("ORBSingleton: access denied");
422    }
423
424    public org.omg.CORBA.portable.ValueFactory lookup_value_factory(String repositoryID)
425    {
426        throw new SecurityException("ORBSingleton: access denied");
427    }
428
429    public TransportManager getTransportManager()
430    {
431        throw new SecurityException("ORBSingleton: access denied");
432    }
433
434    public CorbaTransportManager getCorbaTransportManager()
435    {
436        throw new SecurityException("ORBSingleton: access denied");
437    }
438
439    public LegacyServerSocketManager getLegacyServerSocketManager()
440    {
441        throw new SecurityException("ORBSingleton: access denied");
442    }
443
444/*************************************************************************
445    These are methods from com.sun.corba.se.impl.se.core.ORB
446 ************************************************************************/
447
448    private synchronized ORB getFullORB()
449    {
450        if (fullORB == null) {
451            Properties props = new Properties() ;
452            fullORB = new ORBImpl() ;
453            fullORB.set_parameters( props ) ;
454        }
455
456        return fullORB ;
457    }
458
459    public RequestDispatcherRegistry getRequestDispatcherRegistry()
460    {
461        // To enable read_Object.
462
463        return getFullORB().getRequestDispatcherRegistry();
464    }
465
466    /**
467     * Return the service context registry
468     */
469    public ServiceContextRegistry getServiceContextRegistry()
470    {
471        throw new SecurityException("ORBSingleton: access denied");
472    }
473
474    /**
475     * Get the transient server ID
476     */
477    public int getTransientServerId()
478    {
479        throw new SecurityException("ORBSingleton: access denied");
480    }
481
482    /**
483     * Return the bootstrap naming port specified in the ORBInitialPort param.
484     */
485    public int getORBInitialPort()
486    {
487        throw new SecurityException("ORBSingleton: access denied");
488    }
489
490    /**
491     * Return the bootstrap naming host specified in the ORBInitialHost param.
492     */
493    public String getORBInitialHost()
494    {
495        throw new SecurityException("ORBSingleton: access denied");
496    }
497
498    public String getORBServerHost()
499    {
500        throw new SecurityException("ORBSingleton: access denied");
501    }
502
503    public int getORBServerPort()
504    {
505        throw new SecurityException("ORBSingleton: access denied");
506    }
507
508    public CodeSetComponentInfo getCodeSetComponentInfo()
509    {
510            return new CodeSetComponentInfo();
511    }
512
513    public boolean isLocalHost( String host )
514    {
515        // To enable read_Object.
516        return false;
517    }
518
519    public boolean isLocalServerId( int subcontractId, int serverId )
520    {
521        // To enable read_Object.
522        return false;
523    }
524
525    /*
526     * Things from corba.ORB.
527     */
528
529    public ORBVersion getORBVersion()
530    {
531        // Always use our latest ORB version (latest fixes, etc)
532        return ORBVersionFactory.getORBVersion();
533    }
534
535    public void setORBVersion(ORBVersion verObj)
536    {
537        throw new SecurityException("ORBSingleton: access denied");
538    }
539
540    public String getAppletHost()
541    {
542        throw new SecurityException("ORBSingleton: access denied");
543    }
544
545    public URL getAppletCodeBase()
546    {
547        throw new SecurityException("ORBSingleton: access denied");
548    }
549
550    public int getHighWaterMark(){
551        throw new SecurityException("ORBSingleton: access denied");
552    }
553
554    public int getLowWaterMark(){
555        throw new SecurityException("ORBSingleton: access denied");
556    }
557
558    public int getNumberToReclaim(){
559        throw new SecurityException("ORBSingleton: access denied");
560    }
561
562    public int getGIOPFragmentSize() {
563        return ORBConstants.GIOP_DEFAULT_BUFFER_SIZE;
564    }
565
566    public int getGIOPBuffMgrStrategy(GIOPVersion gv) {
567        return BufferManagerFactory.GROW;
568    }
569
570    public IOR getFVDCodeBaseIOR(){
571        throw new SecurityException("ORBSingleton: access denied");
572    }
573
574    public Policy create_policy( int type, Any val ) throws PolicyError
575    {
576        throw new NO_IMPLEMENT();
577    }
578
579    public LegacyServerSocketEndPointInfo getServerEndpoint()
580    {
581        return null ;
582    }
583
584    public void setPersistentServerId( int id )
585    {
586    }
587
588    public TypeCodeImpl getTypeCodeForClass( Class c )
589    {
590        return null ;
591    }
592
593    public void setTypeCodeForClass( Class c, TypeCodeImpl tcimpl )
594    {
595    }
596
597    public boolean alwaysSendCodeSetServiceContext()
598    {
599        return true ;
600    }
601
602    public boolean isDuringDispatch()
603    {
604        return false ;
605    }
606
607    public void notifyORB() { }
608
609    public PIHandler getPIHandler()
610    {
611        return null ;
612    }
613
614    public void checkShutdownState()
615    {
616    }
617
618    public void startingDispatch()
619    {
620    }
621
622    public void finishedDispatch()
623    {
624    }
625
626    public void registerInitialReference( String id, Closure closure )
627    {
628    }
629
630    public ORBData getORBData()
631    {
632        return getFullORB().getORBData() ;
633    }
634
635    public void setClientDelegateFactory( ClientDelegateFactory factory )
636    {
637    }
638
639    public ClientDelegateFactory getClientDelegateFactory()
640    {
641        return getFullORB().getClientDelegateFactory() ;
642    }
643
644    public void setCorbaContactInfoListFactory( CorbaContactInfoListFactory factory )
645    {
646    }
647
648    public CorbaContactInfoListFactory getCorbaContactInfoListFactory()
649    {
650        return getFullORB().getCorbaContactInfoListFactory() ;
651    }
652
653    public Operation getURLOperation()
654    {
655        return null ;
656    }
657
658    public void setINSDelegate( CorbaServerRequestDispatcher sdel )
659    {
660    }
661
662    public TaggedComponentFactoryFinder getTaggedComponentFactoryFinder()
663    {
664        return getFullORB().getTaggedComponentFactoryFinder() ;
665    }
666
667    public IdentifiableFactoryFinder getTaggedProfileFactoryFinder()
668    {
669        return getFullORB().getTaggedProfileFactoryFinder() ;
670    }
671
672    public IdentifiableFactoryFinder getTaggedProfileTemplateFactoryFinder()
673    {
674        return getFullORB().getTaggedProfileTemplateFactoryFinder() ;
675    }
676
677    public ObjectKeyFactory getObjectKeyFactory()
678    {
679        return getFullORB().getObjectKeyFactory() ;
680    }
681
682    public void setObjectKeyFactory( ObjectKeyFactory factory )
683    {
684        throw new SecurityException("ORBSingleton: access denied");
685    }
686
687    public void handleBadServerId( ObjectKey okey )
688    {
689    }
690
691    public OAInvocationInfo peekInvocationInfo()
692    {
693        return null ;
694    }
695
696    public void pushInvocationInfo( OAInvocationInfo info )
697    {
698    }
699
700    public OAInvocationInfo popInvocationInfo()
701    {
702        return null ;
703    }
704
705    public ClientInvocationInfo createOrIncrementInvocationInfo()
706    {
707        return null ;
708    }
709
710    public void releaseOrDecrementInvocationInfo()
711    {
712    }
713
714    public ClientInvocationInfo getInvocationInfo()
715    {
716        return null ;
717    }
718
719    public ConnectionCache getConnectionCache(ContactInfo contactInfo)
720    {
721        return null;
722    }
723
724    public void setResolver( Resolver resolver )
725    {
726    }
727
728    public Resolver getResolver()
729    {
730        return null ;
731    }
732
733    public void setLocalResolver( LocalResolver resolver )
734    {
735    }
736
737    public LocalResolver getLocalResolver()
738    {
739        return null ;
740    }
741
742    public void setURLOperation( Operation stringToObject )
743    {
744    }
745
746    // NOTE: REMOVE THIS METHOD ONCE WE HAVE A ORT BASED ORBD
747    public void setBadServerIdHandler( BadServerIdHandler handler )
748    {
749    }
750
751    // NOTE: REMOVE THIS METHOD ONCE WE HAVE A ORT BASED ORBD
752    public void initBadServerIdHandler()
753    {
754    }
755
756    public Selector getSelector(int x)
757    {
758        return null;
759    }
760
761    public void setThreadPoolManager(ThreadPoolManager mgr) {
762    }
763
764    public ThreadPoolManager getThreadPoolManager() {
765        return null;
766    }
767
768    public CopierManager getCopierManager() {
769        return null ;
770    }
771}
772
773// End of file.
774