summaryrefslogtreecommitdiff
path: root/TAO/tests/Bug_3154_Regression
diff options
context:
space:
mode:
authorvzykov <vzykov@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2007-11-28 10:50:05 +0000
committervzykov <vzykov@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2007-11-28 10:50:05 +0000
commit9dbb80b03e1ed554e29d24d3dbb42e935a586a96 (patch)
treef963cf9f586381642d0aadeb724a47c969662d85 /TAO/tests/Bug_3154_Regression
parent3edd80de888c50aa8d255c3249835da9609df3bb (diff)
downloadATCD-9dbb80b03e1ed554e29d24d3dbb42e935a586a96.tar.gz
ChangeLogTag: Wed Nov 28 10:42:20 UTC 2007 Vladimir Zykov <vladimir.zykov@prismtech.com>
Diffstat (limited to 'TAO/tests/Bug_3154_Regression')
-rw-r--r--TAO/tests/Bug_3154_Regression/README21
-rw-r--r--TAO/tests/Bug_3154_Regression/orbsvcs/CosNotification.idl390
-rwxr-xr-xTAO/tests/Bug_3154_Regression/run_test.pl87
-rw-r--r--TAO/tests/Bug_3154_Regression/test.idl316
4 files changed, 814 insertions, 0 deletions
diff --git a/TAO/tests/Bug_3154_Regression/README b/TAO/tests/Bug_3154_Regression/README
new file mode 100644
index 00000000000..effb1a6fd58
--- /dev/null
+++ b/TAO/tests/Bug_3154_Regression/README
@@ -0,0 +1,21 @@
+This test uses newly implemented -Se feature of tao_idl. Using this feature
+user can prohibit custom endings (e.g. -hs or -hc) for TAO specific include fils.
+
+__Regression Output__
+
+[vzykov@glasgow tao566_regression]$ ./run_test.pl
+ERROR: Custom endings are incorrectly applied.
+
+
+__Successful Output__
+
+[vzykov@glasgow tao563_regression]$ ./run_test.pl
+processing test.idl
+INFO: orbsvcs/FT_CORBA_ORBC.h
+INFO: orbsvcs/CosNotification_stub.h
+INFO: orbsvcs/PortableGroupC.h
+INFO: test_stub.h
+INFO: orbsvcs/FT_CORBA_ORBC.h
+INFO: orbsvcs/CosNotification_skel.h
+INFO: orbsvcs/PortableGroupS.h
+INFO: Test passed!
diff --git a/TAO/tests/Bug_3154_Regression/orbsvcs/CosNotification.idl b/TAO/tests/Bug_3154_Regression/orbsvcs/CosNotification.idl
new file mode 100644
index 00000000000..ec1a43547ca
--- /dev/null
+++ b/TAO/tests/Bug_3154_Regression/orbsvcs/CosNotification.idl
@@ -0,0 +1,390 @@
+/**
+ * @file CosNotification.idl
+ *
+ * @brief Define the CosNotification module
+ *
+ * CosNotification.idl,v 1.3 2002/07/01 14:13:59 parsons Exp
+ *
+ * @author Pradeep Gore <pradeep@cs.wustl.edu>
+ */
+
+#ifndef _COS_NOTIFICATION_IDL_
+#define _COS_NOTIFICATION_IDL_
+
+#pragma prefix "omg.org"
+
+/**
+ * @namespace CosNotification
+ *
+ * @brief Define basic data structures used by the Notification
+ * Service
+ */
+module CosNotification
+{
+ /// Dummy typedef for strings, if the intent was to support I18N
+ /// strings the spec should have used wstring
+ typedef string Istring;
+
+ /// Properties are named using a string
+ typedef Istring PropertyName;
+
+ /// Property values are stored using anys
+ typedef any PropertyValue;
+
+ /**
+ * @struct Property
+ *
+ * @brief Define a name/value pair.
+ *
+ * Events are described using named/value sequences, this structure
+ * defines the name/value pair.
+ */
+ struct Property {
+ /// The name
+ PropertyName name;
+ /// The value
+ PropertyValue value;
+ };
+
+ /// Define a sequence of properties.
+ typedef sequence<Property> PropertySeq;
+
+ //@{
+ /**
+ * @name Different kinds of property sequences
+ *
+ * @brief The following are all sequences of Property, but
+ * serve different purposes.
+ */
+ /// Property sequence used for optional header fields
+ typedef PropertySeq OptionalHeaderFields;
+
+ /// Property sequence used for the event body that can be used
+ /// in filtering
+ typedef PropertySeq FilterableEventBody;
+
+ /// Specify quality of service properties
+ typedef PropertySeq QoSProperties;
+
+ /// Specify administrative properties
+ typedef PropertySeq AdminProperties;
+ //@}
+
+ /**
+ * @struct _EventType
+ *
+ * @brief Define event type names.
+ *
+ * Different vertical industries (domains) can define well-known
+ * events (event_types). This structure is used for that purpose
+ */
+ struct _EventType {
+ /// The name of the vertical industry defining the event type.
+ string domain_name;
+ /// The type of event.
+ string type_name;
+ };
+ /// A sequence of event types
+ typedef sequence<_EventType> EventTypeSeq;
+
+ /**
+ * @struct PropertyRange
+ *
+ * @brief A structure to define property ranges.
+ *
+ */
+ struct PropertyRange {
+ /// Lower end of the range
+ PropertyValue low_val;
+ /// High end of the range
+ PropertyValue high_val;
+ };
+
+ /**
+ * @struct NamedPropertyRange
+ *
+ * @brief A named property range
+ */
+ struct NamedPropertyRange {
+ /// The name
+ PropertyName name;
+ /// The range
+ PropertyRange range;
+ };
+ /// A sequence of named property ranges
+ typedef sequence<NamedPropertyRange> NamedPropertyRangeSeq;
+
+ /**
+ * @enum QoSError_code
+ *
+ * @brief Describe QoS errors.
+ */
+ enum QoSError_code {
+ /// The application has requested an unsupported QoS property
+ UNSUPPORTED_PROPERTY,
+ /// The application has requested a QoS property that, though
+ /// supported, cannot be set in the requested scope.
+ UNAVAILABLE_PROPERTY,
+ /// The application has requested a QoS property with an
+ /// unsupported value.
+ UNSUPPORTED_VALUE,
+ /// The application has requested a QoS property with a supported
+ /// value, but unavailable at the requeste scope.
+ UNAVAILABLE_VALUE,
+ /// The property name is unknown or not recognized.
+ BAD_PROPERTY,
+ /// The value type for the requested property is invalid
+ BAD_TYPE,
+ /// The value for the requested property is illegal
+ BAD_VALUE
+ };
+
+ /**
+ * @struct PropertyError
+ *
+ * @brief Describe the problems detected with an application
+ * requested QoS.
+ *
+ * If there are any problems with an application request for QoS the
+ * problems are raised using an exception that contains all the
+ * problems, and a description of the valid values (if they apply).
+ */
+ struct PropertyError {
+ /// Property error description
+ QoSError_code code;
+ /// Property name with a problem
+ PropertyName name;
+ /// Valid range for that property in the Notification Service
+ /// implementation
+ PropertyRange available_range;
+ };
+ /// List of property errors.
+ typedef sequence<PropertyError> PropertyErrorSeq;
+
+ /**
+ * @exception UnsupportedQoS
+ *
+ * @brief Exception used to describe problems with one or more QoS
+ * requests
+ *
+ */
+ exception UnsupportedQoS {
+ /// Complete description of the properties in error
+ PropertyErrorSeq qos_err;
+ };
+
+ /**
+ * @exception UnsupportedAdmin
+ *
+ * @brief Exception used to describe problems with one or more Admin
+ * properties
+ */
+ exception UnsupportedAdmin {
+ /// The complete description of the invalid properties.
+ PropertyErrorSeq admin_err;
+ };
+
+ /**
+ * @struct FixedEventHeader
+ *
+ * @brief Define the 'fixed' part of the event header
+ */
+ struct FixedEventHeader {
+ /// The event type
+ _EventType event_type;
+ /// A (possibly unique) name for the particular event
+ string event_name;
+ };
+
+ /**
+ * @struct EventHeader
+ *
+ * @brief Complete event header
+ */
+ struct EventHeader {
+ /// The fixed part of the event header
+ FixedEventHeader fixed_header;
+ /// The optional part
+ OptionalHeaderFields variable_header;
+ };
+
+ /**
+ * @struct StructuredEvent
+ *
+ * @brief Define structured events
+ */
+ struct StructuredEvent {
+ /// The header
+ EventHeader header;
+ /// The part of the body used for filtering
+ FilterableEventBody filterable_data;
+ /// The part of the body not used for filtering
+ any remainder_of_body;
+ };
+ /// Sequence of events, for batch processing
+ typedef sequence<StructuredEvent> EventBatch;
+
+ //@{
+ /**
+ * @name Constants for QoS Properties
+ *
+ * The following constant declarations define the standard QoS
+ * property names and the associated values each property can take
+ * on. The name/value pairs for each standard property are grouped,
+ * beginning with a string constant defined for the property name,
+ * followed by the values the property can take on.
+ */
+
+ const string EventReliability = "EventReliability";
+ const short BestEffort = 0;
+ const short Persistent = 1;
+
+ /// Can take on the same values as EventReliability
+ const string ConnectionReliability = "ConnectionReliability";
+
+ const string Priority = "Priority";
+ const short LowestPriority = -32767;
+ const short HighestPriority = 32767;
+ const short DefaultPriority = 0;
+
+ /// StartTime takes a value of type TimeBase::UtcT.
+ const string StartTime = "StartTime";
+
+ /// StopTime takes a value of type TimeBase::UtcT.
+ const string StopTime = "StopTime";
+
+ /// Timeout takes on a value of type TimeBase::TimeT
+ const string Timeout = "Timeout";
+
+ const string OrderPolicy = "OrderPolicy";
+ const short AnyOrder = 0;
+ const short FifoOrder = 1;
+ const short PriorityOrder = 2;
+ const short DeadlineOrder = 3;
+
+ /// DiscardPolicy takes on the same values as OrderPolicy, plus
+ const string DiscardPolicy = "DiscardPolicy";
+ const short LifoOrder = 4;
+
+ /// MaximumBatchSize takes on a value of type long
+ const string MaximumBatchSize = "MaximumBatchSize";
+
+ /// PacingInterval takes on a value of type TimeBase::TimeT
+ const string PacingInterval = "PacingInterval";
+
+ /// StartTimeSupported takes on a boolean value
+ const string StartTimeSupported = "StartTimeSupported";
+
+ /// StopTimeSupported takes on a boolean value
+ const string StopTimeSupported = "StopTimeSupported";
+
+ /// MaxEventsPerConsumer takes on a value of type long
+ const string MaxEventsPerConsumer = "MaxEventsPerConsumer";
+
+ //@}
+
+ /**
+ * @interface QoSAdmin
+ *
+ * @brief Interface used to control the QoS properties of an Event
+ * Service components (Channel, Proxy, etc.)
+ *
+ * QoS properties of a channel can be set at different levels,
+ * including the proxies, the ConsumerAdmin and the SupplierAdmin
+ * objects. Each one of those components offers this interface to
+ * allow control over the properties.
+ */
+ interface QoSAdmin {
+ /// Get the current QoS properties
+ /**
+ * The operation returns the properties set:
+ * - At the level queried
+ * - Not set at the level queried but set at a higher-level
+ * - Not set at all but having a default value.
+ */
+ QoSProperties get_qos();
+
+ /// Set the QoS properties
+ /**
+ * @param qos The requested QoS properties
+ * @throws UnsupportedQoS if the requested QoS cannot be
+ * implemented or is invalid. The exception contents describe
+ * the problem(s) in detail.
+ */
+ void set_qos ( in QoSProperties qos)
+ raises ( UnsupportedQoS );
+
+ /// Validate a set of QoS properties
+ /**
+ * @param required_qos the list of properties requested by the
+ * application
+ * @param available_qos If the properties are supported this
+ * argument returns a list of any other properties that
+ * could also be set.
+ * @throws UnsupportedQoS if the requested QoS cannot be
+ * implemented or is invalid. The exception contents describe
+ * the problem(s) in detail.
+ */
+ void validate_qos (in QoSProperties required_qos,
+ out NamedPropertyRangeSeq available_qos )
+ raises ( UnsupportedQoS );
+ };
+
+ //@{
+ /**
+ * @name Constants for Admin Properties
+ *
+ * Admin properties are defined in similar manner as QoS
+ * properties. The only difference is that these properties are
+ * related to channel administration policies, as opposed message
+ * quality of service
+ */
+ /// MaxQueueLength takes on a value of type long
+ const string MaxQueueLength = "MaxQueueLength";
+
+ /// MaxConsumers takes on a value of type long
+ const string MaxConsumers = "MaxConsumers";
+
+ /// MaxSuppliers takes on a value of type long
+ const string MaxSuppliers = "MaxSuppliers";
+
+ /// RejectNewEvents takes on a value of type Boolean
+ const string RejectNewEvents = "RejectNewEvents";
+ //@}
+
+ /**
+ * @interface AdminPropertiesAdmin
+ *
+ * @brief Define the interface to manipulate the Admin properties of
+ * a Notification Service components
+ *
+ * Several Notification Service components have Admin properties,
+ * including the Event Channel, its ConsumerAdmin and SupplierAdmin
+ * objects as well as the proxies. This interface is used to
+ * control the Admin properties of each one of those components.
+ */
+ interface AdminPropertiesAdmin {
+ /// Get the Admin properties
+ /**
+ * The operation returns the properties set:
+ * - At the level queried
+ * - Not set at the level queried but set at a higher-level
+ * - Not set at all but having a default value.
+ */
+ AdminProperties get_admin();
+
+ /// Set the Admin properities
+ /**
+ * @param admin The list of Admin properties requested
+ * @throws UnsupportedAdmin if the requested admin properties
+ * cannot be implemented or are invalid
+ */
+ void set_admin (in AdminProperties admin)
+ raises ( UnsupportedAdmin);
+ };
+
+};
+
+#pragma prefix ""
+
+#endif /* _COS_NOTIFICATION_IDL_ */
diff --git a/TAO/tests/Bug_3154_Regression/run_test.pl b/TAO/tests/Bug_3154_Regression/run_test.pl
new file mode 100755
index 00000000000..73c186cb3d7
--- /dev/null
+++ b/TAO/tests/Bug_3154_Regression/run_test.pl
@@ -0,0 +1,87 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# -*- perl -*-
+
+use lib "$ENV{ACE_ROOT}/bin";
+use PerlACE::Run_Test;
+
+# The location of the tao_idl utility - depends on O/S
+if ($^O eq "MSWin32")
+{
+ $tao_idl = "../../../bin/tao_idl";
+}
+else
+{
+ $tao_idl = "../../../TAO/TAO_IDL/tao_idl";
+}
+
+# IDL file names
+$idl_file = PerlACE::LocalFile ("test.idl");
+
+# The IDL compiler
+$TAO_IDL = new PerlACE::Process ("$tao_idl");
+
+$TAO_IDL->Arguments ("-Se -hs _skel.h -hc _stub.h test.idl");
+$TAO_IDL->SpawnWaitKill (20);
+
+$found = 0;
+
+$stub_h = PerlACE::LocalFile("test_stub.h");
+open (STUB_HANDLE, "<$stub_h");
+while ($line = <STUB_HANDLE>)
+{
+ # Process the line.
+ chomp $line;
+
+ if ($line =~ /^\#include \"orbsvcs\/FT_CORBA_ORBC\.h\"$/) {
+ print "INFO: orbsvcs/FT_CORBA_ORBC.h\n";
+ $found++;
+ }
+ if ($line =~ /^\#include \"orbsvcs\/CosNotification_stub\.h\"$/) {
+ print "INFO: orbsvcs/CosNotification_stub.h\n";
+ $found++;
+ }
+ if ($line =~ /\#include \"orbsvcs\/PortableGroupC\.h\"$/) {
+ print "INFO: orbsvcs/PortableGroupC.h\n";
+ $found++;
+ }
+}
+close(STUB_HANDLE);
+
+$skel_h = PerlACE::LocalFile("test_skel.h");
+open (SKEL_HANDLE, "<$skel_h");
+while ($line = <SKEL_HANDLE>)
+{
+ # Process the line.
+ chomp $line;
+
+ if ($line =~ /^\#include \"test_stub\.h\"$/) {
+ print "INFO: test_stub.h\n";
+ $found++;
+ }
+ if ($line =~ /^\#include \"orbsvcs\/FT_CORBA_ORBS\.h\"$/) {
+ print "INFO: orbsvcs/FT_CORBA_ORBC.h\n";
+ $found++;
+ }
+ if ($line =~ /^\#include \"orbsvcs\/CosNotification_skel\.h\"$/) {
+ print "INFO: orbsvcs/CosNotification_skel.h\n";
+ $found++;
+ }
+ if ($line =~ /\#include \"orbsvcs\/PortableGroupS\.h\"$/) {
+ print "INFO: orbsvcs/PortableGroupS.h\n";
+ $found++;
+ }
+}
+close(SKEL_HANDLE);
+
+unlink <*.cpp *.inl *.h>;
+
+if ($found == 7) {
+ print "INFO: Test passed!\n";
+ exit 0;
+} else {
+ print STDERR "ERROR: Custom endings are incorrectly applied.\n";
+ exit 1;
+}
diff --git a/TAO/tests/Bug_3154_Regression/test.idl b/TAO/tests/Bug_3154_Regression/test.idl
new file mode 100644
index 00000000000..d28d52656d4
--- /dev/null
+++ b/TAO/tests/Bug_3154_Regression/test.idl
@@ -0,0 +1,316 @@
+// The next include is TAO specific.
+#include "orbsvcs/FT_CORBA_ORB.idl"
+
+#include "orbsvcs/CosNotification.idl"
+#include "orbsvcs/PortableGroup.idl"
+
+#pragma prefix "omg.org"
+
+/**
+* This module describes interfaces and data types of the CORBA
+* Fault Tolerance service.
+*/
+
+module FT
+{
+ /// Specification for the Common Types and Exceptions for
+ /// ReplicationManager
+
+ /// Forward declarations
+ interface GenericFactory;
+ interface FaultNotifier;
+
+ /// Useful typedefs.
+ typedef CORBA::RepositoryId _TypeId;
+ typedef Object ObjectGroup;
+
+ typedef any Value;
+
+ /**
+ * @struct Property
+ *
+ * @brief A property name and a value association.
+ */
+ struct Property {
+ Value val;
+ };
+
+ /// Some mor euseful typedefs.
+ typedef sequence<Property> Properties;
+ typedef Properties Criteria;
+
+ /**
+ * @struct FactoryInfo
+ *
+ * @brief <@todo>
+ *
+ */
+ struct FactoryInfo {
+ GenericFactory the_factory;
+ Criteria the_criteria;
+ };
+
+ typedef sequence<FactoryInfo> FactoryInfos;
+
+ typedef long ReplicationStyleValue;
+ const ReplicationStyleValue STATELESS = 0;
+ const ReplicationStyleValue COLD_PASSIVE = 1;
+ const ReplicationStyleValue WARM_PASSIVE = 2;
+ const ReplicationStyleValue ACTIVE = 3;
+ const ReplicationStyleValue ACTIVE_WITH_VOTING = 4;
+ typedef long MembershipStyleValue;
+ const MembershipStyleValue MEMB_APP_CTRL = 0;
+ const MembershipStyleValue MEMB_INF_CTRL = 1;
+ typedef long ConsistencyStyleValue;
+ const ConsistencyStyleValue CONS_APP_CTRL = 0;
+ const ConsistencyStyleValue CONS_INF_CTRL = 1;
+ typedef long FaultMonitoringStyleValue;
+ const FaultMonitoringStyleValue PULL = 0;
+ const FaultMonitoringStyleValue PUSH = 1;
+ const FaultMonitoringStyleValue NOT_MONITORED = 2;
+ typedef long FaultMonitoringGranularityValue;
+ const FaultMonitoringGranularityValue MEMB = 0;
+ const FaultMonitoringGranularityValue LOC = 1;
+ const FaultMonitoringGranularityValue LOC_AND_TYPE = 2;
+ typedef FactoryInfos FactoriesValue;
+ typedef unsigned short InitialNumberReplicasValue;
+ typedef unsigned short MinimumNumberReplicasValue;
+
+ typedef TimeBase::TimeT CheckpointIntervalValue;
+ exception InterfaceNotFound {};
+ exception ObjectGroupNotFound {};
+ exception MemberNotFound {};
+ exception MemberAlreadyPresent {};
+ exception BadReplicationStyle {};
+ exception ObjectNotCreated {};
+ exception ObjectNotAdded {};
+ exception PrimaryNotSet {};
+ exception UnsupportedProperty {
+ Value val;
+ };
+
+ exception InvalidProperty {
+ Value val; };
+
+ exception NoFactory {
+ _TypeId type_id; };
+
+ exception InvalidCriteria {
+ Criteria invalid_criteria; };
+
+ exception CannotMeetCriteria {
+ Criteria unmet_criteria; };
+
+ // Specification of PropertyManager Interface
+ // which ReplicationManager Inherits
+
+ interface PropertyManager {
+
+ void set_default_properties(in Properties props)
+ raises (InvalidProperty, UnsupportedProperty);
+ Properties get_default_properties();
+
+ void remove_default_properties(in Properties props)
+ raises (InvalidProperty, UnsupportedProperty);
+
+ void set_type_properties(in _TypeId type_id,
+ in Properties overrides)
+ raises (InvalidProperty, UnsupportedProperty);
+
+ Properties get_type_properties(in _TypeId type_id);
+
+ void remove_type_properties(in _TypeId type_id,
+ in Properties props)
+ raises (InvalidProperty, UnsupportedProperty);
+
+ void set_properties_dynamically(in ObjectGroup object_group,
+ in Properties overrides)
+ raises(ObjectGroupNotFound, InvalidProperty, UnsupportedProperty);
+
+ Properties get_properties(in ObjectGroup object_group)
+ raises(ObjectGroupNotFound); };
+
+ // Specification of ObjectGroupManager Interface
+ // which ReplicationManager Inherits
+ /**
+ * This interface provides operations that allow an application to add, remove
+ * and locate members of an object group and to obtain the current reference and
+ * identifier for an object group.
+ *
+ */
+
+ interface ObjectGroupManager {
+ /**
+ * This operation allows the application to exercise explicit control over the
+ * creation of a member of an object group, and to determine where the member
+ * is created.
+ *
+ * @param object_group Reference for the object group to which the member is
+ * to be added.
+ * @param the_location The physical location.
+ * @param type_id The repository identifier for the type of the object.
+ * @param the_criteria Parameters to be passed to the factory, which the factory
+ * evaluates before creating the object.
+ *
+ * @return The object group reference of the object group with the member added.
+ */
+ ObjectGroup create_member(in ObjectGroup object_group,
+ in _TypeId type_id,
+ in Criteria the_criteria)
+ raises(ObjectGroupNotFound,
+ MemberAlreadyPresent,
+ NoFactory,
+ ObjectNotCreated,
+ InvalidCriteria,
+ CannotMeetCriteria);
+
+ /**
+ * This operation allows an application to add an existing object to an object
+ * group at a particular location.
+ *
+ * @param object_group Reference for the object group to which the existing object
+ * is to be added.
+ * @param the_location The physical location of the object to be added.
+ * @param member The reference of the object to be added.
+ *
+ * @return The object group reference of the object group with the object added.
+ */
+ ObjectGroup add_member(in ObjectGroup object_group,
+ in Object member)
+ raises(ObjectGroupNotFound,
+ MemberAlreadyPresent,
+ ObjectNotAdded);
+
+ /**
+ * This operation allows an application to remove a member from an object
+ * group at a particular location.
+ *
+ * @param object_group Reference for the object group to which the member
+ * is to be removed.
+ * @param the_location The physical location of the member to be removed.
+ *
+ * @return The object group reference of the member removed.
+ */
+ ObjectGroup remove_member(in ObjectGroup object_group)
+ raises(ObjectGroupNotFound,
+ MemberNotFound);
+
+ /**
+ * This operation allows the application to select the member of the object group
+ * that is to be the primary.
+ *
+ * @param object_group Reference for the object group whose primary is to be
+ * determined.
+ * @param the_location The physical location of the member that is to become
+ * the primary.
+ *
+ * @return The object group reference with the primary member at the given
+ * location.
+ */
+ ObjectGroup set_primary_member(in ObjectGroup object_group)
+ raises(ObjectGroupNotFound,
+ MemberNotFound,
+ PrimaryNotSet,
+ BadReplicationStyle);
+
+ ObjectGroupId get_object_group_id(in ObjectGroup object_group)
+ raises(ObjectGroupNotFound);
+
+ ObjectGroup get_object_group_ref(in ObjectGroup object_group)
+ raises(ObjectGroupNotFound);
+
+ Object get_member_ref(in ObjectGroup object_group)
+ raises(ObjectGroupNotFound, MemberNotFound); };
+
+
+ // Specification of GenericFactory Interface
+ // which ReplicationManager Inherits and Application Objects Implement
+ /**
+ * This interface allows the creation/deletion of replicated objects (object groups),
+ * replicas (members of object groups), and unreplicated objects.
+ */
+ interface GenericFactory {
+ typedef any FactoryCreationId;
+
+ /**
+ * This operation creates an object or an object group, using the type_id
+ * parameter to determine which type of object to create and the_criteria
+ * parameter to determine restrictions on how and where to create the object.
+ *
+ * @param type_id The repository identifier of the object to be created by
+ * the factory.
+ *
+ * @param the_criteria Information passed to the factory, which the factory
+ * evaluates before creating the object. Examples of criteria are initialization
+ * values, constraints on the object, preferred location of the object, fault
+ * tolerance properties for an object group, etc.
+ *
+ * @param factory_creation_id An identifier that allows the factory to delete
+ * the object subsequently.
+ *
+ * @return The reference to the object created by the GenericFactory. When the
+ * GenericFactory interface is implemented by the application’s local factory
+ * object, the create_object() operation returns an object reference as a result.
+ * When the GenericFactory interface is inherited by the Replication Manager, the
+ * create_object() operation returns an object group reference as a result.
+ *
+ * @exception NoFactory Raised if the factory cannot create an individual object
+ * of the type_id at the location.
+ * @exception ObjectNotCreated Raised if the factory cannot create the object.
+ * @exception InvalidCriteria Raised if the factory does not understand the criteria.
+ * @exception InvalidProperty Raised if a property passed in as criteria is invalid.
+ * @exception CannotMeetCriteria Raised if the factory understands the criteria but
+ * cannot satisfy it.
+ */
+ Object create_object(in _TypeId type_id,
+ in Criteria the_criteria,
+ out FactoryCreationId factory_creation_id)
+ raises (NoFactory,
+ ObjectNotCreated,
+ InvalidCriteria,
+ InvalidProperty,
+ CannotMeetCriteria); };
+
+ // Specification of ReplicationManager Interface
+ interface ReplicationManager : PropertyManager,
+ ObjectGroupManager,
+ GenericFactory {
+ void register_fault_notifier(in FaultNotifier fault_notifier);
+ FaultNotifier get_fault_notifier()
+ raises (InterfaceNotFound); };
+
+ // Specification of FaultNotifier Interface
+ interface FaultNotifier {
+ typedef unsigned long long ConsumerId;
+
+ void push_structured_fault(
+ in CosNotification::StructuredEvent event);
+
+ void push_sequence_fault(
+ in CosNotification::EventBatch events);
+
+ };
+
+ // Specifications for Logging and Recovery
+ typedef sequence<octet> State;
+
+ exception NoStateAvailable {};
+ exception InvalidState {};
+
+ exception NoUpdateAvailable {};
+ exception InvalidUpdate {};
+
+ // Specification of Checkpointable Interface
+ // which Updateable and Application Objects Inherit
+ interface Checkpointable { State get_state()
+ raises(NoStateAvailable);
+ void set_state(in State s) raises(InvalidState); };
+
+ // Specification of Updateable Interface
+ // which Application Objects Inherit
+ interface Updateable : Checkpointable { State get_update()
+ raises(NoUpdateAvailable);
+ void set_update(in State s) raises(InvalidUpdate);
+ };
+
+};