JacorB 3.2 NameService(ns)似乎没有读取“orb.properties”文件

时间:2013-06-05 20:32:57

标签: java corba jacorb nameservice

我遇到了JacORB 3.2的问题,因为它似乎没有读取orb.properties文件,尤其是ORBInitRef.NameService属性。

如第3.1章的文档所述,JacORB会自动在三个位置搜索orb.properties文件:"java.home"/lib目录,"user.home"目录和类路径内部。

这证明我并没有完全醉酒:

Java命令:

System.out.println(System.getProperty("java.home"));
System.out.println(System.getProperty("user.home"));

输出:

/usr/lib/jvm/jdk1.7.0/jre
/home/followthemedia

Bash命令:

ls /usr/lib/jvm/jdk1.7.0/jre/lib | grep orb.properties ; ls /home/followthemedia | grep orb.properties

输出:

jacorb.properties
orb.properties
jacorb.properties
orb.properties

这四个.properties文件完全相同。请查看包含NameService的引用(IOR)的文件的URI:

ORBInitRef.NameService=file:/tmp/CORBA/NS_Ref

问题是,当我尝试在没有任何参数(ns)的情况下启动NameService时,我收到了以下错误消息:

giu 05, 2013 9:56:51 PM org.jacorb.naming.NameServer main
SEVERE: unexpected exception
java.io.FileNotFoundException: c:/NS_Ref (No such file or directory)
    at java.io.FileOutputStream.open(Native Method)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:212)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:104)
    at org.jacorb.naming.NameServer.main(NameServer.java:320)

java.lang.RuntimeException: c:/NS_Ref (No such file or directory)
    at org.jacorb.naming.NameServer.main(NameServer.java:335)

当然,如果我通过控制台明确地传递URI,一切都很顺利

ns -Djacorb.naming.ior_filename=/tmp/CORBA/NS_Ref

非常奇怪的是,在NameService运行之后, EVERY OTHER OBJECT 可以正确并自动解析NameService的初始引用。

NamingContextExt nc = NamingContextExtHelper.narrow(orb.resolve_initial_references("NameService"));

以前的Java代码返回一个有效的对象。这对我没有任何意义。 为什么当我在Linux上时,NameService会尝试在C:\ NS_Ref这样的随机文件中写入IOR?

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

我认为你在问题中混淆了一些不同的东西。

  1. NS的IOR的位置
  2. 其他程序阅读和使用此IOR的能力
  3. 首先。启动NamingService 受选项ORBInitRef.NameService或任何相关命令行选项的影响。如果您希望NamingService在文件中删除它的IOR,请使用

    # The file where the name server drops its IOR
    jacorb.naming.ior_filename=file:///tmp/CORBA/NS_Ref
    
    你已经做过了。如果将此作为cmdline选项使用时表现不同,请参阅2.

    第二。 JacorB其配置文件不是特定于操作系统的 - Linux和Windows风格混合使用。不要依赖它。

    您对ns的调用将调用JacORBs jaco目录中的bin脚本。激活文件末尾的详细信息,然后再次启动ns,查看实际使用的jrejacorb.home。寻找配置。删除所有其他不需要的配置。

    重试。

答案 1 :(得分:1)

ns -Djacorb.naming.ior_filename=/tmp/CORBA/NS_Ref

看起来很好,但不应该

ORBInitRef.NameService=file:/tmp/CORBA/NS_Ref

阅读file:///tmp/CORBA/NS_Ref

这个

c:/NS_Ref

在Linux上很奇怪;对我来说这看起来很懒散;你确定你没有混合Win和Linux配置文件吗?