Модульное тестирование EJB и удаленного интерфейса с EjbEmbedded Conatiner - PullRequest
0 голосов
/ 11 февраля 2012

У меня есть этот EJB

@Stateless
public class HelloBean{


    public String sayHello(){
        return "hello";
    } 

}

Когда я тестирую с этим модульным тестом:

    @Test
    public void testEmbeddedPersistence() throws NamingException {
        assertTrue(true);



        Map<String, Object> props = new HashMap<String, Object>();

        props.put(EJBContainer.MODULES,  new File("target/classes"));
        props.put("org.glassfish.ejb.embedded.glassfish.instance.root",    "./src/test/resources/glassfish-testing-domain");

    ec = EJBContainer.createEJBContainer(props);
    ctx = ec.getContext();


    String s = "java:global/classes/HelloBean";
    HelloBean helloBean = (HelloBean) ctx.lookup(s);
    assertNotNull(helloBean);

    assertABunchOfStuff();        

    ec.close();
}

все отлично работает.

Но когда я изменяю его на

@Stateless
public class HelloBean implements RemoteHello{


    public String sayHello(){
            return "hello";
    }
}

@Remote
public interface RemoteHello{
    public String sayHello();
}





@Test
    public void testEmbeddedPersistence() throws NamingException {
        assertTrue(true);



        Map<String, Object> props = new HashMap<String, Object>();

        props.put(EJBContainer.MODULES,  new File("target/classes"));
        props.put("org.glassfish.ejb.embedded.glassfish.instance.root", "./src/test/resources/glassfish-testing-domain");

        ec = EJBContainer.createEJBContainer(props);
        ctx = ec.getContext();


        String s = "java:global/classes/HelloBean!com.mycompany.remoteInterface.RemoteHello";
        RemoteHello remoteHello = (RemoteHello) ctx.lookup(s);
        assertNotNull(remoteHello);

        assertABunchOfStuff();        

        ec.close();
    }

Я получаю исключение javax.naming.NamingException

Самое странное, что когда EJBContainer начинает, он говорит:

ИНФОРМАЦИЯ: EJB5181: Переносимые имена JNDI для EJB HelloBean: [java: global / classes / HelloBean! Com.mycompany.remoteInterface.RemoteHello, java: global / classes / HelloBean] 10 февраля 2012 15:55:22 com.sun.ejb.containers.BaseContainer initializeHome

вскоре после этого:

Тесты по ошибке: testEmbeddedPersistence (com.mycompaony.HelloBean): не удалось выполнить поиск для 'java: global / classes / HelloBean! com.mycompany.remoteInterface.RemoteHello' в SerialContext [myEnv = {java.naming.factory.initial = com.sun.enterprise.naming .impl.SerialInitContextFactory, java.naming.factory.state = com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs = com.sun.enterprise.naming}

Как получить успешный поиск jndi с помощью удаленного интерфейса.

Спасибо

1 Ответ

1 голос
/ 11 февраля 2012

Удаленные интерфейсы не являются частью EJB lite (спецификация EJB 3.1, таблица 27), а встраиваемые контейнеры требуются только для обеспечения EJB lite (спецификация EJB 3.1, раздел 22.3.1).

...