Question

I have problem with running my application. I have a server:

#include "Hello_impl.h"
#include <iostream>
#include <omniORB4/CORBA.h>
#include <omniORB4/Naming.hh>

using namespace std;

int main(int argc, char ** argv)
{
try {
// init ORB
CORBA::ORB_ptr orb = CORBA::ORB_init(argc, argv);

// init POA
CORBA::Object_var poa_obj = orb->resolve_initial_references("RootPOA");
PortableServer::POA_var poa = PortableServer::POA::_narrow(poa_obj);
PortableServer::POAManager_var manager = poa->the_POAManager();

// create service
Hello_impl * service = new Hello_impl;

// register within the naming service
try {
CORBA::Object_var ns_obj = orb->resolve_initial_references("NameService");
if (!CORBA::is_nil(ns_obj)) {
CosNaming::NamingContext_ptr nc = CosNaming::NamingContext::_narrow(ns_obj);
CosNaming::Name name;
name.length(1);
name[0].id = CORBA::string_dup("TestServer");
name[0].kind = CORBA::string_dup("");
nc->rebind(name, service->_this());
cout << "Server is running ..." << endl;
}
} catch (CosNaming::NamingContext::NotFound &) {
cerr << "not found" << endl;
} catch (CosNaming::NamingContext::InvalidName &) {
cerr << "invalid name" << endl;
} catch (CosNaming::NamingContext::CannotProceed &) {
cerr << "cannot proceed" << endl;
}

// run
manager->activate();
orb->run();

// clean up
delete service;

// quit
orb->destroy();
} catch (CORBA::UNKNOWN) {
cerr << "unknown exception" << endl;
} catch (CORBA::SystemException &) {
cerr << "system exception" << endl;
}
}

and a Client:

import java.util.*;

public class client {
public static void main(String [] args) {
org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args, null);
if (orb == null) System.exit(-1);
try {
// obtain service from naming server
org.omg.CORBA.Object ns_obj = orb.resolve_initial_references("NameService");
org.omg.CosNaming.NamingContext nc
= org.omg.CosNaming.NamingContextHelper.narrow(ns_obj);
org.omg.CosNaming.NameComponent [] path
= { new org.omg.CosNaming.NameComponent("TestServer", "") };
org.omg.CORBA.Object obj = nc.resolve(path);
Hello hello = HelloHelper.narrow(obj);

// use service
String server = hello.say_hello("Hello, omniORB C++ server, it's Java client");
System.out.println("Answer from server: " + server);

// destroy
orb.destroy();
} catch (org.omg.CORBA.ORBPackage.InvalidName exception) {
exception.printStackTrace(System.out);
} catch (org.omg.CosNaming.NamingContextPackage.NotFound exception) {
exception.printStackTrace(System.out);
} catch (org.omg.CosNaming.NamingContextPackage.CannotProceed exception) {
exception.printStackTrace(System.out);
} catch (org.omg.CosNaming.NamingContextPackage.InvalidName exception) {
exception.printStackTrace(System.out);
} catch (org.omg.CORBA.COMM_FAILURE exception) {
exception.printStackTrace(System.out);
} catch (Exception exception) {
exception.printStackTrace(System.out);
}
}
}

I start omniNames like this:

omniNames -start 6666 -logdir /home/mazix/Desktop/example/logs -errlog /home/mazix/Desktop/example/logs/omniNamesError.txt

then, i start my server, like this:

./server -ORBInitRef NameService=IOR: .... (and here is my IOR num)

and I start client (on the same computer) : like this:

java client -ORBInitRef NameService=corbaloc::localhost:6666/NameService

And its working but I would like to (need to) start my server like this:

./server NameService=corbaname::localhost:6666

and clinet:

java client -ORBInitialHost localhost -ORBInitialPort 6666 

but its not working when I start it like that:/

Any help? :(

Here's my omniORB configuration file: http://www.2shared.com/document/dBAhFGLh/omniORB4cfg.html

Beside that, I have troubles, when server is on my computer, while client is on the computer in my school. They "don't see" each other :(


Ok, I know: I didn't start my omniNames but something was listening on port 2809 before I started omniNames, I checked it, and its: http://i47.tinypic.com/2d2ha9u.png

I thought its all right and I dont need to run omniNames by typing in terminal "omniNames" and didnt do it

I only tried to run my server like You said: http://i46.tinypic.com/2q2e33c.png


I tried this:

  1. Ran my omniNames: omniNames -start 6666
  2. Ran my server: ./server -ORBInitRef NameService=corbaloc::localhost:6666/NameService -ORBtraceLevel 40

and got this:

mazix@computer:~/Desktop/example/cpp$ ./server -ORBInitRef NameService=corbaloc::localhost:6666/NameServie -ORBtraceLevel 40
omniORB: Read from configuration file "/etc/omniORB.cfg".
omniORB: Version: 4.1.2
omniORB: Distribution date: Thu Feb 14 14:19:08 GMT 2008 dgrisby
omniORB: My addresses are: 
omniORB: 127.0.0.1
omniORB: 10.0.2.15
omniORB: ::1
omniORB: Maximum supported GIOP version is 1.2
omniORB: Native char code sets: ISO-8859-1 UTF-8.
omniORB: Transmission char code sets: ISO-8859-1(1.2) ISO-8859-1(1.1) ISO-8859-1(1.0) UTF-8(1.2) UTF-8(1.1).
omniORB: Native wide char code sets: UTF-16.
omniORB: Transmission wide char code sets: UTF-16(1.2).
omniORB: Information: the omniDynamic library is not linked.
omniORB: Creating ref to remote: key<INIT>
 target id      : omg.org/CORBA/InitialReferences:1.0
 most derived id: omg.org/CORBA/InitialReferences:1.0
omniORB: Current configuration is as follows:
omniORB:   DefaultInitRef (file) = corbaloc::localhost:6666/NameService
omniORB:   DefaultInitRef (args) = 
omniORB:   InitRef = NameService=corbaloc::localhost:6666/NameServie
omniORB:   abortOnInternalError = 0
omniORB:   abortOnNativeException = 0
omniORB:   acceptBiDirectionalGIOP = 0
omniORB:   acceptMisalignedTcIndirections = 0
omniORB:   bootstrapAgentHostname = localhost
omniORB:   bootstrapAgentPort = 900
omniORB:   clientCallTimeOutPeriod = 0
omniORB:   clientConnectTimeOutPeriod = 0
omniORB:   clientTransportRule = * unix,ssl,tcp
omniORB:   configFile = /etc/omniORB.cfg
omniORB:   connectionWatchImmediate = 0
omniORB:   connectionWatchPeriod = 50000
omniORB:   copyValuesInLocalCalls = 1
omniORB:   diiThrowsSysExceptions = 0
omniORB:   dumpConfiguration = 0
omniORB:   endPoint = giop:tcp::
omniORB:   endPointPublish = addr
omniORB:   giopMaxMsgSize = 2097152
omniORB:   giopTargetAddressMode = KeyAddr
omniORB:   id = omniORB4
omniORB:   idleThreadTimeout = 10
omniORB:   immediateAddressSwitch = 0
omniORB:   inConScanPeriod = 180
omniORB:   lcdMode = 0
omniORB:   maxGIOPConnectionPerServer = 5
omniORB:   maxGIOPVersion = 1.2
omniORB:   maxInterleavedCallsPerConnection = 5
omniORB:   maxServerThreadPerConnection = 100
omniORB:   maxServerThreadPoolSize = 100
omniORB:   maxSocketRecv = 2147483647
omniORB:   maxSocketSend = 2147483647
omniORB:   nativeCharCodeSet = ISO-8859-1
omniORB:   nativeWCharCodeSet = UTF-16
omniORB:   objectTableSize = 0
omniORB:   offerBiDirectionalGIOP = 0
omniORB:   oneCallPerConnection = 1
omniORB:   outConScanPeriod = 120
omniORB:   poaHoldRequestTimeout = 0
omniORB:   poaUniquePersistentSystemIds = 1
omniORB:   principal = [Null]
omniORB:   resetTimeOutOnRetries = 0
omniORB:   scanGranularity = 5
omniORB:   serverCallTimeOutPeriod = 0
omniORB:   serverTransportRule = * unix,ssl,tcp
omniORB:   socketSendBuffer = -1
omniORB:   strictIIOP = 1
omniORB:   supportBootstrapAgent = 1
omniORB:   supportCurrent = 1
omniORB:   supportPerThreadTimeOut = 0
omniORB:   tcAliasExpand = 0
omniORB:   threadPerConnectionLowerLimit = 9000
omniORB:   threadPerConnectionPolicy = 1
omniORB:   threadPerConnectionUpperLimit = 10000
omniORB:   threadPoolWatchConnection = 1
omniORB:   traceExceptions = 1
omniORB:   traceFile = [stderr]
omniORB:   traceInvocationReturns = 0
omniORB:   traceInvocations = 0
omniORB:   traceLevel = 40
omniORB:   traceThreadId = 0
omniORB:   traceTime = 0
omniORB:   unixTransportDirectory = /tmp/omni-%u
omniORB:   unixTransportPermission =  777
omniORB:   useTypeCodeIndirections = 1
omniORB:   verifyObjectExistsAndType = 1
omniORB: Initialising incoming endpoints.
omniORB: Instantiate endpoint 'giop:tcp::0'
omniORB: Bind to address 0.0.0.0
omniORB: Publish specification: 'addr'
omniORB: Try to publish 'addr' for endpoint giop:tcp:10.0.2.15:44025
omniORB: Publish endpoint 'giop:tcp:10.0.2.15:44025'
omniORB: Starting serving incoming endpoints.
omniORB: Creating ref to remote: key<NameServie>
 target id      : IDL:omg.org/CORBA/Object:1.0
 most derived id: 
omniORB: Initial reference `NameService' resolved from -ORBInitRef argument / ORB registration.
omniORB: Client attempt to connect to giop:tcp:localhost:6666
omniORB: Switch rope to use address giop:tcp:localhost:6666
omniORB: Unable to open new connection: giop:tcp:localhost:6666
omniORB: throw giopStream::CommFailure from giopStream.cc:1148(0,NO,TRANSIENT_ConnectFailed)
omniORB: throw TRANSIENT from omniObjRef.cc:789 (NO,TRANSIENT_ConnectFailed)
system exceptionTRANSIENT_ConnectFailed
omniORB: omniRemoteIdentity deleted.
omniORB: ObjRef() -- deleted.
omniORB: ORB not destroyed; no final clean-up.
Was it helpful?

Solution

java client -ORBInitialHost localhost -ORBInitialPort 6666 

is a ORACLE/SUN special technique to find the local naming service. The more flexible and portable way is to use corbaloc addresses for both, client and server. This is in your case:

java client -ORBInitRef NameService=corbaloc::localhost:6666/NameService
#and 
./server -ORBInitRef NameService=corbaloc::localhost:6666/NameService

For both, client and server, you can also parse cmdline arguments to have a "nicer" interface, such as

java client localhost:6666
# and
./server localhost:6666

In this case you have to exchange calls to the resolve_initial_references("NameService") with normal object narrowing or patch the ORB configuration/parameters at runtime. (Example can be provided on request)

If the client/server do not run on the same machine, your have to exchange localhost with the ip or public name of the server for both, your NamingService and your server.

OTHER TIPS

  1. What is localHist? Do you mean localHost?

  2. A CORBA client always needs to be provided either an IOR or a corbaloc string, from what I recall. Perhaps you can configure this locally, but that is likely going to be client specific. Your server's bindings should be configurable.

  3. Your issues between your home computer and school computer are likely firewall-related. I'd be supremely surprized if your school IT department were not firewalling unknown inbound traffic. Connecting to a random machine on their network would fall into this category.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top