У меня есть два EJB без сохранения состояния, которые реализуют интерфейс. Для загрузки реализации я использую InitialContext, но он всегда завершается ошибкой с NamingException
.
Интерфейс
package app.ejb.login;
public interface UserValidation {
public static final int DBValidation = 1;
public static final int LDAPValidation = 2;
public int validateUser(String userid, String password) throws InvalidAccessException;
}
Первая реализация
package app.ejb.login;
@Stateless
public class LDAPUserValidationImpl implements UserValidation {
@Override
public int validateUser(String userid, String password) throws InvalidAccessException {
........................
}
}
и вторая реализация
package app.ejb.login;
@Stateless
public class DBUserValidationImpl implements UserValidation {
@Override
public int validateUser(String userid, String password) throws InvalidAccessException {
..................
}
}
Это код, который вызывает реализацию в зависимости от конфигурации:
package app.ejb.login;
@Stateless
public class LoginBean {
.....
.....
UserValidation userValidation = null;
InitialContext ic = null;
try {
ic = new InitialContext();
if (flag == 1)
userValidation = (UserValidation)
ic.lookup("java:comp/env/app/ejb/login/DBUserValidationImpl");
else
userValidation = (UserValidation)
ic.lookup("java:comp/env/app/ejb/login/LDAPUserValidationImpl");
}
catch (NamingException e) {
System.out.println("Error in InitialContext: " + e.getMessage());
Этот код печатает:
Ошибка в InitialContext: env / app / ejb / login / DBUserValidationImpl
- служба jboss.naming.context.java.comp. "app-2.0". "app-ejb-2.0" .LoginBean.env.app.ejb.login.DBUserValidationImpl
Какой правильный JNDI для загрузки бина? Разве не указан полный путь к пакету?
Я также пытался с java:module/app/ejb/login/DBUserValidationImpl
, но получил ту же ошибку.