【问题标题】:JNDI lookup not working with EJB 3.xJNDI 查找不适用于 EJB 3.x
【发布时间】:2013-02-02 23:57:32
【问题描述】:

我正在使用以下 Bean 类:

@Stateless(name="UserBean", mappedName="UserBean")
@LocalBean
public class User implements UserRemote {

@PersistenceContext
private EntityManager em;

public User() {

}

public String login(String username, String password) {

    Query query = em.createQuery("...");
    return "xyz";
}

}

而我的方法是

public String myMethod()    {

    try {
        User user = (User) new InitialContext().lookup("UserBean");
        return "xyz";
    } catch (NamingException e) {
        e.printStackTrace();
    }
    return null;        
}

我来了

javax.naming.NameNotFoundException: Unable to resolve 'UserBean'. Resolved ''; remaining name 'UserBean'

JNDI 查找名称“UserBean”似乎是正确的。不知道是什么问题。有人可以帮忙吗?我已经使用 JPA 2.0 和 EJB 3.x 在 weblogic 12c 上部署了我的应用程序

提前致谢。

【问题讨论】:

    标签: jakarta-ee jpa-2.0 jndi ejb-3.1


    【解决方案1】:

    使用可移植 JNDI 名称可能是一个更好的主意,即只需使用 @Stateless 进行注释

    https://blogs.oracle.com/kensaks/entry/application_specified_portable_jndi_names

    【讨论】:

    • 我尝试将注释用作“@Stateless”。我的 EAR 名称是 Aahar_v.0.1,我的 EJB 模块名称是 Aahar_EJB_v.0.1,所以我尝试将 JNDI 名称命名为“java:Aahar_v.0.1/Aahar_EJB_v.0.1/User”,但仍然收到“javax.naming.NameNotFoundException:无法解析“java:global.Aahar_v.0.1.Aahar_EJB_v.0.1.User”。解决了'java:global.Aahar_v.0.1.Aahar_EJB_v.0.1';剩下的名字'用户''我做错了吗?
    • 你需要一个远程接口,即你需要在应用服务器之外查找吗?如果没有,则丢弃接口
    • 问题是我使用的是远程接口。仅使用没有映射名称的@stateless 注释以下代码有效: new InitialContext().lookup("java:global/ProjectName/ModuleName/BeanName!FullyQualifiedNameOfRemoteInterface");谢谢@Andre!
    【解决方案2】:

    问题是我使用的是远程接口。仅使用没有映射名称的@stateless 注释以下代码有效:

    new InitialContext().lookup("java:global/ProjectName/ModuleName/BeanName!FullyQualif‌​iedNameOfRemoteInterface"); 
    

    谢谢@Andre!

    【讨论】:

      【解决方案3】:

      虽然这个问题已经在两年前得到回答,但我想对此添加评论。 使用 mappedName 属性应该没有问题。如果您在 WebLogic 上进行部署,则必须在查找中添加 #[fully.qualified.interface.name]

      例如mappedName = "UserBean", EJB 在 com.acme.user 包中实现了一个名为 MyInterface 的接口,那么查找会是这样的

      ... = new InitialContext().lookup("UserBean#com.acme.user.MyInterface");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-01-25
        • 1970-01-01
        • 1970-01-01
        • 2012-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多