[omniNotify] Using omniNotify without creating endpoints
Mark Zimmerman
markzimm at frii.com
Fri May 21 10:24:25 BST 2004
On Tue, May 18, 2004 at 03:54:55PM +0100, Duncan Grisby wrote:
> On Friday 14 May, Mark Zimmerman wrote:
>
> > I have a small program that does nothing but post a single message to
> > the omniNotify notification channel (from a push_supplier) and exit.
> > It works fine with a default configuration but I am trying to
> > understand why it insists on creating and serving incoming endpoints.
> > Unless I misunderstand the meaning of an incoming endpoint, it seems
> > to me that it doesn't need one.
> >
> > However, when I include 'endPointNoListen = giop:tcp::' in the
> > configuration, it fails:
>
> That doesn't do what you think it does. endPointNoListen asks the ORB
> to publish the given endpoint in IORs, without listening on it. For
> that to work, you have to give the full details of the endpoint, since
> there is no real endpoint to get the details from. Anyway, it's not a
> way to stop your program from listening.
>
> [...]
> > With endPointNoListen excluded, the program works but the endpoints
> > are never used (I think). I have set 'serverTransportRule = * none'
> > which, I believe, will prevent them from accepting connections.
> >
> > Is there something in omniNotify that requires endpoint creation in
> > this context? Is there a way to avoid this?
>
> The incoming endpoints are initialised when you resolve the root POA
> (or get a reference to the BOA). If the code doesn't every get hold of
> the POA, the endpoints are not initialised. Something in your code, or
> a library you are using (are you linking with omniNotify?) must be
> resolving the root POA.
>
I guess it must be the omniNotify library. The only reference to the POA
in my test case was in the destructor. I had forgotten why it was there
so I commented it out (see below) and tried again. I got the error shown
at the bottom of the trace log (see farther below) since the library
apparently resolved the POA and I was now failing to deactivate it.
I am now uncertain as to whether I can make omniNotify not resolve the
root POA when all I want to do is post a message.
// try {
// PortableServer::POA_ptr poa = RefUtils::POA();
// PortableServer::Servant serv = poa->reference_to_servant(_this());
// PortableServer::ObjectId_var oid = poa->servant_to_id(serv);
// poa->deactivate_object(oid);
// }
// catch (...) {} // ignore any error during destroy call
omniORB: Creating ref to remote: key<NameService>
target id : IDL:omg.org/CORBA/Object:1.0
most derived id:
omniORB: Initial reference `NameService' resolved from configuration file.
omniORB: AsyncInvoker: thread id = 1 has started. Total threads = 1
omniORB: Creating ref to remote: key<NameService>
target id : IDL:omg.org/CosNaming/NamingContext:1.0
most derived id:
omniORB: Creating ref to remote: root<4>
target id : IDL:omg.org/CORBA/Object:1.0
most derived id: IDL:att.com/AttNotification/EventChannel:1.0
omniORB: Creating ref to remote: root<4>
target id : IDL:omg.org/CosNotifyChannelAdmin/EventChannel:1.0
most derived id: IDL:att.com/AttNotification/EventChannel:1.0
omniORB: Creating ref to remote: root<27425>
target id : IDL:omg.org/CosNotifyChannelAdmin/SupplierAdmin:1.0
most derived id: IDL:att.com/AttNotification/SupplierAdmin:1.0
omniORB: Creating ref to remote: root<27426>
target id : IDL:omg.org/CosNotifyChannelAdmin/ProxyConsumer:1.0
most derived id: IDL:att.com/AttNotification/StructuredProxyPushConsumer:1.0
omniORB: Creating ref to remote: root<27426>
target id : IDL:omg.org/CosNotifyChannelAdmin/StructuredProxyPushConsumer:1.0
most derived id: IDL:att.com/AttNotification/StructuredProxyPushConsumer:1.0
omniORB: Initialising incoming endpoints.
omniORB: Starting serving incoming endpoints.
omniORB: Adding root<0> (activating) to object table.
omniORB: Creating ref to local: root<0>
target id : IDL:omg.org/CosNotifyComm/StructuredPushSupplier:1.0
most derived id: IDL:omg.org/CosNotifyComm/StructuredPushSupplier:1.0
omniORB: AsyncInvoker: thread id = 2 has started. Total threads = 2
omniORB: ERROR -- A servant has been deleted that is still activated.
id: root<0> (active)
More information about the omninotify-list
mailing list