当前位置: 首页 > 知识库问答 >
问题:

JNDI查找不适用于EJB3.x

蒋健
2023-03-14

我使用以下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上部署了我的应用程序

提前谢谢。

共有3个答案

黄俊雄
2023-03-14

虽然这个问题在两年前就已经回答过了,但我想对此补充一点意见。使用mep dName属性应该没有问题。如果您在WebLogic上部署,则必须在查找中添加#[fully.qualified.interface.name]

EJB正在com.acme.user包中实现一个名为MyInterface的接口,那么查找就像

... = new InitialContext().lookup("UserBean#com.acme.user.MyInterface");
秦阳旭
2023-03-14

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

https://blogs . Oracle . com/kens aks/entry/application _ specified _ portable _ JNDI _ names

贡可人
2023-03-14

问题是我使用的是远程接口。简单地使用@state注释而没有映射名称以下代码有效:

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

谢谢@Andre!

 类似资料:
  • 我得到一个javax。命名。NameNotFoundException:在尝试查找EJB3无状态会话bean时。 我有一个weblogic域,它包括两个服务器Server_1和server_2。我已经将一个EAR文件部署到server_2其中包含一个EJB3部署。它里面有以下内容 EJB3模块jar文件包括以下内容 在服务器1上,我部署了EJB3客户机Jar,其中包含我的远程接口。在这个服务器上,

  • 问题内容: 您好,我想按查询排除某些字段。我正在使用nodejs 但在结果集中,我一直在获取密码字段。 问题答案: 投影不适用于新的nodejs mongodb驱动程序…相反,您将不得不在 此处使用游标方法

  • 列名称的类型为int[] 上述查询适用于postgresql,但不适用于hsqldb,甚至适用于sql 尝试的hsqldb版本:2.2.9和2.3.0 在hsqldb中工作的sql是从table_name中选择x,unnest(column_name)y(x)x和y不是该表的列。

  • 如果有人能帮助我纠正代码中的问题,我将不胜感激。不知道我哪里错了。 当前我的persistence.xml包含

  • 在查找jdbc数据源的JNDI连接时,我遇到以下错误: javax。命名。ConfigurationException:无法完成“java:”名称上的JNDI操作,因为服务器运行时无法将该操作的线程与任何J2EE应用程序组件关联。当使用“java:”名称的JNDI客户端未在服务器应用程序请求的线程上执行时,可能会出现这种情况。确保J2EE应用程序不会在静态代码块或该J2EE应用程序创建的线程中对“

  • 我运行以下php代码: 并获得以下输出: 我希望在调用setlocale(LC_ALL,'de_de.utf8')之后,ctypeèalpha将接受像äöüß这样的德语字符,如文档中所述:“如果文本中的每个字符都是来自当前语言环境的字母,则返回TRUE,否则返回FALSE。”但事实并非如此。我做错了什么? PHP版本是:5.3。10-1ubuntu3。8.