【问题标题】:Understanding the Glassfish console JNDI output了解 Glassfish 控制台 JNDI 输出
【发布时间】:2017-02-22 09:44:12
【问题描述】:

当我部署我的 EJB 模块(包含会话 bean)时;我在 Glassfish 控制台(在 Netbeans 中)中看到以下输出:

Info:   EJB5181:Portable JNDI names for EJB NewSessionBean: [java:global/EJBModule1/NewSessionBean!com.Hello.NewSessionBeanRemote, java:global/EJBModule1/NewSessionBean]
Info:   EJB5182:Glassfish-specific (Non-portable) JNDI names for EJB NewSessionBean: [com.Hello.NewSessionBeanRemote, com.Hello.NewSessionBeanRemote#com.Hello.NewSessionBeanRemote]

我有两个问题:

1) Why does the remote interface have a JNDI reference? I thought it was just the EJB.
2) Why is there a comma, which appears to separate two JNDI references per line?

【问题讨论】:

    标签: jakarta-ee netbeans glassfish jndi ejb-3.0


    【解决方案1】:

    1) 为什么远程接口有 JNDI 引用?我以为 只是 EJB。

    不是 RemoteInterface 有 JNDI 引用,它只是一个可移植的 JNDI 引用,其中包含实现的接口名称。

    here下面的解释:

    客户端应用程序需要使用全局 JNDI 名称来查找 EJB。全部 沿着 ejb 规范一直对此类的可移植性保持沉默 全局 jndi 名称。这允许每个供应商分配一个全局 jndi 以供应商特定的方式为 EJB 命名。这意味着客户端 使用全局 JNDI 名称执行查找的代码本来就是 不可跨 appserver 供应商实现移植。

    EJB 3.1 通过强制每个容器解决上述问题 必须为 EJB 分配(至少一个)定义良好的全局 JNDI 名称。这 EJB 的(可移植的)全局 JNDI 名称的一般语法是 形式:

    java:global/[<application-name>]/<module-name>/<bean-name>!<fully-qualified-bean-interface-name>

    除了上面的名字,如果 EJB 只暴露一个客户端 视图(即它只实现一个接口或没有接口 视图),容器还被授权将 bean 映射到

    java:global/[<application-name>]/<module-name>/<bean-name>

    在哪里

    1. <application-name> 默认为不带包扩展名的包名(.ear 文件名)。这可以在 应用程序.xml。此外,仅适用于 bean 被打包在一个 .ear 文件中。
    2. <module-name> 默认为不带包扩展名的包名称(.war 或 .jar)。同样,这可以在 ejb-jar.xml 中被覆盖。
    3. <bean-name> 默认为 bean 的非限定类名。但是,如果 @Stateful@Stateless@Singleton 使用名称 属性,那么那里指定的值将用作 bean 名字。

    2) 为什么有一个逗号,它似乎将两个 JNDI 引用分开 每行?

    因为逗号用于分隔列表中的条目 :) 问题 1 的答案也应该回答这个问题,有一个条目只包含 bean 名称,一个条目包含 bean 名称 + 接口名称。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-23
    • 1970-01-01
    相关资源
    最近更新 更多