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:
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:
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)
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
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;
}
Edit: Ich arbeite unter Linux (Debian um genauer zu sein)