Как инициировать ORB из файла свойств?

Я хотел бы инициализировать свой 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, все отлично, так что это не проблема кода, это определенно проблема с инициализацией из файла.


person yak    schedule 01.11.2012    source источник
comment
Вы когда-нибудь проверяли, что возвращает ваш readConfigFile() по сравнению с args[]. (доступен тесткейс JUnit?)   -  person tuergeist    schedule 01.11.2012
comment
Какой ОРБ вы используете? Вы проверили документацию? Некоторые ORB уже считывают параметры из файла.   -  person Brian Neal    schedule 01.11.2012


Ответы (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;
    }

}
person tuergeist    schedule 01.11.2012
comment
этот код: pastie.org/private/d1ccwxdsh8sx1nawevsouw выводит: pastie.org/private/rvyz6aiwjmudqqblmola, когда я запускаю его таким образом: java App -ORBInitRef NameService=corbaloc::localhost:2809/NameService и мой файл конфигурации: ORBInitRef -ORBInitRef NameService=corbaloc::localhost:2809/NameService (как вы предложили), но все еще имеют те же ошибки - person yak; 01.11.2012
comment
это не будет, поскольку args никогда не назначается. - person tuergeist; 01.11.2012
comment
но я передал его при инициализации шара: clientsORB = org.omg.CORBA.ORB.init(readConfigFile(), null); это тоже неправильно? - person yak; 01.11.2012
comment
-ORBInitRef NameService=corbaloc::localhost:2809/NameService — это два! аргументы - person tuergeist; 01.11.2012
comment
ооо, теперь я вижу. Извините, я немного запутался, но теперь все ясно, спасибо :) - person yak; 01.11.2012
comment
ага, опять ошибки: pastie.org/private/ws4wxecxgtm74bwrmshidg. где строка 318 это строка: ORB clientsORB = org.omg.CORBA.ORB.init(readConfigFile(), null); - person yak; 01.11.2012
comment
Может быть, NameService не запущен? Протестируйте с telnet-подключением к localhost port 2809 - person tuergeist; 01.11.2012
comment
странно, правда о_О Мой NameService работает - person yak; 01.11.2012
comment
Пожалуйста, опубликуйте ClientConnection.connect from ClientConnection.java:64 - person tuergeist; 01.11.2012
comment
Какой NameService вы используете? OBJECT_NOT_EXIST означает, что его там нет. Кстати. Код и сообщения об ошибках легче читать, если номера строк совпадают. - person tuergeist; 01.11.2012
comment
просто чтобы показать проблему, я написал простую программу с той же ошибкой www65.zippyshare.com/ v/14655906/file.html - person yak; 01.11.2012
comment
давайте продолжим обсуждение в чате - person tuergeist; 01.11.2012