2012-11-01 18 views
2

我想从属性文件中的init我的ORB(通常我初始化它像这样,在运行我的例子:./app -ORBInitRef NameService=corbaloc::localhost:2809/NameService如何从属性文件初始化ORB?

我写了一个简单的代码:

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; 
} 

,然后试图初始化我ORB:

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时,一切都很好,所以它不是代码问题,它肯定是从文件初始化的问题。

+1

测试过什么是返回你的'readConfigFile( )'与'args []'相比。 (JUnit测试用例是否可用?) – tuergeist

+1

您使用的是什么ORB?你检查过文件吗?一些ORB将已经从文件中读取选项。 –

+0

@BrianNeal:我使用JDKs orb – yak

回答

3

您必须添加-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; 
    } 

} 
+0

这段代码:http://pastie.org/private/d1ccwxdsh8sx1nawevsouw prints:http://pastie.org/private/rvyz6aiwjmudqqblmola当我这样运行时:'java App -ORBInitRef NameService = corbaloc ::本地主机:2809/NameService'和我的配置文件:'ORBInitRef -ORBInitRef名称服务= corbaloc ::本地主机:2809/NameService'(如你所说),但仍然有同样的错误 – yak

+0

也不会为'args'是永远分配。 – tuergeist

+0

,但我在orb初始化中传递它:'clientsORB = org.omg.CORBA.ORB.init(readConfigFile(),null);'那也是错误的吗? – yak