I have two stateless EJBs that implement an interface. To load an implementation I'm using InitialContext but it always fails with NamingException
.
The interface
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;
}
The first implementation
package app.ejb.login;
@Stateless
public class LDAPUserValidationImpl implements UserValidation {
@Override
public int validateUser(String userid, String password) throws InvalidAccessException {
........................
}
}
and the second implementation
package app.ejb.login;
@Stateless
public class DBUserValidationImpl implements UserValidation {
@Override
public int validateUser(String userid, String password) throws InvalidAccessException {
..................
}
}
This is the code that calls the implementation depending on a configuration:
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());
This code prints:
Error in InitialContext: env/app/ejb/login/DBUserValidationImpl -- service jboss.naming.context.java.comp."app-2.0"."app-ejb-2.0".LoginBean.env.app.ejb.login.DBUserValidationImpl
What is the correct JNDI to load the bean? Isn't the full package path?
I also tried with java:module/app/ejb/login/DBUserValidationImpl
but got the same error.
This worked:
java:module/DBUserValidationImpl