//
//   COMPONENT_NAME: somd
//
//   ORIGINS: 27
//
//
//    25H7912  (C)  COPYRIGHT International Business Machines Corp. 1992,1994,1996 
//   All Rights Reserved
//   Licensed Materials - Property of IBM
//   US Government Users Restricted Rights - Use, duplication or
//   disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
//
//#  @(#) 2.14 src/somd/boa.idl, somd, som3.0 9/26/96 14:01:21 [12/22/96 21:11:39]

//#  BOA is a PUBLIC class derived from SOMObject.
//
//   This is an abstract class which defines the CORBA-defined interface
//   for a Basic Object Adapter.  The SOM Object Adapter interface is
//   derived from this one.  SOMOA provides the actual implementation in DSOM.


#ifndef boa_idl
#define boa_idl

#include <somobj.idl>
#include <somdtype.idl>
#include <snglicls.idl>

interface SOMDObject;
interface Principal;
interface ImplementationDef;
interface InterfaceDef;
interface Context;

interface BOA : SOMObject
{
  SOMDObject create(in ReferenceData id, in InterfaceDef intf,
		    in ImplementationDef impl);
  // Creates a SOMDObject which is used as as "reference" to a local
  // application object.  An object reference is simply an object
  // which is used to refer to another target object.

  void dispose(in SOMDObject obj);
  // Destroys an object reference.

  ReferenceData get_id(in SOMDObject obj);
  // Returns ReferenceData associated with referenced object.

  Principal get_principal(in SOMDObject obj, in Environment req_ev);
  // Returns the ID of the principal that issued the request.

  void set_exception(in exception_type major, in string userid, in void *param);
  // Returns an exception to the client.

  void impl_is_ready(in ImplementationDef impl);
  // Indicates that the implementation is now ready to process requests.

  void deactivate_impl(in ImplementationDef impl);
  // Indicates that the implementation is no longer ready to process reqs.

  void change_implementation(in SOMDObject obj, in ImplementationDef impl);
  // Changes the implementation associated with the referenced object.
  // Change is seen for all copies of the object reference.
  // (NOTE: Null implementation in this release of DSOM.)

  void obj_is_ready(in SOMDObject obj, in ImplementationDef impl);
  // Indicates that the object is ready to process requests.
  // (NOTE: Null implementation in this release of DSOM.)

  void deactivate_obj(in SOMDObject obj);
  // Indicates that the object is no longer ready to process requests.
  // (NOTE: Null implementation in this release of DSOM.)

#ifdef __SOMIDL__

  implementation
  {
    releaseorder: create, dispose, get_id,
                  change_implementation,
		  get_principal, set_exception,
		  impl_is_ready, deactivate_impl,
		  obj_is_ready, deactivate_obj,
		  unused1, unused2;

    //# Class Modifiers
    callstyle = idl;
    metaclass = SOMMSingleInstance;
    dllname = "somd.dll";
    majorversion = 2;
    minorversion = 2;
  };

#endif /* __SOMIDL__ */

};

#endif  /* boa_idl */
