代码之家  ›  专栏  ›  技术社区  ›  Marcus Junius Brutus

JBoss AS 7.1.1 JNDI绑定

  •  4
  • Marcus Junius Brutus  · 技术社区  · 14 年前

    当我部署一个典型的 EJB3型 豆与标准 @无国籍的 , @远程 我的注释 JBoss AS 7.1.1公司 我看到以下内容 金地 服务器控制台输出上的绑定:

    22:31:43,209 INFO [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor]    
    (MSC service thread 1-2) JNDI bindings for session bean named HelloEJB3Bean
     in deployment unit deployment "hello.jar" are as follows:
    
        java:global/hello/HelloEJB3Bean!archetypesEjb3.IHelloEJB3
        java:app/hello/HelloEJB3Bean!archetypesEjb3.IHelloEJB3
        java:module/HelloEJB3Bean!archetypesEjb3.IHelloEJB3
        java:jboss/exported/hello/HelloEJB3Bean!archetypesEjb3.IHelloEJB3
        java:global/hello/HelloEJB3Bean
        java:app/hello/HelloEJB3Bean
        java:module/HelloEJB3Bean
    

    然而,我随后从一个独立的Java类中找到并调用bean(使用改编自 the JBoss AS 7.1.1 quickstart tutorials )使用 金地 以下类型的字符串:

    String jndiName = "ejb:" + appName + "/"      + moduleName + "/" + distinctName
                             + "/"     + beanName + "!" + viewClassName
                             + (stateful?"?stateful":"");
    

    (不属于上述名称空间/绑定之一)。

    1. 为什么提供了这么多JNDI绑定?如果我使用其中一个或另一个,会有什么不同?
    2. 是否有标准的方法,例如使用 ejb:/ 命名空间(因为这是上面给出的快速启动教程中出现的内容)
    3. 为什么 ejb:/ JBoss AS 7.1.1输出中没有报告绑定(这显然是存在的,因为这是我过去与我的bean交谈的内容)?
    2 回复  |  直到 14 年前
        1
  •  4
  •   Arjan Tijms Mike Van    14 年前

    ejb:/ 是JBoss用于 遥远的 客户。

    它是在JBoss AS 7.x中引入的,取代了使用与本地相同JNDI名称空间的事实上的标准远程JNDI方式,但为指定远程服务器所在位置的初始上下文提供了属性。

    原因 ejb:/ 存在是双重的。根据JBoss的说法,Java EE规范中没有指定实际的远程JNDI访问方式,因此没有理由坚持它。JBoss AS 7的目标之一是研究不同的操作方式,由于其规范漏洞,远程EJB只是在这里提供了机会。

    ejb:/ 命名空间,据说远程“驱动程序”更容易拦截远程EJB Bean的请求,同时确保只能请求EJB Bean,而不是JMS队列(也没有指定如何远程获取它们)和最糟糕的数据源。

        2
  •  4
  •   jpkroehling    14 年前

    1) 这些都在 Java EE specification (看一下capter EE.5.2.2),但只要说它们是“名称空间”就足够了,根据访问这些EJB的“方式”和“来源”,您最终会根据这些条目中的每一个获得它。例如,如果同一模块(EAR)中的代码请求EJB,那么它可能会通过java:module进行路由。差异主要在于呼叫的优化程度,因为“comp”访问所需的“幕后”工作比“全局”访问少。

    2) EE规范规定:

    本规范建议但不要求在应用程序组件的ejb子上下文中组织对企业bean的引用 环境中(即在java:comp/env/ejb JNDI上下文中)。注意,默认情况下,通过注释声明的企业bean引用不会在 任何子文本。

    3) 我没有答案,但也许freenode上#jboss(或#jboss-ejb3)的人可以回答:-)