The Oracle Tuxedo CORBA Notification Service supports two application programming interfaces. One is based on the CORBA-based Notification Service as defined by the CORBAservices: Common Object Services Specification. This interface is referred to in this document as the CosNotification Service interface. The other interface, called the Oracle Simple Events interface, is an Oracle proprietary interface designed as an easier to use alternative.To determine the persistence of the subscription and whether or not events delivery is retried following a failed delivery, subscribers specify a Quality of Service (QoS). There are two Quality of Service settings: persistent and transient Quality of Service (QoS). The QoS is a property of the subscription.The subscription is in effect until a failed event delivery is detected. On detection of a failed delivery, the subscription is terminated. Normally, the Notification Service, for performance reasons, does not check whether it successfully delivered an event to a transient subscriber. However, occasionally, when the Notification Service delivers an event to a transient subscriber, it checks whether or not the event was successfully delivered. If it was not successfully delivered and the CORBA::TRANSIENT exception is not returned, the Notification Service assumes that the subscription has gone away and cancels the subscription. If the Notification Service receives the CORBA::TRANSIENT exception when an attempt to deliver fails, it assumes that the subscriber is busy and discards the event, but it does not cancel the subscription.Notification Service applications use the Bootstrap object to obtain an object reference to the event channel factory. This is done by using the Tobj_Bootstrap::resolve_initial_references operation. The Bootstrap object supports two service IDs for Notification Service applications, NotificationService and Tobj_SimpleEventsService. The NotificationService object is used in applications that use the CosNotification Service API. The Tobj_SimpleEventsService object is used in applications that use the Oracle SimpleEvents API.
The behavior regarding transactions is the same for the Oracle SimpleEvents API and the CosNotification Service API. The only operation that supports transactional behavior is push_structured_event, which is supported by the CosNotifyChannelAdmin::StructuredProxyPushConsumer and Tobj_SimpleEvents::Channel interfaces. All other operations can be used in the context of a transaction, but work the same regardless of whether they are executed in a transaction or not.All events that are either pushed by posters to the Notification Service, or delivered to subscribers, are COS Structured Events; that is, they conform to the definition of Structured Events as specified by the CORBA-based Notification Service—a service which extends the CORBAservices Event Service (see Figure 2‑1). If the events are to be filtered based on content (versus filtering on domain and type), or if the events are going to be subscribed to by Oracle Tuxedo applications, then additional restrictions apply. The restrictions apply to data types and filtering based on event content. These restrictions are explained below.Figure 2‑1 Structured Event
• The Filterable Body consists of zero or more NV pairs. The values in these pairs are limited to the following types: any, long, unsigned long, short, unsigned short, octet, char, float, double, string, boolean, void, and null. These fields can be used in filter expressions.
• The Remaining Body consists of a single ANY. The value is limited to the following types: any, long, unsigned long, short, unsigned short, octet, char, float, double, string, boolean, void, and null. This field cannot be used in a filter expression.The Notification Service supports five levels of event design: (1) domain name, (2) type name, (3) priority, (4) filterable data, and (5) remainder of body. When designing an event, you must specify a domain name and a type name; priority and filterable data are optional. The domain name you choose can relate to your business. Hospitals, for example, are in the health care business, so for a Notification Service application for a hospital you might choose “HEALTHCARE” as a domain name. You might want to categorize the events by the type of insurance provider, so you may choose “HMO” or “UNINSURED” as the type name. You may want to further define the events by the entity responsible for payment, so you might choose to use the filterable data to identify the entity as “billing” for a specific “HMO_Account” or a specific or “Patient_Account.” Listing 2‑1 shows an example of this type of event design.Listing 2‑1 Event DesignA structured event’s filterable_data field contains a list of name/value (NV) pairs. An event’s data is typically stored in this list. The field names in the FML field table files must match the name in the structured event. The field type can be any allowable FML type (long, short, double, float, char, string) except carray. The value in the structured event must be the same type as defined in the field table. Table 2‑1 shows the CORBA Any Types supported by Oracle Tuxedo, and which ones can be used for data filtering and Oracle Tuxedo interoperability.
Table 2‑1 Supported CORBA Any Types Listing 2‑2 shows an example of an FML field table file. The *base 2000 is the base number for the fields. The first entry has a field name of billing, a field number of 1 relative to the base, and a field type of long.Listing 2‑2 Data Filtering FML Field Table FileFor information on how to create and configure FML field table files, see field_tables in the Oracle Tuxedo Command Reference and the Programming Oracle Tuxedo ATMI Applications Using FML.
• The domain_name and type_name are assembled into a string in the form domain_name.type_name to form the event name. This is the event name (eventname parameter) used on the tppost operation.
• Oracle Tuxedo system events and user events can be received by Oracle Tuxedo applications. System events are generated by the Oracle Tuxedo system—not by applications. User events are generated by Oracle Tuxedo applications. For a listing of System events see EVENTS in the Oracle Tuxedo Command Reference. System events and user events are mapped in CosNotification Structured Events as follows:
Always set to “TMEVT” In order for an Oracle Tuxedo application to receive events posted by an Oracle Tuxedo application, it is necessary to understand how a FML buffer containing an Oracle Tuxedo event is used to fabricate an Oracle Tuxedo structured event. It is also necessary to know how the domain_name and type_name are related to the Oracle Tuxedo event name. There are two cases to consider: system events and user events.Note that Oracle Tuxedo uses a leading dot (".") in the event name to distinguish system-generated events from application-defined events. An example of a system event is .SysNetworkDropped. An example of a user event is eventsdropped. To subscribe to these events, the Notification Service subscriber application must define the subscription as follows:domain_name=”TMEVT”
type_name=””
event_name=””
variable_header=empty
Filterable_data=(content of the FML buffer)The subscription_name must not exceed 128 characters in length.Same parameter as the domain_type field in the Fixed Header portion of a structured event, as defined by the CORBA-based Notification Service specification. This field is a string that is used to identify a particular vertical industry domain in which the event type is defined, for example, “Telecommunications”, “Finance”, and “Health Care”. Because this parameter is a regular expression, you can also use it to set domain patterns on which to filter. For example, to subscribe to all domains that begin with the letter F, set the domain to “F.*”. For information on how to construct regular expressions, see the recomp command in the Oracle Tuxedo ATMI C Function Reference.Same parameter as the type_name field in the Fixed Header portion of a structure event, as defined in the CORBA-based Notification Service specification. It is a string that categorizes the type of event, uniquely within the domain, for example, Comm_alarm, StockQuote, and VitalSigns. Because this parameter is a regular expression, you can also use it to set event type patterns on which to filter. For example, to subscribe to all event types that begin with the letter F, you would set the type to “F.*”. For information on how to construct regular expressions, see the recomp command in the Oracle Tuxedo ATMI C Function Reference.This parameter defines the data that the subscription must match in Boolean expressions. The following data types are supported: short, long, char, float, double, and string. Table 2‑2 lists the Boolean expression operators that are supported.
Table 2‑2 Boolean Expression Operators To use data filtering, you must set up an FML table, include filters in the subscription, filter the data, and post the event. Listing 2‑3 shows an example of these tasks.Listing 2‑3 Data Filtering RequirementsFor more information about filter grammar, see “Creating FML Field Table Files for Events” on page -7 and the section “Boolean Expression of fielded Buffers” in Programming Oracle Tuxedo ATMI Applications Using FML.
qos (quality of service)For transient subscriptions, the Notification Service makes only one attempt to deliver the event to a subscriber. If that attempt fails, the event is discarded and, if the Notification Service does not receive the CORBA::TRANSIENT exception, it concludes that the subscriber is shutdown or otherwise not available and cancels the subscription. If the Notification Service receives the CORBA::TRANSIENT exception when an attempt to deliver fails, it assumes that the subscriber is busy and discards the event, but it does not cancel the subscription.
Note: For persistent subscriptions, the Notification Service always does a two-way invoke on callback objects to deliver events. If a joint client/server does not activate a callback object (the event receiver) before it calls orb->run and then the Notification Service invokes on the callback object, as far as the POA is concerned, the callback object does not exist. In this case CORBA::OBJECT_NOT_EXIST exception is returned. If the Notification Service receives a CORBA::OBJECT_NOT_EXIST exception, it drops the subscription and the event; otherwise, the subscription is retained and the event is retried.Figure 2‑2 Oracle Simple Events InterfacesThe Tobj_SimpleEvents::Channel and the Tobj_SimpleEvents::ChannelFactory interfaces are implemented by the Notification Service and are described below.The CosNotifyComm::StructuredPushConsumer interface is implemented by the subscribers. For a description of this interface, see “CosNotifyComm::StructuredPushConsumer::push_structured_event” on page -51.
Note:
Note: If you use class operations that are not supported, the CORBA::NO_IMPLEMENT exception is raised.
• interface Channel
{
void push_structured_event(
in CosNotification::StructuredEvent event);For a description of the parameters supported by this operation, see “Parameters Used When Creating Subscriptions” on page -11.Indicates one of the following problems:
Tobj_Events::SUB_INVALID_FILTER_EXPRESSION
Tobj_Events::SUB_UNSUPPORTED_QOS_VALUEIndicates one of the following problems:
Tobj_Events::SUB_DOMAIN_BEGINS_WITH_SYSEV
Note:
Note: For subscribers that shut down and restart, you must write the subscription_id to persistent storage.To use data filtering or subscribe to Oracle Tuxedo system events or events posted by an Oracle Tuxedo application, see the sections “Creating FML Field Table Files for Events” on page -7 and “Interoperability with Oracle Tuxedo Applications” on page -9.Returns a unique subscription identifier. The effect of this operation is not instantaneous. There can be a delay between returning from this operation and the actual start of event delivery. The length of the delay period may be significant depending on your configuration. For more information on factors impacting this delay period, see “Synchronizing Databases” on page -23.
Note: Notification Service applications that start and shut down only once can use the subscription_id to determine if their subscription has been cancelled automatically or by the system administrator.
Note: Indicates the following problem: Tobj_Events::INVALID_SUBSCRIPTION_ID
Note: Used to unsubscribe. Subscriber applications use this operation to terminate subscriptions. On return from this operation, no further events can be delivered. There is one input parameter: SubscriptionID, which you got when you subscribed.
Note:
Note:
Note: Indicates the following problem: Tobj_Events::INVALID_SUBSCRIPTION_IDIf the subscription_id is for a subscription created using the CosNotification Service API, this exception is always returned.
Note: Used by subscriber applications to determine if a subscription exists. Since the system administrator can delete subscriptions manually and the Notification Service can delete transient subscriptions automatically, a subscriber application might want to use this operation so that it can recreate the subscription, if necessary. The subscription_id used in this operation is the same one that you got when you subscribed.The ChannelFactory interface is used to find event channels. This interface provides a single operation: find_channel.In this release of Oracle Tuxedo, there can only be one event channel; therefore, the ChannelID that is passed in must be set to Tobj_SimpleEvents::DEFAULT_CHANNEL (for C++).
Note:
Note: Figure 2‑3 shows the CosNotification Service classes implemented, in full or in part, in this release of Oracle Tuxedo and their relationships.Figure 2‑3 Implemented CosNotification Service ClassesThe operations supported by each class are summarized below. For more detailed descriptions, see “Detailed Descriptions of CosNotification Service Classes” on page -27.This class is used by the event poster and subscriber applications. It supports the get_channel_factory operation which is used to get the channel factory when posting, subscribing, and unsubscribing to events.
• default_consumer_admin—used by event subscriber applications to get the consumer admin object.
• default_supplier_admin—used by event poster applications to get the supplier admin object.
• default_filter_factory—used by event subscriber applications to get the filter factory object.This class is used by event poster applications. It supports the obtain_notification_push_consumer operation. Poster applications use this operation to create proxy push consumer objects which in turn are used to post events to the Notification Service.
• connect_structured_push_supplier—used by event poster applications to connect the proxy push supplier to the Notification Service event channel.
• push_structured_event—used by event poster applications to post the event to the Notification Service event channel.
• disconnect_structured_push_consumer—used by event poster applications to disconnect the proxy push supplier from the Notification Service event channel.This class is used by event subscriber applications to create a filter object. It supports the create_filter operation. The filter object provides all data filtering including domain, type, and filterable data.
• add_contraints operation—used to set the filter’s domain, type, and data filter.
• destroy operation—used to destroy the filter object.
• obtain_notification_push_supplier—used by event subscriber applications to create proxy push supplier objects which in turn are used to deliver events to the subscriber’s callback object.
• get_proxy_supplier—used by event subscriber applications to retrieve the object reference for the proxy push supplier object. This operation is only used when the subscriber application shuts down then restarts and cancels the subscription. This is because subscribers need to discard the object reference from the first run and get it back again for the next run. Subscribers cannot reuse object references from one run to the next.
• connect_structured_push_consumer—used by event subscriber applications to connect the subscriber to the proxy push supplier.
• set_qos—used by event subscriber applications to set the quality of service for subscriptions.
• add_filter—used by event subscriber applications to add the filter object to the subscription.
• get_filter—used by event subscriber applications when performing unsubscribe operations to get the filter associated with the subscription. This operation is only used when the subscriber application shuts down then restarts.
• disconnect_structured_push_supplier—used by event subscriber applications to unsubscribe.This interface is implemented by event subscriber applications. It supports the push_structured_event operation. The Notification Service invokes this operation to deliver events to the subscriber.This section describes the CosNotification Service classes that this release of Oracle Tuxedo implements. These classes are fully described in the CosNotification Service IDL files, which are located in the tuxdir/include directory.
Note: If you use class operations that are not supported, the CORBA::NO_IMPLEMENT exception is raised.Module CosNotifyFilter
{
interface Filter {
ConstraintInfoSeq add_constraints (
in ConstraintExpSeq constraint)
raises (InvalidConstraint);Indicates the following problem: Tobj_Events::SUB_INVALID_FILTER_EXPRESSION.
Note: Used when subscribing. This operation is used in subscriber applications to define the kind of event to which you want to subscribe. You set the domain, type, and data filter parameters on the filter object. For a description of these parameters, see “Parameters Used When Creating Subscriptions” on page -11.
Note: The Oracle Tuxedo implementation of the add_constraints operation (1) can only be called once, (2) must be called before the filter is added to the proxy object, and (3) must consist of only a single constraint that has a single event type.Returns an empty list, which we recommend that the caller ignores.
Note: Indicates the following problem: Tobj_Events::SUB_INVALID_FILTER_EXPRESSION.
Note:
Note: Module CosNotifyFilter
{
interface FilterFactory {
Filter create_filter (
in string constraint_grammar)
raises (InvalidGrammar);
destroy();
};
}; //CosNotifyFilterIndicates the constraint_grammar is not supported.Used in the subscriber application to create a new filter object. This filter is used to determine which events are delivered to a subscription. The subscriber must set up the filter and add it to the proxy within five minutes; otherwise, the filter will be destroyed. The filter grammar must be set to Tobj_Notification::Constraint_grammar; otherwise, the InvalidGrammar exception is raised.
Note: void connect_structured_push_consumer (
in CosNotifyComm::StructuredPushConsumer push_consumer)
raises(CosEventChannelAdmin::AlreadyConnected,
CosEventChannelAdmin::TypeError );
};
// The following operations are inherited.
void set_qos(in QoSProperties qos)
raises (UnsupportedQoS);
FilterID add_filter (in Filter new_filter );
Filter get_filter( in FilterID filter )
raises ( FilterNotFound);
void disconnect_structured_push_supplier();
readonly attribute ProxyType MyType;
};
}; //CosNotifyChannelAdminvoid connect_structured_push_consumer (
in CosNotifyComm::StructuredPushConsumer push_consumer)
raises(CosEventChannelAdmin::AlreadyConnected,
CosEventChannelAdmin::TypeError );Indicates that the connect_structured_push_consumer operation has already been invoked.
Note: Use this operation when subscribing. This operation is used in subscriber applications to subscribe to events. The push_consumer parameter identifies the subscriber’s callback object.Once the connect_structured_push_consumer has been called, the Notification Service will proceed to send events to the subscriber by invoking the callback object’s push_structured_event operation. If the connect_structured_push_consumer has already been called, the AlreadyConnected exception is raised.
Note:
Note:
Note: There are two components of the QoS: the subscription type and the subscription name. The subscription type is set by constructing a name-value pair where the name is Tobj_Notification::SUBSCRIPTION_TYPE and the value is either Tobj_Notification::PERSISTENT_SUBSCRIPTION, or Tobj_Notification::TRANSIENT_SUBSCRIPTION. For more information and additional usage details, see “Quality of Service” on page -2.The subscription name is set by constructing a name-value pair, where the name is Tobj_Notification::SUBSCRIPTION_NAME, and the value is a user-defined string.For more information on this parameter, see “Parameters Used When Creating Subscriptions” on page -11.
Note:
Note: Used when subscribing. This operation is used in subscriber applications to set the filter object to the subscriber’s callback object. If the application using this operation will be shut down and restarted, the filter_id should be written to persistent storage.
Note: This operation: (1) cannot be called after the subscriber callback object is connected (see connect_structured_push_consumer above), (2) cannot be called more than once, and (3) when it is called, the filter constraint expression must already be present in the filter (see CosNotifyFilter::Filter add_constraints).
Note: Used when a restartable subscriber wants to unsubscribe. This operation is used in subscriber applications to get an object reference to the filter currently associated with the subscriber’s callback object. The FilterID that is passed in must be valid for the subscriber’s StructuredProxyPushSupplier object. If the FilterID is not valid for any proxy object associated with the event channel, then a FilterNotFound exception is thrown. The operation is only used by subscribers that shut down and restart.
b. Filter object references returned by this operation can be used by the CosNotifyFilter::Filter::destroy operations but are of little use since they cannot be modified or added to proxy objects.
Note: Always returns CosNotifyChannelAdmin::PUSH_STRUCTURED proxy.void connect_structured_push_supplier (
in CosNotifyComm::StructuredPushSupplier push_supplier)
raises(CosEventChannelAdmin::AlreadyConnected);
// The following operations are inherited.
readonly attribute MyType;
void push_structured_event(
in CosNotification::StructuredEvent notification )
raises( CosEventComm::Disconnected );
void disconnect_structured_push_consumer();
};
}; \\StructuredProxyPushConsumervoid connect_structured_push_supplier (
in CosNotifyComm::StructuredPushSupplier push_supplier)
raises(CosEventChannelAdmin::AlreadyConnected);
3.
Note:
Note:
Note: This operation differs from the standard CORBA definition in the following ways:
a. The Priority in the variable header section of the event, if specified, must be short value in the range of 1 to 100.
b. If event filterable data filtering (versus filtering on domain and type only) is required, or if events are to be received by an Oracle Tuxedo subscriber, then additional restrictions apply. See “Structured Event Fields, Types, and Filters” on page -5 and “Interoperability with Oracle Tuxedo Applications” on page -9.
Note:
Note:
Note: Always returns CosNotifyChannelAmdmin::PUSH_STRUCTURED proxy.Module CosNotifyChannelAdmin
{
interface ConsumerAdmin :ProxySupplier obtain_notification_push_supplier (
in ClientType ctype,
out ProxyID proxy_id)
raises ( AdminLimitExceeded )};
}; //CosNotifyChannelAdminProxySupplier obtain_notification_push_supplier (
in ClientType ctype,
out ProxyID proxy_id)
raises ( AdminLimitExceeded )Used when subscribing. This operation is used in subscriber applications to create proxy push supplier objects. Only structured events are supported (that is, ANY_EVENT and SEQUENCE_EVENT ClientTypes are not supported). Therefore, the ClientType input parameter must be set to CosNotifyComm::STRUCTURED_EVENT. If you shut down and restart the subscriber and subscription survives more than one run of your program, the ProxyID returned by this operation should be durably stored. The subscriber must narrow the proxy supplier to CosNotifyChannelAdmin::StructuredProxyPushSupplier. All required operations must be completed in five minutes.
Note: Notification Service applications that start and shut down only once can use the proxy_id to determine if their subscription has been cancelled automatically or by the system administrator.This operation returns the new proxy’s object reference. The new proxy_id is also returned through the proxy_id out parameter.
Note: Returns the proxy push supplier object created using the consumer admin object obtain_notification_push_supplier operation.CosNotifyChannelAdmin::ProxyNotFoundIndicates that the ProxyID could not be found.Used when unsubscribing. This operation is used in subscriber applications to return the proxy push supplier object created using the consumer admin object obtain_notification_push_supplier operation. The ProxyID input parameter uniquely identifies the proxy object. Callers should be aware that the proxy object can be destroyed either due to an error in delivering a transient subscription or through an ntsadmin administrative command. When a proxy object is destroyed, the ProxyID associated with it is invalidated. If the ProxyID is invalid, a ProxyNotFound exception is raised. The subscriber must narrow the proxy supplier to CosNotifyChannelAdmin::StructuredProxyPushSupplier.Module CosNotifyChannelAdmin
{
interface SupplierAdmin :
CosNotification::QoSAdmin,
CosNotifyComm::NotifyPublish,
CosNotifyFilter::FilterAdmin,
CosEventChannelAdmin::SupplierAdmin {ProxyConsumer obtain_notification_push_consumer (
in ClientType ctype,
out ProxyID proxy_id)
raises ( AdminLimitExceeded );
};
}; //SupplierAdminProxyConsumer obtain_notification_push_consumer (
in ClientType ctype,
out ProxyID proxy_id)
raises ( AdminLimitExceeded );Used when posting events. This operation is used in poster applications to create proxy push consumer objects. ClientType must be set to “CosNotifyChannelAdmin::STRUCTURED_EVENT”. The ProxyID returned should be ignored. The Proxy Consumer must be narrowed the proxy supplier to CosNotifyChannelAdmin::StructuredProxyPushConsumer.
Note: Notification Service applications that start and shut down only once can use the proxy_id to determine if their subscription has been cancelled automatically or by the system administrator.This operation returns the new proxy’s object reference. The new proxy_id is also returned through the proxy_id out parameter.
Note: Module CosNotifyChannelAdmin
{
interface EventChannel :
CosNotification::QoSAdmin,
CosNotification::AdminPropertiesAdmin,
CosEventChannelAdmin::EventChannel {readonly attribute ConsumerAdmin default_consumer_admin;
readonly attribute SupplierAdmin default_supplier_admin;
readonly attribute CosNotifyFilter::FilterFactory
default_filter_factory;
};
}; //CosNotifyChannelAdmin
Note:
Note:
Note: Module CosNotifyChannelAdmin
{
interface EventChannelFactory {
EventChannel get_event_channel ( in ChannelID id )
raises (ChannelNotFound);
};
}; //CosNotifyChannelAdminUsed when subscribing, unsubscribing, and posting events. This operation is used in applications to get the EventChannel object. When subscribing, the EventChannel object is used to get the filter factory object and the ConsumerAdmin object. When unsubscribing, the EventChannel object is used to get the ConsumerAdmin object.When posting an event, the EventChannel object is used to get the SupplierAdmin object. The ChannelID parameter that is passed in must be set to Tobj_Notification::DEFAULT_CHANNEL; otherwise, the ChannelNotFound exception is raised.
Note: Module CosNotifyComm
{
interface StructuredPushConsumer : NotifyPublish {void push_structured_event(
in CosNotification::StructuredEvent event)
raises(CosEventComm::Disconnected);
void disconnect_structured_push_consumer:
//The following operations are inherited.
void offer_change(
in CosNotification::EventTypeSeq added,
in CosNotification::EventTypeSeq removed )
raises ( InvalidEventType );
};
}; //CosNotifyCommvoid push_structured_event(
in CosNotification::StructuredEvent event)
raises(CosEventComm::Disconnected);CosEventComm::Disconnected
Note: This section provides information about the Notification Service exception symbols and minor codes. The minor codes are in the Tobj_Events.idl and Tobj_Notification.idl files. These files are located in the tuxdir\include directory (for Microsoft Windows systems) and tuxdir/include directory (for UNIX systems).Table 2‑4 and Table 2‑5 list the exception symbols and corresponding minor codes for the Tobj_Events and Tobj_Notification exceptions respectively. CORBA system events have a minor code field and those minor codes are also defined in these tables.
Note: The exception symbols are organized within the tables by the higher-level exceptions (CORBA::IMP_LIMIT, CORBA::CORBA::BAD_PARAM, CORBA::BAD_INV_ORDER, CORBA::INV_OBHJREF, and CORBA::OBJECT_NOT_EXIST) and listed in alphabetical order.
Table 2‑4 Tobj_Events Exception Minor Codes When posting an event, the user tried to post an Oracle Tuxedo system event; that is, the domain name is "TMEVT" and the type name starts with the "." character.
• Tobj_SimpleEvents::Channel::
push_structured_event When posting an event, the user added a "Priority" field in the variable header. However, the user did not set the field's value to a "short" in the range of 1–100. When looking up the channel using the Simple Events API, the user specified an invalid channel ID, that is, a channel ID that is not Tobj_SimpleEvents::
DEFAULT_CHANNEL. When calling the exists operation using the Oracle Simple Events API, the user passed in a CosNotification subscription_id. Check that you have correctly created FML field tables that contain all fields that you want to data filter on, and check that the UBBCONFIG file is properly configured so that the field table files can be found.
• The name must be Tobj_SimpleEvents::
SUBSCRIPTION_TYPE.
• The value must be either Tobj_SimpleEvents::
TRANSIENT_SUBSCRIPTION or Tobj_SimpleEvents::
PERSISTENT_SUBSCRIPTION.
• The quality of service must contain a name/value pair where the name is Tobj_Notification::
SUBSCRIPTION_TYPE and the value is Tobj_Notification::
TRANSIENT_SUBSCRIPTION or Tobj_Notification::
PERSISTENT_SUBSCRIPTION.
• The quality of service may contain a name/value pair where the name is Tobj_Notification::SUBSCRIPTION_NAME and the value is a string containing the subscription’s administrative name.
Table 2‑5 Tobj_Notification Exception Minor Codes A CosNotification subscriber waited more than five minutes after creating a filter to call add_constraints on the filter. This means that the filter has been destroyed (timed out) and the subscriber must create a new filter. A CosNotification subscriber called add_constraints on a filter that had already been added to a proxy. After creating a filter and calling "add_constraints" on it, a CosNotification subscriber waited more than five minutes to call add_filter to add the filter to the proxy. This means that the filter has been destroyed (timed out) and that the subscriber must create a new filter. A CosNotification subscriber called add_filter after connecting to the proxy. A CosNotification subscriber called set_qos after connecting to the proxy. A CosNotification subscriber called add_constraints more than once on a filter. A CosNotification subscriber called add_filter more than once on a proxy. A CosNotification subscriber called set_qos more than once on a proxy. When a CosNotification subscriber called add_constraints on a filter, the subscriber passed in a list of constraints that had more than one item; that is, the subscriber was trying to send in a list of data filters instead of one data filter. When a CosNotification subscriber called add_constraints on a filter, the subscriber passed on a constraint that had more than one domain/type set; that is, the subscriber was trying to send in a list of desired event types instead of one event type. A CosNotification subscriber passed a filter object that was not created by the default filter factory into add_filter. For example, a CosNotification subscriber implemented the CosNotifyFilter::Filter interface to do some kind of "custom" filtering and passed one of those filter objects into add_filter. A CosNotification subscriber did not call add_filter to the proxy before connecting to the proxy. A CosNotification subscriber did not call add_filter to the proxy before connecting to the proxy. A CosNotification subscriber passed in a domain name of "TMEVT" and a type name that begins with "."; that is, the CosNotification subscriber was trying to subscribe to Tuxedo system events. This is not supported. It is only supported by the Simple Events API. When creating a proxy, a CosNotification subscriber or poster passed in a client type other than CosNotifyChannelAdmin::STRUCTURED_EVENT.
Note: connect_structured_push_
consumer can raise this exception since a user can create the proxy, then use the ntsadmin utility to delete the subscription, and then call connect_structured_push_
consumer on the proxy.
• The administrator used the ntsadmin utility to destroy the subscription.