CORBA - impl problem

01/09/2014 18:40 XxharCs#1
Hallo!

Habe vor kurzem begonnen CORBA zu lernen (eig. im Unterricht mit CORBA begonnen) und ich gehe grad ein User Guide durch welches von omniORB selbst zur Verfügung gestellt wurde. ([Only registered and activated users can see links. Click Here To Register...])

(Verwendet wird omniORB-4.1.7 für die C++ implementation)

Soweit so gut, bin aber bei der Server Implementation aus irgendwelchen Gründen stehen geblieben :(

Bekomme diesen Fehler wenn ich es ausführe:
Code:
./echo_ServImpl 
IOR:010000000d00000049444c3a4563686f3a312e300000000001000000000000006800000001010200100000003139322e3136382e3138322e3132380039af00000e000000fe1cdace52000075a0000000000000000200000000000000080000000100000000545441010000001c00000001000000010001000100000001000105090101000100000009010100
Caught CORBA::TRANSIENT
Ich verstehe die Fehlermeldung nicht genau bzw. so ein Fehler wird nicht wirklich im user guide angesprochen.. oder ich übersehe es einfach :confused:
Also das: Caught CORBA::TRANSIENT, ist die Fehlermeldung, IOR ignorieren, ist dazu da, damit sich dann der Client verbinden kann.

Das ist mein Code:
Code:
#include <echo.hh>

#ifdef HAVE_STD
#  include <iostream>
   using namespace std;
#else
#  include <iostream.h>
#endif

static CORBA::Boolean bindObjectToName(CORBA::ORB_ptr, CORBA::Object_ptr);


class Echo_i : public POA_Echo
{
public:
  inline Echo_i() {}
  virtual ~Echo_i() {}
  virtual char* echoString(const char* mesg);
};


char* Echo_i::echoString(const char* mesg)
{
  return CORBA::string_dup(mesg);
}

//////////////////////////////////////////////////////////////////////

int main(int argc, char **argv)
{
  try {
    CORBA::ORB_var orb = CORBA::ORB_init(argc, argv);

    CORBA::Object_var obj = orb->resolve_initial_references("RootPOA");
    PortableServer::POA_var poa = PortableServer::POA::_narrow(obj);

    Echo_i* myecho = new Echo_i();

    PortableServer::ObjectId_var myechoid = poa->activate_object(myecho);

    obj = myecho->_this();

    CORBA::String_var x;
    x = orb->object_to_string(obj);
    cout << x << endl;

    if( !bindObjectToName(orb, obj) )
      return 1;

    myecho->_remove_ref();

    PortableServer::POAManager_var pman = poa->the_POAManager();
    pman->activate();

    orb->run();
  }
  catch(CORBA::SystemException& ex) {
    cerr << "Caught CORBA::" << ex._name() << endl;
  }
  catch(CORBA::Exception& ex) {
    cerr << "Caught CORBA::Exception: " << ex._name() << endl;
  }
  catch(omniORB::fatalException& fe) {
    cerr << "Caught omniORB::fatalException:" << endl;
    cerr << "  file: " << fe.file() << endl;
    cerr << "  line: " << fe.line() << endl;
    cerr << "  mesg: " << fe.errmsg() << endl;
  }
  return 0;
}

//////////////////////////////////////////////////////////////////////

static CORBA::Boolean bindObjectToName(CORBA::ORB_ptr orb, CORBA::Object_ptr objref)
{
  CosNaming::NamingContext_var rootContext;

  try {
    
    CORBA::Object_var obj;
    obj = orb->resolve_initial_references("NameService");

    
    rootContext = CosNaming::NamingContext::_narrow(obj);
    if( CORBA::is_nil(rootContext) ) {
      cerr << "Failed to narrow the root naming context." << endl;
      return 0;
    }
  }
  catch (CORBA::NO_RESOURCES&) {
    cerr << "Caught NO_RESOURCES exception. You must configure omniORB with the location" << endl
	 << "of the naming service." << endl;
    return 0;
  }
  catch (CORBA::ORB::InvalidName&) {
    
    cerr << "Service required is invalid [does not exist]." << endl;
    return 0;
  }

  try {
    

    CosNaming::Name contextName;
    contextName.length(1);
    contextName[0].id   = (const char*) "test";       
    contextName[0].kind = (const char*) "my_context"; 
    

    CosNaming::NamingContext_var testContext;

    try {
      
      testContext = rootContext->bind_new_context(contextName);
    }
    catch(CosNaming::NamingContext::AlreadyBound& ex) {
      
      CORBA::Object_var obj;
      obj = rootContext->resolve(contextName);
      testContext = CosNaming::NamingContext::_narrow(obj);
      if( CORBA::is_nil(testContext) ) {
        cerr << "Failed to narrow naming context." << endl;
        return 0;
      }
    }

    
    CosNaming::Name objectName;
    objectName.length(1);
    objectName[0].id   = (const char*) "Echo";   
    objectName[0].kind = (const char*) "Object"; 

    try {
      testContext->bind(objectName, objref);
    }
    catch(CosNaming::NamingContext::AlreadyBound& ex) {
      testContext->rebind(objectName, objref);
    }
    
  }
  catch(CORBA::TRANSIENT& ex) {
    cerr << "Caught system exception TRANSIENT -- unable to contact the naming service." << endl
	 << "Make sure the naming server is running and that omniORB is configured correctly." << endl;

    return 0;
  }
  catch(CORBA::SystemException& ex) {
    cerr << "Caught a CORBA::" << ex._name()
	 << " while using the naming service." << endl;
    return 0;
  }
  return 1;
}
Ich weiß nicht ob sich jemand von euch schon mit CORBA beschäftigt hat, aber ich hoffe mal um hilfe :)

Edit: Ich arbeite unter Linux (Debian um genauer zu sein)