001 /***** Copyright (c) 1999-2000 Object Management Group. Unlimited rights to
002 duplicate and use this code are hereby granted provided that this
003 copyright notice is included.
004 *****/
005
006 package org.omg.PortableServer;
007
008 abstract public class Servant {
009
010 final public org.omg.CORBA.Object _this_object() {
011 return _get_delegate().this_object(this);
012 }
013
014 final public org.omg.CORBA.Object _this_object(org.omg.CORBA.ORB orb) {
015 try {
016 ((org.omg.CORBA_2_3.ORB)orb).set_delegate(this);
017 }
018 catch (ClassCastException e) {
019 throw new org.omg.CORBA.BAD_PARAM(
020 "POA Servant requires an instanceof org.omg.CORBA_2_3.ORB");
021 }
022 return _this_object();
023 }
024
025 final public org.omg.CORBA.ORB _orb() {
026 return _get_delegate().orb(this);
027 }
028
029 final public POA _poa() {
030 return _get_delegate().poa(this);
031 }
032
033 final public byte[] _object_id() {
034 return _get_delegate().object_id(this);
035 }
036
037 public POA _default_POA() {
038 return _get_delegate().default_POA(this);
039 }
040
041 public boolean _is_a(String repository_id) {
042 return _get_delegate().is_a(this, repository_id);
043 }
044
045 public boolean _non_existent() {
046 return _get_delegate().non_existent(this);
047 }
048
049 /** @deprecated Deprecated by CORBA 2.4
050 */
051 public org.omg.CORBA.InterfaceDef _get_interface() {
052 return _get_delegate().get_interface(this);
053 }
054
055 public org.omg.CORBA.Object _get_interface_def()
056 {
057 // First try to call the delegate implementation class's
058 // "Object get_interface_def(..)" method (will work for ORBs
059 // whose delegates implement this method).
060 // Else call the delegate implementation class's
061 // "InterfaceDef get_interface(..)" method using reflection
062 // (will work for ORBs that were built using an older version
063 // of the Delegate interface with a get_interface method
064 // but not a get_interface_def method).
065
066 org.omg.PortableServer.portable.Delegate delegate = _get_delegate();
067 try {
068 // If the ORB's delegate class does not implement
069 // "Object get_interface_def(..)", this will throw
070 // an AbstractMethodError.
071 return delegate.get_interface_def(this);
072 } catch( AbstractMethodError aex ) {
073 // Call "InterfaceDef get_interface(..)" method using reflection.
074 try {
075 Class[] argc = { org.omg.PortableServer.Servant.class };
076 java.lang.reflect.Method meth =
077 delegate.getClass().getMethod("get_interface", argc);
078 Object[] argx = { this };
079 return (org.omg.CORBA.Object)meth.invoke(delegate, argx);
080 } catch( java.lang.reflect.InvocationTargetException exs ) {
081 Throwable t = exs.getTargetException();
082 if (t instanceof Error) {
083 throw (Error) t;
084 } else if (t instanceof RuntimeException) {
085 throw (RuntimeException) t;
086 } else {
087 throw new org.omg.CORBA.NO_IMPLEMENT();
088 }
089 } catch( RuntimeException rex ) {
090 throw rex;
091 } catch( Exception exr ) {
092 throw new org.omg.CORBA.NO_IMPLEMENT();
093 }
094 }
095 }
096
097 abstract public String[] _all_interfaces(POA poa, byte[] objectID);
098
099 private transient org.omg.PortableServer.portable.Delegate _delegate =null;
100
101 final public org.omg.PortableServer.portable.Delegate _get_delegate() {
102 if (_delegate == null) {
103 throw new org.omg.CORBA.BAD_INV_ORDER(
104 "The Servant has not been associated with an ORBinstance");
105 }
106 return _delegate;
107 }
108
109 final public void _set_delegate(
110 org.omg.PortableServer.portable.Delegate delegate) {
111 _delegate = delegate;
112 }
113 }