Передача более одного объекта в удаленный интерфейс EJB - PullRequest
1 голос
/ 11 августа 2011

Я пытаюсь передать не только объект на удаленный интерфейс EJB, но не Glassfish 3.1.1. Каким бы ни был первый объект, он пройдет нормально, второй объект всегда будет нулевым. Это из-за спецификаций rmi-iiop или это свойство?

Вот мои настройки свойств:

final Properties props = new Properties();
    props.setProperty(InitialContext.STATE_FACTORIES,
            "com.sun.enterprise.naming.SerialInitContextFactory");
    props.setProperty("java.naming.factory.url.pkgs",
            "com.sun.enterprise.naming");
    props.setProperty("java.naming.factory.state",
            "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");
        props.setProperty("org.omg.CORBA.ORBInitialHost", "192.168.1.192");
        props.setProperty("org.omg.CORBA.ORBInitialPort", "3700");
    // props.setProperty("com.sun.appserv.iiop.orbconnections","5");
    // Increase ORB Response Timeout to 5 min instead of 30 min:
    // props.setProperty("com.sun.corba.ee.transport.ORBTCPTimeouts",
    // "500:90000:20");
    props.setProperty(
            "com.sun.corba.ee.transport.ORBWaitForResponseTimeout",
            "300000");
    try {
        InitialContext ic=new InitialContext(props);
        TestRemote remote=(TestRemote) ic.lookup("java:global/com.capmtech_test.ear-ear_ear_1.0-SNAPSHOT/test.ear-ejb-1.0-SNAPSHOT/Test!com.capmtech.TestRemote");


                    Person p = new Person();
                    p.setName("Smith");
                    Phone m = new Phone();

            remote.test(p, m);

    } catch (NamingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

Вот EJB без гражданства:

@Stateless
public class Test implements TestRemote {
    @EJB
    private PersonFacadeLocal personFacade;

    @Override
    public void test(Person person, Phone mobile) {
        Person p = person;
        p.setMobile(mobile);
        personFacade.create(p);
    }

    // Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Business Method")

}

В этом случае мобильный телефон всегда будет иметь значение NULL, если я поменяю местами, aruguments person будет нулевым! Если бы IP был установлен на localhost, все было бы нормально.

Пожалуйста, помогите

Ответы [ 2 ]

0 голосов
/ 12 августа 2011

Все это предполагает, что вы используете сервер Glassfish и автономный клиент на одном компьютере. Я могу воспроизвести проблему в этой области. Хотя это не совсем ваша проблема, вы можете получить результаты с теми же изменениями. Я использую GF 3.1 в Windows Vista. Мой файл windows \ system32 \ drivers \ etc \ hosts имеет следующие строки:

10.99.0.199 pc-2017.pgx.local
127.0.0.1       localhost  pc-2017.pgx.local

Когда мое клиентское программное обеспечение соединяется с:

props.put("org.omg.CORBA.ORBInitialHost", "localhost");

Я получаю ошибку:

Exception in thread "main" javax.ejb.EJBException: java.rmi.RemoteException: CORBA INTERNAL 1330446421 No; nested exception is:
    org.omg.CORBA.INTERNAL: ----------BEGIN server-side stack trace----------
org.omg.CORBA.INTERNAL: WARNING: IOP00710085: A reflective tie got an error while invoking method saveMonkey on class com.pts.monkey._MonkeySessionRemote_Remote
  vmcid: OMG  minor code: 85  completed: No

но тогда, если я изменю клиента для соединения с:

props.put("org.omg.CORBA.ORBInitialHost", "pc-2017.pgx.local");

работает правильно.

0 голосов
/ 12 августа 2011

заменить следующие строки:

    props.setProperty("org.omg.CORBA.ORBInitialHost", "192.168.1.192");
    props.setProperty("org.omg.CORBA.ORBInitialPort", "3700");

на:

    props.setProperty(Context.PROVIDER_URL,"iiop://192.168.1.192:3700");
...