blob: a0375fb0f917f04fe4a87cf20c5f8152e5907d78 [file] [log] [blame]
/*
* Copyright (c) 1997, 2002, 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.
*/
package org.omg.CORBA.portable;
import org.omg.CORBA.Request;
import org.omg.CORBA.NamedValue;
import org.omg.CORBA.NVList;
import org.omg.CORBA.Context;
import org.omg.CORBA.ContextList;
import org.omg.CORBA.ExceptionList;
import org.omg.CORBA.TypeCode;
import org.omg.CORBA.SystemException;
/**
* Specifies a portable API for ORB-vendor-specific
* implementation of the org.omg.CORBA.Object methods.
*
* Each stub (proxy) contains a delegate
* object, to which all org.omg.CORBA.Object methods are forwarded.
* This allows a stub generated by one vendor's ORB to work with the delegate
* from another vendor's ORB.
*
* @see org.omg.CORBA.Object
* @author OMG
*/
public abstract class Delegate {
/**
* Return an InterfaceDef for the object reference provided.
* @param self The object reference whose InterfaceDef needs to be returned
* @return the InterfaceDef
*/
public abstract org.omg.CORBA.Object get_interface_def(
org.omg.CORBA.Object self);
/**
* Returns a duplicate of the object reference provided.
* @param obj The object reference whose duplicate needs to be returned
* @return the duplicate object reference
*/
public abstract org.omg.CORBA.Object duplicate(org.omg.CORBA.Object obj);
/**
* Releases resources associated with the object reference provided.
* @param obj The object reference whose resources need to be released
*/
public abstract void release(org.omg.CORBA.Object obj);
/**
* Checks if the object reference is an instance of the given interface.
* @param obj The object reference to be checked.
* @param repository_id The repository identifier of the interface
* to check against.
* @return true if the object reference supports the interface
*/
public abstract boolean is_a(org.omg.CORBA.Object obj, String repository_id);
/**
* Determines whether the server object for the object reference has been
* destroyed.
* @param obj The object reference which delegated to this delegate.
* @return true if the ORB knows authoritatively that the server object does
* not exist, false otherwise
*/
public abstract boolean non_existent(org.omg.CORBA.Object obj);
/**
* Determines if the two object references are equivalent.
* @param obj The object reference which delegated to this delegate.
* @param other The object reference to check equivalence against.
* @return true if the objects are CORBA-equivalent.
*/
public abstract boolean is_equivalent(org.omg.CORBA.Object obj,
org.omg.CORBA.Object other);
/**
* Returns an ORB-internal identifier (hashcode) for this object reference.
* @param obj The object reference which delegated to this delegate.
* @param max specifies an upper bound on the hash value returned by
* the ORB.
* @return ORB-internal hash identifier for object reference
*/
public abstract int hash(org.omg.CORBA.Object obj, int max);
/**
* Creates a Request instance for use in the Dynamic Invocation Interface.
* @param obj The object reference which delegated to this delegate.
* @param operation The name of the operation to be invoked using the
* Request instance.
* @return the created Request instance
*/
public abstract Request request(org.omg.CORBA.Object obj, String operation);
/**
* Creates a Request instance for use in the Dynamic Invocation Interface.
*
* @param obj The object reference which delegated to this delegate.
* @param ctx The context to be used.
* @param operation The name of the operation to be
* invoked.
* @param arg_list The arguments to the operation in the
* form of an NVList.
* @param result A container for the result as a NamedValue.
* @return The created Request object.
*
*/
public abstract Request create_request(org.omg.CORBA.Object obj,
Context ctx,
String operation,
NVList arg_list,
NamedValue result);
/**
* Creates a Request instance for use in the Dynamic Invocation Interface.
*
* @param obj The object reference which delegated to this delegate.
* @param ctx The context to be used.
* @param operation The name of the operation to be
* invoked.
* @param arg_list The arguments to the operation in the
* form of an NVList.
* @param result A container for the result as a NamedValue.
* @param exclist A list of possible exceptions the
* operation can throw.
* @param ctxlist A list of context strings that need
* to be resolved and sent with the
* Request.
* @return The created Request object.
*/
public abstract Request create_request(org.omg.CORBA.Object obj,
Context ctx,
String operation,
NVList arg_list,
NamedValue result,
ExceptionList exclist,
ContextList ctxlist);
/**
* Provides a reference to the orb associated with its parameter.
*
* @param obj the object reference which delegated to this delegate.
* @return the associated orb.
* @see <a href="package-summary.html#unimpl"><code>portable</code>
* package comments for unimplemented features</a>
*/
public org.omg.CORBA.ORB orb(org.omg.CORBA.Object obj) {
throw new org.omg.CORBA.NO_IMPLEMENT();
}
/**
* Returns the <code>Policy</code> object of the specified type
* which applies to this object.
*
* @param self The object reference which delegated to this delegate.
* @param policy_type The type of policy to be obtained.
* @return A <code>Policy</code> object of the type specified by
* the policy_type parameter.
* @exception org.omg.CORBA.BAD_PARAM raised when the value of policy type
* is not valid either because the specified type is not supported by this
* ORB or because a policy object of that type is not associated with this
* Object.
* @see <a href="package-summary.html#unimpl"><code>portable</code>
* package comments for unimplemented features</a>
*/
public org.omg.CORBA.Policy get_policy(org.omg.CORBA.Object self,
int policy_type) {
throw new org.omg.CORBA.NO_IMPLEMENT();
}
/**
* Retrieves the <code>DomainManagers</code> of this object.
* This allows administration services (and applications) to retrieve the
* domain managers, and hence the security and other policies applicable
* to individual objects that are members of the domain.
*
* @param self The object reference which delegated to this delegate.
* @return The list of immediately enclosing domain managers of this object.
* At least one domain manager is always returned in the list since by
* default each object is associated with at least one domain manager at
* creation.
* @see <a href="package-summary.html#unimpl"><code>portable</code>
* package comments for unimplemented features</a>
*/
public org.omg.CORBA.DomainManager[] get_domain_managers(
org.omg.CORBA.Object
self) {
throw new org.omg.CORBA.NO_IMPLEMENT();
}
/**
* Associates the policies passed in
* with a newly created object reference that it returns. Only certain
* policies that pertain to the invocation of an operation at the client
* end can be overridden using this operation. Attempts to override any
* other policy will result in the raising of the CORBA::NO_PERMISSION
* exception.
*
* @param self The object reference which delegated to this delegate.
* @param policies A sequence of references to Policy objects.
* @param set_add Indicates whether these policies should be added
* onto any otheroverrides that already exist (ADD_OVERRIDE) in
* the object reference, or they should be added to a clean
* override free object reference (SET_OVERRIDE).
* @return A new object reference with the new policies associated with it.
*
* @see <a href="package-summary.html#unimpl"><code>portable</code>
* package comments for unimplemented features</a>
*/
public org.omg.CORBA.Object set_policy_override(org.omg.CORBA.Object self,
org.omg.CORBA.Policy[] policies,
org.omg.CORBA.SetOverrideType set_add) {
throw new org.omg.CORBA.NO_IMPLEMENT();
}
/**
* Returns true if this object is implemented by a local servant.
*
* @param self The object reference which delegated to this delegate.
* @return true only if the servant incarnating this object is located in
* this Java VM. Return false if the servant is not local or the ORB
* does not support local stubs for this particular servant. The default
* behavior of is_local() is to return false.
*/
public boolean is_local(org.omg.CORBA.Object self) {
return false;
}
/**
* Returns a Java reference to the servant which should be used for this
* request. servant_preinvoke() is invoked by a local stub.
* If a ServantObject object is returned, then its servant field
* has been set to an object of the expected type (Note: the object may
* or may not be the actual servant instance). The local stub may cast
* the servant field to the expected type, and then invoke the operation
* directly. The ServantRequest object is valid for only one invocation,
* and cannot be used for more than one invocation.
*
* @param self The object reference which delegated to this delegate.
*
* @param operation a string containing the operation name.
* The operation name corresponds to the operation name as it would be
* encoded in a GIOP request.
*
* @param expectedType a Class object representing the expected type of the servant.
* The expected type is the Class object associated with the operations
* class of the stub's interface (e.g. A stub for an interface Foo,
* would pass the Class object for the FooOperations interface).
*
* @return a ServantObject object.
* The method may return a null value if it does not wish to support
* this optimization (e.g. due to security, transactions, etc).
* The method must return null if the servant is not of the expected type.
*/
public ServantObject servant_preinvoke(org.omg.CORBA.Object self,
String operation,
Class expectedType) {
return null;
}
/**
* servant_postinvoke() is invoked by the local stub after the operation
* has been invoked on the local servant.
* This method must be called if servant_preinvoke() returned a non-null
* value, even if an exception was thrown by the servant's method.
* For this reason, the call to servant_postinvoke() should be placed
* in a Java finally clause.
*
* @param self The object reference which delegated to this delegate.
*
* @param servant the instance of the ServantObject returned from
* the servant_preinvoke() method.
*/
public void servant_postinvoke(org.omg.CORBA.Object self,
ServantObject servant) {
}
/**
* request is called by a stub to obtain an OutputStream for
* marshaling arguments. The stub must supply the operation name,
* and indicate if a response is expected (i.e is this a oneway
* call).
*
* @param self The object reference which delegated to this delegate.
* @param operation a string containing the operation name.
* The operation name corresponds to the operation name as it would be
* encoded in a GIOP request.
* @param responseExpected false if the operation is a one way operation,
* and true otherwise.
* @return OutputStream the OutputStream into which request arguments
* can be marshaled.
* @see <a href="package-summary.html#unimpl"><code>portable</code>
* package comments for unimplemented features</a>
*/
public OutputStream request(org.omg.CORBA.Object self,
String operation,
boolean responseExpected) {
throw new org.omg.CORBA.NO_IMPLEMENT();
}
/**
* invoke is called by a stub to invoke an operation. The stub provides an
* OutputStream that was previously returned by a request()
* call. invoke returns an InputStream which contains the
* marshaled reply. If an exception occurs, invoke may throw an
* ApplicationException object which contains an InputStream from
* which the user exception state may be unmarshaled.
*
* @param self The object reference which delegated to this delegate.
* @param output the OutputStream which contains marshaled arguments
* @return input the InputStream from which reply parameters can be
* unmarshaled.
* @throws ApplicationException thrown when implementation throws
* (upon invocation) an exception defined as part of its remote method
* definition.
* @throws RemarshalException thrown when remarshalling fails.
* @see <a href="package-summary.html#unimpl"><code>portable</code>
* package comments for unimplemented features</a>
*/
public InputStream invoke(org.omg.CORBA.Object self,
OutputStream output)
throws ApplicationException, RemarshalException {
throw new org.omg.CORBA.NO_IMPLEMENT();
}
/**
* releaseReply may optionally be called by a stub to release a
* reply stream back to the ORB when the unmarshaling has
* completed. The stub passes the InputStream returned by
* invoke() or ApplicationException.getInputStream(). A null
* value may also be passed to releaseReply, in which case the
* method is a noop.
*
* @param self The object reference which delegated to this delegate.
* @param input the InputStream returned from invoke().
* @see <a href="package-summary.html#unimpl"><code>portable</code>
* package comments for unimplemented features</a>
*/
public void releaseReply(org.omg.CORBA.Object self,
InputStream input) {
throw new org.omg.CORBA.NO_IMPLEMENT();
}
/**
* Provides the implementation to override the toString() method
* of the delegating CORBA object.
*
* @param self the object reference that delegated to this delegate
* @return a <code>String</code> object that represents the object
* reference that delegated to this <code>Delegate</code>
* object
*/
public String toString(org.omg.CORBA.Object self) {
return self.getClass().getName() + ":" + this.toString();
}
/**
* Provides the implementation to override the hashCode() method
* of the delegating CORBA object.
*
* @param self the object reference that delegated to this delegate
* @return an <code>int</code> that represents the hashcode for the
* object reference that delegated to this <code>Delegate</code>
* object
*/
public int hashCode(org.omg.CORBA.Object self) {
return System.identityHashCode(self);
}
/**
* Provides the implementation to override the equals(java.lang.Object obj)
* method of the delegating CORBA object.
*
* @param self the object reference that delegated to this delegate
* @param obj the <code>Object</code> with which to compare
* @return <code>true</code> if <code>obj</code> equals <code>self</code>;
* <code>false</code> otherwise
*/
public boolean equals(org.omg.CORBA.Object self, java.lang.Object obj) {
return (self == obj);
}
}