[omniORB] Client fails to contact naming service

Ivan Ivanov ivan.ivanov@trema.com
Wed, 27 Jun 2001 03:31:12 -0700


Hi,
well, seems you hit some initialization problem.
Workaround could be not to use DllMain for this purpose
and delay NameService reference resolving
until all global variables and modules
are loaded. Doing initialization for somethnig else
than local variables is not a good idea in general,
cheers,
Ivan





-----Original Message-----
From: owner-omniorb-list@uk.research.att.com
[mailto:owner-omniorb-list@uk.research.att.com]On Behalf Of Jonas
Reimers
Sent: Tuesday, June 26, 2001 6:57 AM
To: omniorb-list@uk.research.att.com
Subject: [omniORB] Client fails to contact naming service


-
Hello!

I have a client inside a DLL. When the DLL is loaded the client is supposed
to
connect to the name service, but all I get is COMM::FAILURE
After some searching I belive that the failure is when narrowing the
returned
ref. This works just fine with my server

The important part off the source looks like this:

CLIENT:

extern "C" int APIENTRY DllMain(HINSTANCE hInstance, DWORD
ul_reason_for_call,
LPVOID lpReserved)
{

  switch(ul_reason_for_call){

     case DLL_PROCESS_DETACH:
          orb->destroy();
          break;

     case DLL_PROCESS_ATTACH:

          try{//When the DLL is loaded connect to NameService

              int argc = 3;
               char * argv[3];
               argv[0] = "OPCS";
               argv[1] = "-ORBInitRef";
               argv[2] = "NameService=corbaname::localhost:2809";

               orb = CORBA::ORB_init(argc,argv,"omniORB3");

               CORBA::Object_var obj = getObjectReference(orb);

               Op_ref = Op::_narrow(obj);

          }

     catch{
     .
     .
     EXCEPTION HANDLING
     .
     .
     }
   return 1;
}

static CORBA::Object_ptr getObjectReference(CORBA::ORB_ptr orb)
{

     CosNaming::NamingContext_var rootContext;

     try{

               //Get the root naming context.
               CORBA::Object_var obj;

               obj = orb->resolve_initial_references("NameService");

               //Narrow the reference returned.
               rootContext = CosNaming::NamingContext::_narrow(obj); // THE
FAILURE SEEMS TO BE HERE?

               if(CORBA::is_nil(rootContext))
               {
                    MessageBox(NULL,"Failed to narrow the root naming
context."
,"CORBA", MB_ICONWARNING);

                    return CORBA::Object::_nil();
               }
          }

Running omninames with ORBtraceLevel 20 gives this output:

C:\corba\Orb\bin\x86_win32>omninames -ORBtraceLevel 20
omniORB: The omniDynamic library is not linked.
omniORB: Initialising incoming rope factories.
omniORB: strand Rope::incrRefCount: old value = 0
omniORB: Starting incoming rope factories.
omniORB: Activating: key<0x4e616d6553657276696365>
omniORB: Activating: root/<0>
omniORB: Activating: root/<16777216>
omniORB: strand Rope::incrRefCount: old value = 1
omniORB: strand Rope::decrRefCount: old value = 2
omniORB: Creating ref to local: key<0x4e616d6553657276696365>
 target id      : IDL:omg.org/CORBA/Object:1.0
 most derived id: IDL:omg.org/CosNaming/NamingContextExt:1.0
omniORB: strand Rope::incrRefCount: old value = 1
omniORB: strand Rope::decrRefCount: old value = 2
omniORB: Creating ref to local: root/<0>
 target id      : IDL:omg.org/CORBA/Object:1.0
 most derived id: IDL:omg.org/CosNaming/NamingContextExt:1.0
omniORB: createObjRef -- reusing reference from local ref list.
omniORB: Ref to: key<0x4e616d6553657276696365> -- deleted.
omniORB: strand Rope::incrRefCount: old value = 1
omniORB: strand Rope::decrRefCount: old value = 2
omniORB: Creating ref to local: key<0x4e616d6553657276696365>
 target id      : IDL:omg.org/CORBA/Object:1.0
 most derived id: IDL:omg.org/CosNaming/NamingContextExt:1.0
omniORB: strand Rope::incrRefCount: old value = 1
omniORB: strand Rope::decrRefCount: old value = 2
omniORB: Creating ref to local: root/<16777216>
 target id      : IDL:omg.org/CORBA/Object:1.0
 most derived id: IDL:omg.org/CosNaming/NamingContextExt:1.0
omniORB: createObjRef -- reusing reference from local ref list.
omniORB: Ref to: key<0x4e616d6553657276696365> -- deleted.
omniORB: strand Rope::incrRefCount: old value = 1
omniORB: strand Rope::decrRefCount: old value = 2
omniORB: createObjRef -- reusing reference from local ref list.
omniORB: strand Rope::incrRefCount: old value = 0
omniORB: Creating ref to remote: root<0>
 target id      : IDL:omg.org/CORBA/Object:1.0
 most derived id: IDL:Op:1.0
omniORB: createObjRef -- reusing reference from local ref list.
omniORB: strand Rope::incrRefCount: old value = 1
omniORB: strand Rope::decrRefCount: old value = 2
omniORB: createObjRef -- reusing reference from local ref list.
omniORB: strand Rope::incrRefCount: old value = 0
omniORB: Creating ref to remote: root<0>
 target id      : IDL:omg.org/CORBA/Object:1.0
 most derived id: IDL:Op:1.0
omniORB: createObjRef -- reusing reference from local ref list.

Tue Jun 26 14:53:35 2001:

Read log file successfully.
omniORB: Creating ref to local: key<0x4e616d6553657276696365>
 target id      : IDL:omg.org/CosNaming/NamingContextExt:1.0
 most derived id: IDL:omg.org/CosNaming/NamingContextExt:1.0
Root context is
IOR:010000002b00000049444c3a6f6d672e6f72672f436f734e616d696e672f4e616d696e67
436f6e

6578744578743a312e300000010000000000000027000000010100000d00000031302e323430
2e37372e3733003af90a0b

00004e616d6553657276696365
Checkpointing Phase 1: Prepare.
omniORB: createObjRef -- reusing reference from local ref list.
omniORB: createObjRef -- reusing reference from local ref list.
omniORB: createObjRef -- reusing reference from local ref list.
omniORB: createObjRef -- reusing reference from local ref list.
Checkpointing Phase 2: Commit.
Checkpointing completed.
omniORB: strand Ripper: start.
omniORB: scavenger : start.
omniORB: tcpSocketMTfactory Rendezvouser: start.
omniORB: tcpSocketMTfactory Rendezvouser: block on accept()
omniORB: scavenger : scanning connections
omniORB: scavenger : scanning connections
omniORB: scavenger : scanning connections
omniORB: scavenger : scanning connections

My .cfg file lokks like this:

# omniOrb configuration file - basic options
#
ORBInitRef NameService=corbaname::localhost:2809
#
#ORBDefaultInitRef corbaname::ORBInitialHost#services
#
#NAMESERVICE
#IOR:010000002b00000049444c3a6f6d672e6f72672f436f734e616d696e672f4e616d696e6
7436f6e746578744578743a312e300000010000000000000027000000010100000d000000313
02e3234302e37372e37330000f90a0b00

#
#ORBInitialHost GBGPC0019
#ORBInitialPort 2809

Using:

omniORB 303
Win NT 4 sp6
msvc++ 5.0 sp3

/Jonas