Я пытаюсь реализовать jUnit для тестирования EJB. Тест отлично работает, если я использую контекст JNDI один раз. Но, если я использую контекст второй раз я получаю следующее исключение:Контекст JNDI работает только один раз (тест EJB с jUnit)
java.lang.IllegalStateException: No EJB receiver available for handling
[appName:Name, moduleName:NameEJB, distinctName:] combination for
invocation context org.jboss.ejb.client.EJBClientInvocationContext
at org.jboss.ejb.client.EJBClientContext.requireEJBReceiver(
EJBClientContext.java:774)
...
нАлАдкА() тестового класса выглядит следующим образом:
private NameDAO nameDAO;
@Before
public void setUp() throws Exception {
try {
final Hashtable<String, Comparable> jndiProperties =
new Hashtable<String, Comparable>();
jndiProperties.put(Context.PROVIDER_URL, "http-remoting://localhost:8080");
jndiProperties.put(Context.SECURITY_PRINCIPAL, "user");
jndiProperties.put(Context.SECURITY_CREDENTIALS, "password");
jndiProperties.put(Context.INITIAL_CONTEXT_FACTORY,
"org.jboss.naming.remote.client.InitialContextFactory");
jndiProperties.put("jboss.naming.client.ejb.context", true);
final Context context = new InitialContext(jndiProperties);
final String lookupName = "Name/NameEJB/NameBean!com.myname.ejb.interfaces.NameDAO";
nameDAO = (NameDAO) context.lookup(lookupName);
} catch (Exception e) {
throw e;
}
}
Использование nameDAO объект в тесте в первый раз хорошо работает. Использование этого во второй раз вызывает исключение выше.
Любые идеи?
Я использую Java EE 7 с Wildfly 9.
Спасибо за любую помощь.
Спасибо за намек на Аркиллиан. Я до сих пор не понял, почему прокси теряется. Мне все равно хотелось бы найти, почему он раздавит. – Marcus
Вот как работают фасонные сессионные бобы и вообще эта спецификация технологии. Ссылки EJB (ы) объединены и повторно используются. Это делается контейнером автоматически. Когда ваш первый метод завершается, прокси-сервер, который указывает ton NameDAORef1, больше не действует, поскольку контейнер вернул эту ссылку обратно в пул. Вам нужно получить новый. – javapapo