【问题标题】:How to init ORB from property file?如何从属性文件初始化 ORB?
【发布时间】:2012-11-01 11:17:17
【问题描述】:

我想从属性文件初始化我的 ORB(通常我这样初始化它,同时运行我的示例:./app -ORBInitRef NameService=corbaloc::localhost:2809/NameService

我写了一个简单的代码:

private static String[] readConfigFile()
{
    Properties prop = new Properties();
    String arg[] = new String[1];
    try 
    {
        prop.load(new FileInputStream("config.properties"));
    } catch (IOException ex) {}
    arg[0] = prop.getProperty("ORBInitRef");
    return arg;
}

然后尝试初始化我的球体:

clientsORB = org.omg.CORBA.ORB.init(readConfigFile(), null);

但是有一些错误:

2012-11-01 12:15:36 com.sun.corba.se.impl.transport.SocketOrChannelConnectionImpl <init>
WARNING: "IOP00410201: (COMM_FAILURE) Connection failure: socketType: IIOP_CLEAR_TEXT; hostname: 127.0.1.1; port: 900"
org.omg.CORBA.COMM_FAILURE:   vmcid: SUN  minor code: 201  completed: No
        at com.sun.corba.se.impl.logging.ORBUtilSystemException.connectFailure(ORBUtilSystemException.java:2172)
        at com.sun.corba.se.impl.logging.ORBUtilSystemException.connectFailure(ORBUtilSystemException.java:2193)
        at com.sun.corba.se.impl.transport.SocketOrChannelConnectionImpl.<init>(SocketOrChannelConnectionImpl.java:223)
        at com.sun.corba.se.impl.transport.SocketOrChannelConnectionImpl.<init>(SocketOrChannelConnectionImpl.java:236)
        at com.sun.corba.se.impl.transport.SocketOrChannelContactInfoImpl.createConnection(SocketOrChannelContactInfoImpl.java:119)
        at com.sun.corba.se.impl.protocol.CorbaClientRequestDispatcherImpl.beginRequest(CorbaClientRequestDispatcherImpl.java:168)
        at com.sun.corba.se.impl.protocol.CorbaClientDelegateImpl.request(CorbaClientDelegateImpl.java:136)
        at com.sun.corba.se.impl.resolver.BootstrapResolverImpl.invoke(BootstrapResolverImpl.java:99)
        at com.sun.corba.se.impl.resolver.BootstrapResolverImpl.resolve(BootstrapResolverImpl.java:132)
        at com.sun.corba.se.impl.resolver.CompositeResolverImpl.resolve(CompositeResolverImpl.java:47)
        at com.sun.corba.se.impl.resolver.CompositeResolverImpl.resolve(CompositeResolverImpl.java:47)
        at com.sun.corba.se.impl.resolver.CompositeResolverImpl.resolve(CompositeResolverImpl.java:47)
        at com.sun.corba.se.impl.orb.ORBImpl.resolve_initial_references(ORBImpl.java:1174)
        at ClientConnection.connect(ClientConnection.java:68)
        at Client.main(Client.java:303)
Caused by: java.net.ConnectException: Connection refused
        at sun.nio.ch.Net.connect(Native Method)
        at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:525)
        at java.nio.channels.SocketChannel.open(SocketChannel.java:164)
        at com.sun.corba.se.impl.transport.DefaultSocketFactoryImpl.createSocket(DefaultSocketFactoryImpl.java:78)
        at com.sun.corba.se.impl.transport.SocketOrChannelConnectionImpl.<init>(SocketOrChannelConnectionImpl.java:206)
        ... 12 more

我的 config.properties 文件:

ORBInitRef NameService=corbaloc::localhost:2809/NameService

我做错了什么? 当我正常初始化我的 ORB 时,一切都很好,所以不是代码问题,肯定是从文件初始化的问题。

【问题讨论】:

  • 曾经测试过readConfigFile()args[] 相比返回的内容。 (JUnit 测试用例可用吗?)
  • 您使用的是什么 ORB?你检查过文档吗?一些 ORB 已经从文件中读取了选项。

标签: java initialization corba orb


【解决方案1】:

您还必须将 -ORBInitRef 添加到 ORB 参数中。将其与您通常使用的命令行进行比较。所有参数都必须传递给ORB.init()

config.properties:

ORBInitRef NameService=corbaloc::localhost:2809/NameService 

使用它的 Java 代码 (ReadProps.java)

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;

import org.omg.CORBA.ORB;

public class ReadProps {
    public static void main(String[] args) {
        ORB clientsORB = org.omg.CORBA.ORB.init(readConfigFile(), null);
    }

    static String[] readConfigFile() {
        Properties prop = new Properties();
        String[] orbarg = new String[2];

        try {
            // load a properties file
            prop.load(new FileInputStream("config.properties"));
            // get the property value and print it out  
            orbarg[0] = "-ORBInitRef"; // <---- NEEDED
            orbarg[1] = prop.getProperty("ORBInitRef");

        } catch (IOException ex) {
            ex.printStackTrace();
        }
        return orbarg;
    }

}

【讨论】:

  • 此代码:pastie.org/private/d1ccwxdsh8sx1nawevsouw 打印:pastie.org/private/rvyz6aiwjmudqqblmola 当我以这种方式运行时:java App -ORBInitRef NameService=corbaloc::localhost:2809/NameService 和我的配置文件:ORBInitRef -ORBInitRef NameService=corbaloc::localhost:2809/NameService(如您所建议)但仍然有相同的错误
  • 它不会因为args 从未被分配。
  • 但我在 orb 初始化中通过了它:clientsORB = org.omg.CORBA.ORB.init(readConfigFile(), null); 是不是也错了?
  • "-ORBInitRef NameService=corbaloc::localhost:2809/NameService" 是两个!论据
  • 噢,我现在明白了。对不起,我有点困惑,但现在一切都清楚了,谢谢:)
猜你喜欢
  • 1970-01-01
  • 2012-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多