使用JNDI加载NamingException加载bean

时间:2019-01-13 23:26:40

标签: java java-ee ejb ejb-3.2

我有两个实现接口的无状态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来加载bean?不是完整的打包路径吗?

我也尝试使用java:module/app/ejb/login/DBUserValidationImpl,但遇到了相同的错误。

1 个答案:

答案 0 :(得分:0)

这有效:

java:module/DBUserValidationImpl