Erlang and CORBA

Niclas Eklund nick@REDACTED
Fri Mar 3 16:19:41 CET 2006


Hello!

#1 Currently it is not possible to run a pure client. If you intend to run
multiple instances you can use iiop_port == 0 (then the OS will supply a
vacant port).

#2 I guess that you have not registered the interface in the IFR. When you
compile your IDL-specification, a module named oe_<FilName>.erl, which
exports a function called oe_register:

http://www.erlang.org/doc/doc-5.4.12/lib/orber-3.6.2/doc/html/ch_debugging.html#14

Orber must be started before registration.

 mnesia:start().
 corba:orb_init([{domain, "testORB"}, {orber_debug_level, 10}]).
 orber:install([node()], [{ifr_storage_type, ram_copies}]).
 orber:start().
 oe_<FileName>:oe_register().

Note, you can use a minimal version of the IFR by adding {flags,16#80}
when invoking corba:orb_init/1. You should also add the compile option 
{light_ifr, true} when compiling your IDL-specification (see the IC
documentation). For more information about configuring Orber see:

http://www.erlang.org/doc/doc-5.4.12/lib/orber-3.6.2/doc/html/ch_install.html#5.2

Best regards,

Niclas

On Fri, 3 Mar 2006, Stelianos G. Sfakianakis wrote:
> Hi!
> 
> I 've started to investigate the use of Erlang/Yaws for some work of
> mine and I am currently puzzled about the corba *client* support. To
> be more specific I have a CORBA server written using TAO and I want to
> communicate with it from Erlang. Questions:
> 
> 1. It seems that I have to start orber and according to the docs I did this:
> 
> mnesia:start().
> corba:orb_init([{domain, "testORB"}, {orber_debug_level, 10}]).
> orber:install([node()], [{ifr_storage_type, ram_copies}]).
> orber:start().
> 
> But by doing so a new listening TCP port (4001) is opened. Since I
> want to just use the client side of corba this seems unnecessary. Can
> I use corba without opening a (server) port?
> 
> 2. I used the corba:string_to_object/1 function and got an object
> reference from a corbaloc string. Then I called a simple method and
> saw that the server responded. The problem is that when the erlang
> tries to un marshall the response throws an error like this
> 
> [1085] cdr_decode:ifrid_to_name("IDL:Test/TestSt:1.0"). IFR Id not found: []
> 
> Any ideas about what is wrong? Should I do anything to populate the
> IFR with the my (user defined) corba types?
> 
> Thanks!
> Stelios




More information about the erlang-questions mailing list