This property specifies the type of persistent storage being used for persisting events by the channel. VisiNotify stores persistent events either in memory mapped files or flat files depending on the value of this property. A value of (CORBA::Short)1 implies memory mapped persistency. A value of (CORBA::Short)2 implies flat file persistency.
• True - a channel acknowledges a supplier only after successfully committing a event into persistent storage.
• False (default) - a channel can acknowledge supplier (such as, return from a push() call) immediately before committing the event into persistent storage and perform a lazy commit, afterwards.The VBPersistentStorageOverflowBlockTimeout property specifies how long the supplier should be blocked to wait for persistent storage to be freed up. Upon expiration of this time interval, the channel will attempt to downgrade one or more events to BestEffort to accommodate the new event (see “VBPersistentOverflowDowngradePolicy”).
• AnyOrder (default) - Lifo is used.
• FifoOrder - Events in the queue are downgraded in ascending order of the time of receipt of the event.
• LifoOrder - The new event is downgraded.
1 This property is used to fine-tune the thread pool behavior and is applicable only when the VBProxyPushSupplierThreadModel is set to “pool” and the thread pool is restricted to have a finite number of threads to serve the proxy push suppliers. A proxy push object picks up a thread from the thread pool to push events to the connected thread pool. If this proxy object has a lot of pending events, it may end up hogging the thread, leaving other proxies starved. To have a control over this situation, a watermark in the queue of each proxy object can be set, so that on hitting the watermark, the thread gets preempted to serve a different proxy push supplier object.Indicates the number of events discarded due to queue overflow. Trying to set any value on this property by using the set_qos API resets the counter to 0. The actual value passed in will be ignored.Indicates the total number of events discarded due to failed filter match. Trying to set any value on this property by using the set_qos API resets the counter to 0. The actual value passed in will be ignored.
• If set_qos() is passed a VisiBroker-specific QoS, and the property value is bad, it is silently ignored and no exception is thrown. Exception is thrown for only OMG specified QoS.
• True (default) - prints the message.
• False - does not print the message.
• True - the channel will make use of event-level QoS when delivering event, such as EventReliability.
• False (default) - the channel ignores event-level QoS when delivering an event. Instead, the QoS setting at the proxy/admin/channel is adopted.
•
•
• The default value of this property is VBPersistentStorageSize.The default value of this property is VBPersistentCommitSyncPolicy.The default value of this property is VBPersistentStorageOverflowBlockTimeout.
• To see the debug log statements from this service, set this property to true. For the various source names options for debug log filtering, see the “Debug Logging properties” section of the VisiBroker for C++ Developer's Guide.
•
• The Forwarding filter allows events to be forwarded if it satisfies a constraint set by the clients. Thus, consumers can use forwarding filters to receive only events that interest them. The forwarding filter objects implement the CosNotifyFilter::Filter interface.The Mapping filter enables consumers to change the priority and lifetime properties of events which satisfies a constraint. Mapping filter objects implements the CosNotifyFilter::MappingFilter interface. However, VisiNotify currently does not support mapping filters.A filter object can be attached to a target object such as consumer/supplier proxy or consumer/supplier admin objects. Any given filter object can have a set of constraints and each constraint is expressed in the Extended Trader Constraint Language (TCL). A constraint expression either evaluates to TRUE (indicating that an event satisfies the constraint) or FALSE (indicating otherwise).As long as one of the constraints is set to TRUE, the filter object will forward the event immediately. An event is discarded if the target object has its attached filters set to FALSE. For more information about writing constraint expressions see “Writing Filter Constraint Expressions” on page 88, and for more information about Extended TCL see “Extended Trader Constraint Language (Extended TCL)” on page 89.You can create a consumer admin by invoking new_for_consumers() on the channel and pass the value AND_OP (for AND semantics) or OR_OP (for OR semantics) to set the inter-filter group operator semantics on the consumer admin object. Likewise, you can create a supplier admin by invoking new_for_suppliers(). Calling default_consumer_admin() or default_supplier_admin() on the channel will return the default consumer admin or supplier admin, respectively, with AND semantics.
1 Obtain a Forwarding Filter Factory. VisiNotify provides a default filter factory. To obtain a reference to it simply invoke the method default_filter_factory() on the following channel:
2 Create a Forwarding Filter object. VisiNotify only supports the Extended Trader Constraint Language as specified by the OMG Notification Service. To create a filter that specifies the constraints, simply invoke the method create_filter(EXTENDED_TCL) on the filter factory object obtained in Step 1.
3 Creating constraints. For any given filter object a set of constraints can be associated with it. The constraint expression is written in Extended TCL.To learn more about the Extended TCL see “Extended Trader Constraint Language (Extended TCL)” on page 89 and refer to the OMG Notification Service specification (Section 2.4 - The Default Filter Constraint Language).
4 Adding constraints to a filter object. To add a set of constraints simply invoke the method add_constraints on the filter object obtained in Step 2 passing in the set of constraints created in Step 3.
5 Adding a filter to a target object. The target object can be an admin object or a proxy object. The creation of the target object is required before the filter object is attached to it. This example shows a structured push supplier proxy:To attach the filter object to a target object simply invoke add_filter on the target object. The add_filter operation accepts a filter object and returns a filter id unique to the particular target object. This example shows add_filter being invoked on a structured push supplier proxy and is passed a filter object created in Step 2.A constraint expression is a boolean expression (that is, it evaluates with either TRUE or FALSE). A constraint expression typically refers to event data, which also includes filterable data that the application is most likely to base filtering decisions.A structured event is defined in CosNotification.idl as follows:A typed event contains a sequence of name-value pairs in which the first item in the sequence refers to a CosNotification::EventType that contains domain_name referring to the name of the typed interface and type_name referring to the name of the operation in that interface. The remaining items in the sequence of name-value pairs are filterable data in which each item contains a name referring to an input parameter for the operation within the typed interface and the value refers to the parameter value for that operation.In this example, the typed event foo::bar is received and the second item in the sequence of name-value pairs will be named first paired with a string value and the third item in the sequence will be named second paired with a long value.A constraint expression written in Extended TCL evaluates to either a TRUE or FALSE value. These two values are reserved words in TCL. The value of TRUE in Extended TCL is 1 and the value of FALSE is 0 (zero). Hence, we can have an expression like the following:that will yield a result of 2. Sub-expressions can be specified by surrounding the sub-expression with brackets like the following:Extended TCL supports the means of referring to complex data types (that is, the IDL types of struct, enum, union and any) within an event. An event is represented by a $ (dollar sign) symbol and attributes within an event are referenced by using a . (period) symbol similar to the C++ or Java programming constructs used today.For example, in order to refer to a structured event's fixed header event_name attribute, we would write:In a typed event, if the application has an interface named foo that has an operation named bar that takes in its first parameter a string called first, we would refer to it by writing:When the event data does not exist or if the data types of both operands for an operation do not match (for example 'A String' == 3.14) then the constraint will evaluate to FALSE.It is possible to refer to specific reserved attributes in an event as well as filterable data by using run-time variables in Extended TCL. A run-time variable is represented by prefixing a $ (dollar sign) symbol before the identifier name. For example, $event_name would actually be the same as writing $.header.fixed_header.event_name. When run-time variables are used, the identifier is matched with reserved attributes within an event. If the identifier is not a reserved attribute within an event then it is matched with the filterable data.
Arrays and sequences can be accessed via the subscript operator [n]. For example, in order to access the second element of an array we would write: