The OMG Notification Service specifies three kinds of pre-defined event channels: Untyped,
Structured, and
Sequence. The advantage of pre-defined channels is that they are easy for user level implementations. Therefore, almost all notification service products on the market support pre-defined channels. The disadvantage of pre-defined channels are:
The following push consumer example is located in
<install_dir>/examples/vbroker/notify/basic_cpp/structPushConsumer.C.
// 1. Implementing the push consumer servant
class StructuredPushConsumerImpl : public POA_CosNotifyComm::StructuredPushConsumer, public virtual PortableServer::RefCountServantBase
{
...
public:
...
void push_structured_event(const CosNotification::StructuredEvent&
event) { ... }
...
};
// The consumer server
int main(int argc, char** argv)
{
// get orb and POA ...
...
// construct a push consumer servant
StructuredPushConsumerImpl* servant = new StructuredPushConsumerImpl;
// 2. Activate the consumer servant on a POA
poa->activate_object(servant);
// 3. Activate the POA
poa->the_POAManager()->activate();
...
// 4. Somehow, we get the channel from somewhere
CosNotifyChannelAdmin::EventChannel_var channel = ...;
// 5. Somehow, we decide to use the default admin
CosNotifyChannelAdmin::ConsumerAdmin_var admin =
channel->default_consumer_admin();
// 6. Obtain a proxy push supplier from the admin
CosNotifyChannelAdmin::ProxyID pxy_id;
CosNotifyChannelAdmin::ProxySupplier_var proxy =
admin->obtain_notification_push_supplier(
CosNotifyChannelAdmin::STRUCTURED_EVENT, pxy_id);
CosNotifyChannelAdmin::StructuredProxyPushSupplier_var supplier =
CosNotifyChannelAdmin::StructuredProxyPushSupplier::_narrow(proxy);
// 7. Get consumer object reference and connect it to the proxy
CORBA::Object_var obj = poa->servant_to_reference(servant);
CosNotifyComm::StructuredPushConsumer_var consumer
= CosNotifyComm::StructuredPushConsumer::_narrow(obj);
supplier->connect_structured_push_consumer(consumer);
// working loop
orb->run();
}
The following push consumer example is located in
<install_dir>/examples/vbroker/notify/basic_java/structPushConsumer.java.
// 1. Implement the push consumer servant
public void push_structured_event(StructuredEvent event) { ... }
...
public static int main(String[] args) {
// get orb and POA ...
...
// construct a push consumer servant
StructPushConsumerImpl servant = new StructPushConsumerImpl();
// 2. Activate the consumer servant on a POA
poa.activate_object(servant);
// 3. Activate the POA
poa.the_POAManager().activate();
...
// 4. Somehow, we get the channel from somewhere
EventChannel channel = ...;
// 5. Somehow, we decide to use the default admin
ConsumerAdmin admin = channel.default_consumer_admin();
// 6. Obtain a proxy push supplier from the admin
ProxyIDHolder pxy_id = new ProxyIDHolder();
ProxySupplier proxy = admin.obtain_notification_push_supplier(
ClientType.STRUCTURED_EVENT, pxy_id);
StructuredProxyPushSupplier supplier
= StructuredProxyPushSupplierHelper.narrow(proxy);
// 7. Get consumer object reference and connect it to the proxy
org.omg.CORBA::Object obj = poa.servant_to_reference(servant);
StructuredPushConsumer consumer = StructuredPushConsumerHelper.narrow(obj);
supplier.connect_structured_push_consumer(consumer);
// working loop
orb.run();
}
}
The following pull consumer example is located in
<install_dir>/examples/vbroker/notify/basic_cpp/structPullConsumer.C.
// The consumer client
int main(int argc, char** argv)
{
// get orb ...
...
// 1. Somehow, we get the channel from somewhere
CosNotifyChannelAdmin::EventChannel_var channel = ...;
// 2. Somehow, we decide to use the default admin
CosNotifyChannelAdmin::ConsumerAdmin_var admin =
channel->default_consumer_admin();
// 3. Obtain a proxy pull supplier from the admin
CosNotifyChannelAdmin::ProxyID pxy_id;
CosNotifyChannelAdmin::ProxySupplier_var proxy =
admin->obtain_notification_pull_supplier(
CosNotifyChannelAdmin::STRUCTURED_EVENT, pxy_id);
CosNotifyChannelAdmin::StructuredProxyPullSupplier_var supplier =
CosNotifyChannelAdmin::StructuredProxyPullSupplier::_narrow(proxy);
// 4. Connect to the proxy
supplier->connect_structured_pull_consumer(NULL);
// 5. Pull events from the proxy pull supplier
for(int i=0;i<100;i++) {
CosNotification::StructuredEvent_var event;
event = supplier->pull_structured_event();
...
}
// 6. Gracefully cleanup
supplier->disconnect_structured_pull_supplier();
}
The following pull consumer example is located in
<install_dir>/examples/vbroker/notify/basic_java/structPullConsumer.java.
StructuredProxyPullSupplierHelper.narrow(proxy);
// 4. Connect to the proxy
supplier.connect_structured_pull_consumer(null);
// 5. Pull events from the proxy pull supplier
for(int i=0;i<100;i++) {
StructuredEvent event = supplier.pull_structured_event();
...
}
// 6. Gracefully cleanup
supplier.disconnect_structured_pull_supplier();
}
}
The push supplier example is located in examples/vbroker/notify/basic_cpp/structPushSupplier.C.
// The push supplier client
int main(int argc, char** argv)
{
// get orb ...
...
// 1. Somehow, we get the channel from somewhere
CosNotifyChannelAdmin::EventChannel_var channel = ...;
// 2. Somehow, we decide to use the default admin
CosNotifyChannelAdmin::SupplierAdmin_var admin =
channel->default_supplier_admin();
// 3. Obtain a proxy push consumer from the admin
CosNotifyChannelAdmin::ProxyID pxy_id;
CosNotifyChannelAdmin::ProxyConsumer_var proxy =
admin->obtain_notification_push_consumer(
CosNotifyChannelAdmin::STRUCTURED_EVENT, pxy_id);
CosNotifyChannelAdmin::StructuredProxyPushConsumer_var consumer
= CosNotifyChannelAdmin::StructuredProxyPushConsumer::_narrow(proxy);
// 4. Connect to the proxy
consumer->connect_structured_push_supplier(NULL);
// 5. Push events to the proxy push consumer
for(int i=0;i<100;i++) {
CosNotification::StructuredEvent_var event = ...;
consumer->push_structured_event(event);
}
// 6. Gracefully cleanup
consumer->disconnect_structured_push_consumer();
}
The pull supplier example is located in examples/vbroker/notify/basic_cpp/structPullSupplier.C.
// 1. Implement the pull supplier servant
class StructuredPullSupplierImpl : public
POA_CosNotifyComm::StructuredPullSupplier, public virtual
PortableServer::RefCountServantBase
{
...
public:
...
CosNotification::StructuredEvent* pull_structured_event() { ... }
CosNotification::StructuredEvent* try_pull_structured_event(
CORBA::Boolean& has_event) { ... }
...
};
// The supplier server
int main(int argc, char** argv)
{
// get orb and POA ...
...
// Construct a pull supplier servant
StructuredPullSupplierImpl* servant = new StructuredPullSupplierImpl;
// 2. Activate the consumer servant on a POA
poa->activate_object(servant);
// 3. Activate the POA
poa->the_POAManager()->activate();
...
// 4. Somehow, we get the channel from somewhere
CosNotifyChannelAdmin::EventChannel_var channel = ...;
// 5. Somehow, we decide to use the default admin
CosNotifyChannelAdmin::SupplierAdmin_var admin = channel
->default_supplier_admin();
// 6. Obtain a proxy pull consumer from the admin
CosNotifyChannelAdmin::ProxyID pxy_id;
CosNotifyChannelAdmin::ProxyConsumer_var proxy = admin
->obtain_notification_pull_consumer(
CosNotifyChannelAdmin::STRUCTURED_EVENT, pxy_id);
CosNotifyChannelAdmin::StructuredProxyPullConsumer_var consumer =
CosNotifyChannelAdmin::StructuredProxyPullConsumer::_narrow(proxy);
// 7. Get supplier object reference and connect it to the proxy
CORBA::Object_var obj = poa->servant_to_reference(servant);
CosNotifyComm::StructuredPullSupplier_var supplier
= CosNotifyComm::StructuredPullSupplier::_narrow(obj);
consumer->connect_structured_pull_supplier(supplier);
// working loop
orb->run();
}
The pull supplier example is located in examples/vbroker/notify/basic_java/structPullSupplier.java.
import org.omg.CosNotifyComm.*;
import org.omg.CosNotifyChannelAdmin,*;
import org.omg.CosNotification.*;
class structPullSupplierImpl extends StructuredPullSupplierPOA
{
...
// 1. Implement the push consumer servant
public StructuredEvent pull_structured_event() { ... }
public StructuredEvent try_pull_structured_event(
org.omg.CORBA.BooleanHolder has_event) {...}
...
public static int main(String[] args) {
// Get orb and POA ...
...
// A pull supplier servant
structPullSupplierImpl servant = new structPullSupplierImpl();
// 2. Activate the supplier servant on a POA
poa.activate_object(servant);
// 3. Activate the POA
poa.the_POAManager()Activate();
...
// 4. Somehow, we get the channel from somewhere
EventChannel channel = ...;
// 5. Somehow, we decide to use the default admin
ConsumerAdmin admin = channel.default_supplier_admin();
// 6. Obtain a proxy pull consumer from the admin
ProxyIDHolder pxy_id = new ProxyIDHolder();
ProxyConsumer proxy = admin.obtain_notification_pull_consumer(
ClientType.STRUCTURED_EVENT, pxy_id);
StructuredProxyPullConsumer consumer =
StructuredProxyPullConsumerHelper.narrow(proxy);
// 7. Get supplier object reference and connect it to the proxy
org.omg.CORBA::Object obj = poa.servant_to_reference(servant);
StructuredPullSupplier supplier =
StructuredPullSupplierHelper.narrow(obj);
consumer.connect_structured_pull_supplier(supplier);
// working loop
orb.run();
}
}
VisiBroker Publish/Subscribe Adapter (PSA) architecture resolves these two issues. See “Using the Publish Subscribe Adapter (PSA)” for additional information. The PSA simplifies and unifies the connection procedure to notification and typed notification services. It also presents an elegant solution for typed pulling.
The typed push consumer example is located in examples/vbroker/notify/basic_cpp/typedPushConsumer.C.
// 1. Implement the user defined typed consumer servant
class TMNTypedEventImpl : public POA_TMN::TypedEvent,
public virtual PortableServer::RefCountServantBase
{
...
public:
...
void attributeValueChange (...) { ... }
void qosAlarm(...) { ... }
...
};
// 2. Implement the handler servant
class HandlerImpl : public POA_CosTypedNotifyComm::TypedPushConsumer,
public virtual PortableServer::RefCountServantBase
{
CORBA::Object_var _the_typed_consumer; // the <I> interface
public:
HandlerImpl(CORBA::Object_ptr ref)
: _the_typed_consumer(CORBA::Object::_duplicate(ref)) {}
CORBA::Object_ptr get_typed_consumer() {
// return the <I> interface
return CORBA::Object::_duplicate(_the_typed_consumer); }
...
};
// The typed consumer server
int main(int argc, char** argv)
{
// Get orb and POA ...
...
// Construct a push consumer servant
TMNTypedEventImpl* servant = new TMNTypedEventImpl;
// 3. Activate the typed consumer on a POA
poa->activate_object(servant);
// 4. Get typed consumer reference
CORBA::Object_var obj = poa->servant_to_reference(servant);
// 5. Construct a handler servant and pass it the typed consumer reference
HandlerImpl* handler = new HandlerImpl(obj);
// 6. Activate the handler object on a POA
poa->activate_object(handler);
// 7. Activate the POA(s)
poa->the_POAManager()->activate();
...
// 8. Somehow, we get a typed channel
CosTypedNotifyChannelAdmin::TypedEventChannel_var channel = ...;
// 9. Somehow, we decide to use the default admin
CosTypedNotifyChannelAdmin::TypedConsumerAdmin_var admin =
channel->default_consumer_admin();
// 10. Obtain a proxy push supplier from the admin using the event
// repository id "IDL:example.borland.com/TMN/TypedEvent:1.0" as the key.
CosNotifyChannelAdmin::ProxyID pxy_id;
CosTypedNotifyChannelAdmin::ProxySupplier_var proxy
= admin->obtain_typed_notification_push_supplier(
"IDL:example.borland.com/TMN/TypedEvent:1.0", pxy_id);
// 11. Get handler object reference and connect it to the proxy
CORBA::Object_var ref = poa->servant_to_reference(handler);
CosTypedNotifyComm::TypedPushConsumer_var consumer
= CosTypedNotifyComm::TypedPushConsumer::_narrow(ref);
proxy->connect_typed_push_consumer(consumer);
// working loop
orb->run();
}
The typed push consumer example is located in examples/vbroker/notify/basic_java/typedPushConsumer.java.
// 1. Implement the user defined typed consumer servant
class TMNTypedEventImpl extends TMN.TypedEventPOA {
...
public void attributeValueChange (...) { ... }
public void qosAlarm(...) { ... }
...
}
// 2. Implement the handler servant
class TypedPushConsumerImpl
extends org.omg.CosTypedNotifyComm.TypedPushConsumer {
org.omg.CORBA.Object _the_typed_consumer = null; // the <I> interface
TypedPushConsumerImpl(org.omg.CORBA.Object ref) {
_the_typed_consumer = ref;
}
org.omg.CORBA.Object get_typed_consumer() {
// Return the <I> interface
return _the_typed_consumer; }
...
public static void main(String [] args) {
// Get orb and POA ...
...
// Construct a push consumer servant
TMNTypedEventImpl servant = new TMNTypedEventImpl();
// 3. Activate the typed consumer on a POA
poa.activate_object(servant);
// 4. Get typed consumer reference
org.omg.CORBA.Object obj = poa.servant_to_reference(servant);
// 5. Construct a handler servant and pass it the typed consumer reference
TypedPushConsumerImpl handler = new TypedPushConsumerImpl(obj);
// 6. Activate the handler object on a POA
poa.activate_object(handler);
// 7. Activate the POA(s)
poa.the_POAManager()Activate();
...
// 8. Somehow, we get a typed channel from somewhere
org.omg.CosTypedNotifyChannelAdmin.TypedEventChannel channel = ...;
// 9. Somehow, we decide to use the default admin
org.omg.CosTypedNotifyChannelAdmin.TypedConsumerAdmin admin =
channel.default_consumer_admin();
// 10. Obtain a proxy push supplier from the admin using the event
// repository id "IDL:example.borland.com/TMN/TypedEvent:1.0" as the key.
org.omg.CosNotifyChannelAdmin.ProxyIDHolder pxy_id_holder
= new org.omg.CosNotifyChannelAdmin.ProxyIDHolder();
org.omg.CosTypedNotifyChannelAdmin.ProxySupplier proxy
= admin.obtain_typed_notification_push_supplier(
"IDL:example.borland.com/TMN/TypedEvent:1.0", pxy_id_holder);
// 11. Get handler object reference and connect it to the proxy
org.omg.CORBA.Object ref = poa.servant_to_reference(handler);
org.omg.CosTypedNotifyComm.TypedPushConsumer consumer =
org.omg.CosTypedNotifyComm.TypedPushConsumerHelper.narrow(ref);
proxy.connect_typed_push_consumer(consumer);
// working loop
orb.run();
}
}
•
|
Calling get_typed_consumer() on the typed proxy push consumer to get the <I> interface reference.
|
The typed push supplier example is located in examples/vbroker/notify/basic_cpp/typedPushSupplier.C.
// The typed push supplier client
int main(int argc, char** argv)
{
// Get orb ...
...
// 1. Somehow, we get the typed channel from somewhere
CosTypedNotifyChannelAdmin::TypedEventChannel_var channel = ...;
// 2. Somehow, we decide to use the default admin
CosTypedNotifyChannelAdmin::TypedSupplierAdmin_var admin =
channel->default_supplier_admin();
// 3. Obtain a typed proxy push consumer from the admin using the event
// repository id "IDL:example.borland.com/TMN/TypedEvent:1.0"
// as the key.
CosTypedNotifyChannelAdmin::ProxyID pxy_id;
CosTypedNotifyChannelAdmin::TypedProxyPushConsumer_var proxy
= admin->obtain_typed_notification_push_consumer(
"IDL:example.borland.com/TMN/TypedEvent:1.0", pxy_id);
// 4. Connect to the proxy
proxy->connect_typed_push_supplier(NULL);
// 5. Get the <I> interface
CORBA::Object_var obj = proxy->get_typed_consumer();
TMN::TypedEvent_var consumer = TMN::TypedEvent::_narrow(obj);
// 6. Push events to the <I> interface
for(int i=0;i<100;i++) {
consumer->attributeValueChange(...);
consumer->qosAlarm(...);
}
// 7. Flush buffered events
consumer->_non_existent();
// 8. Gracefully cleanup
proxy->disconnect_typed_push_consumer();
}
The typed push supplier example is located in examples/vbroker/notify/basic_java/typedPushSupplier.java.
import org.omg.CosTypedNotifyComm.*;
import org.omg.CosTypedNotifyChannelAdmin,*;
import org.omg.CosNotification.*;
public class typedPushSupplier
{
...
// The typed push supplier client
public static void main(String[] args) {
// get orb ...
...
// 1. Somehow, we get the typed channel from somewhere
org.omg.CosTypedNotifyChannelAdmin.TypedEventChannel_var channel = ...;
// 2. Somehow, we decide to use the default admin
org.omg.CosTypedNotifyChannelAdmin.TypedSupplierAdmin admin
= channel.default_supplier_admin();
// 3. Obtain a typed proxy push consumer from the admin using the event
// repository id "IDL:example.borland.com/TMN/TypedEvent:1.0"
// as the key.
Org.omg.CosTypedNotifyChannelAdmin.ProxyIDHolder pxy_id = new
org.omg.CosTypedNotifyChannelAdmin.ProxyIDHolder();
CosTypedNotifyChannelAdmin::TypedProxyPushConsumer_var proxy
= admin.obtain_typed_notification_push_consumer(
"IDL:example.borland.com/TMN/TypedEvent:1.0", pxy_id);
// 4. Connect to the proxy
proxy.connect_typed_push_supplier(null);
// 5. Get the <I> interface
org.omg.CORBA.Object obj = proxy.get_typed_consumer();
TMN.TypedEvent consumer = TMN.TypedEventHelper.narrow(obj);
// 6. Push events to the <I> interface
for(int i=0;i<100;i++) {
consumer.attributeValueChange(...);
consumer.qosAlarm(...);
}
// 7. Flush buffered events
consumer._non_existent();
// 8. Gracefully cleanup
proxy.disconnect_typed_push_consumer();
}
}
// 1. Implement the user defined typed consumer RMI object
class RMINotifyImpl
extends PortableRemoteObject
implements TMN.Notification {
...
public void attributeValueChange (...) { ... }
public void qosAlarm(...) { ... }
...
}
// 2. Implement the handler servant
public class TypedPushConsumerImpl
extends org.omg.CosTypedNotifyComm.TypedPushConsumer {
org.omg.CORBA.Object _the_typed_consumer = null;
// the <I> interface
TypedPushConsumerImpl(org.omg.CORBA.Object ref){
_the_typed_consumer = ref;
}
org.omg.CORBA.Object get_typed_consumer() {
// return the <I> interface
return _the_typed_consumer; }
...
public static void main(String [] args) {
// Get orb and POA ...
...
// 3. Allocate a RMI consumer object
RMINotifyImpl consumer = new RMINotifyImpl();
// 4. Get the CORBA object reference of the RMI consumer
org.omg.CORBA.Object corba_obj = javax.rmi.CORBA.Util.getTie(consumer).thisObject();
// 5. Allocate a handler servant and pass it the typed // consumer reference
TypedPushConsumerImpl handler = new TypedPushConsumerImpl(corba_obj);
// 6. Activate the handler object on a POA
poa.activate_object(handler);
// 7. Activate the POA(s)
poa.the_POAManager()Activate();
...
// 8. Somehow, we get a typed channel from somewhere
org.omg.CosTypedNotifyChannelAdmin.TypedEventChannel channel = ...;
// 9. Somehow, we decide to use the default admin
org.omg.CosTypedNotifyChannelAdmin.TypedConsumerAdmin admin =
channel.default_consumer_admin();
// 10. Obtain a proxy push supplier from the admin
org.omg.CosNotifyChannelAdmin.ProxyIDHolder pxy_id_holder = new
import org.omg.CosTypedNotifyComm.*;
import org.omg.CosTypedNotifyChannelAdmin,*;
import org.omg.CosNotification.*;
public class TypedPushSupplierImpl
{
...
// The typed push supplier client
public static void main(String[] args) {
// get orb ...
...
// 1. Somehow, we get the typed channel from somewhere
org.omg.CosTypedNotifyChannelAdmin.TypedEventChannel_var channel = ...;
// 2. Somehow, we decide to use the default admin
org.omg.CosTypedNotifyChannelAdmin.TypedSupplierAdmin admin
= channel.default_supplier_admin();
// 3. Obtain a typed proxy push consumer from the admin
Org.omg.CosTypedNotifyChannelAdmin.ProxyIDHolder pxy_id
= new org.omg.CosTypedNotifyChannelAdmin.ProxyIDHolder();
CosTypedNotifyChannelAdmin::TypedProxyPushConsumer_var proxy
= admin.obtain_typed_notification_push_consumer("RMI.Test, pxy_id);
// 4. Connect to the proxy
proxy.connect_typed_push_supplier(null);
// 5. Get the <I> interface
org.omg.CORBA.Object obj = proxy.get_typed_consumer();
// 6. Narrowing the CORBA object reference into RMI stub.
TMN.Notification consumer = (TMN.Notification)PortableRemoteObject.
narrow(obj, TMN.Notification.class);
// 7. Push events to the <I> RMI stub
for(int i=0;i<100;i++) {
consumer.attributeValueChange(...);
consumer.qosAlarm(...);
}
// 8. Flush buffered events
com.inprise.vbroker.orb.BufferedEvents.flush();
// 9. Gracefully cleanup
proxy.disconnect_typed_push_consumer();
}
}
import javax.ejb.*;
// 1. The bean implementation
public class TMNNotifyBean implements SessionBean {
...
// implement operations declared in bean's remote interface
public void attributeValueChange (...) { ... }
public void qosAlarm(...) { ... }
...
}
In this release, a command line utility, subtool, is provided to subscribe an EJB bean as a typed RMI consumer by knowing its JNDI name. To connect a typed event EJB bean to an OMG Typed Notification channel, use the
subtool command:
•
|
The -channel or -admin option specify the channel or consumer admin object as the subscribe point.
|
•
|
The -home <jndi_name> tells subtool the JNDI name of the bean's Home interface.
|
•
|
The -type typed option tells subtool to connect the bean's remote interface as typed consumer.
|
•
|
The -key <proxy_key> option tells the subtool what should be the key parameter for obtain_typed_notification_push_supplier().
|
This example shows using subtool to subscribe a typed event bean to a OMG Typed Notification Channel:
% subtool -channel corbaloc::127.0.0.1:14100/default_channel \
-home stock_home
-type typed
-key Stock
import javax.ejb.*;
// The bean implementation
public class MyStructuredNotifyBean implements SessionBean {
...
public void push_structured_event( org.omg.CosNotification.StructuredEvent event) { ... }
...
}
•
|
The -channel or -admin option specify the channel or consumer admin object as the subscribe point.
|
•
|
The -home <j ndi_name> tells subtool the JNDI name of the bean's Home interface.
|
•
|
The -type struct option tells subtool to connect the bean's remote interface as structured consumer.
|
This example shows using subtool to subscribe a structured event bean to a VisiNotify Structured Notification Channel:
% subtool -channel corbaloc::127.0.0.1:14100/default_channel \
-home stock_home
-type struct
Event buffer is full: This is a per-stub level flush. The default size of this stub level event buffer is 32K. A given supplier application can use
vbroker.orb.supplier.eventBufferSize to change this size between 8K and 64K. For example:
Number of buffered events reaches the maximum batch size: This is a per-stub level flush. The default maximum number of events that a stub can hold in its buffer is 128. A supplier application can use
vbroker.orb.supplier.maxBatchSize to change this size to any value less than 256. For example:
Internal buffer flush timeout: This is a global flush. On timeout, all events buffered in all stubs will be flushed out. The default timeout interval is 2,000 milliseconds (2 seconds). A supplier application can use
vbroker.orb.supplier.eventBatchTimerInterval to change this time between 100 millisecond (0.1 second) and 10,000 milliseconds (10 seconds). For example:
Therefore, invoking disconnect_..._push_consumer() operations or
_non_existent() on the proxy stubs (above) will flush out all buffered events.
Therefore, a supplier application can invoke _non_existent() operation on an <I> interface stub to flush its buffered events. Notice that the calling
disconnect_typed_push_consumer() on a typed proxy consumer stub will not cause the buffer in a corresponding <I> stub to be flushed. The application should explicitly
call _non_existent() on an <I> interface stub before calling
disconnect_typed_push_consumer() on proxy stub.
A Java supplier application can explicitly call com.inprise.vbroker.orb.BufferedEvents.flush() to flush. This is a global level event flush. It is to support VisiBroker RMI applications because there is no pseudo operation on a java.rmi.Remote interface, which can be used for event flush. Calling this static method will flush out all events in every stub.
By default, VisiNotify uses TCP port number 14100 unless -Dvbroker.notify.listener.port=<port> is used in the command line. Therefore, as specified by OMG Notification Service, the URL of the Channel factory and typed channel factory are:
where, <host> is the domain name or dotted IP address of the VisiNotify host machine. The VisiNotify server also creates a default channel. The URL of this default channel is: