【问题标题】:Problem doing jndi lookup for EJB为 EJB 进行 jndi 查找时出现问题
【发布时间】:2011-04-05 11:33:22
【问题描述】:

我在查找时遇到问题

项目结构: 一个动态 Web 项目 (gss-web) 和一个 EJB 项目 (gss-ejb) 在 .ear (gss-ea) 中一起部署到 jboss 6 服务器上

例外: javax.naming.NamingException:无法取消引用对象[根异常是 javax.naming.NameNotFoundException:gss-ea 未绑定]

代码 - 从我的 Web 项目的托管 bean 内部:

InitialContext ctx = new InitialContext( );
return ( CodesService )ctx.lookup( "java:/global/gss-ea/gss-ejb/CodesBean" );

java Namespace : jndi tree (from jmx console on jboss):
 +- global (class: org.jnp.interfaces.NamingContext)
  |   +- jmx-console (class: org.jnp.interfaces.NamingContext)
  |   +- ROOT (class: org.jnp.interfaces.NamingContext)
  |   +- uuid-key-generator (class: org.jnp.interfaces.NamingContext)
  |   +- http-invoker (class: org.jnp.interfaces.NamingContext)
  |   |   +- invoker (class: org.jnp.interfaces.NamingContext)
  |   +- gss-ea (class: org.jnp.interfaces.NamingContext)
  |   |   +- gss-web (class: org.jnp.interfaces.NamingContext)
  |   |   +- gss-ejb (class: org.jnp.interfaces.NamingContext)
  |   |   |   +- CorporateActionBean!com.comp.gss.session.CorporateActionService[link -> gss-ea/CorporateActionBean/local-com.comp.gss.session.CorporateActionService] (class: javax.naming.LinkRef)
  |   |   |   +- CodesBean!com.comp.gss.session.CodesService[link -> gss-ea/CodesBean/local-com.comp.gss.session.CodesService] (class: javax.naming.LinkRef)
  |   |   |   +- BasketBean!com.comp.gss.session.BasketService[link -> gss-ea/BasketBean/local-com.comp.gss.session.BasketService] (class: javax.naming.LinkRef)
  |   |   |   +- FPBean[link -> gss-ea/FPBean/local-com.comp.gss.session.FPService] (class: javax.naming.LinkRef)
  |   |   |   +- CodesBean[link -> gss-ea/CodesBean/local-com.comp.gss.session.CodesService] (class: javax.naming.LinkRef)
  |   |   |   +- PopulationBasketBean!com.comp.gss.session.PopulationBasketBean[link -> gss-ea/PopulationBasketBean/no-interface] (class: javax.naming.LinkRef)
  |   |   |   +- CorporateActionBean[link -> gss-ea/CorporateActionBean/local-com.comp.gss.session.CorporateActionService] (class: javax.naming.LinkRef)
  |   |   |   +- OutputBean!com.comp.gss.session.OutputService[link -> gss-ea/OutputBean/local-com.comp.gss.session.OutputService] (class: javax.naming.LinkRef)
  |   |   |   +- FPBean!com.comp.gss.session.FPService[link -> gss-ea/FPBean/local-com.comp.gss.session.FPService] (class: javax.naming.LinkRef)
  |   |   |   +- PopulationBean[link -> gss-ea/PopulationBean/local-com.comp.gss.session.PopulationService] (class: javax.naming.LinkRef)
  |   |   |   +- BasketBean[link -> gss-ea/BasketBean/local-com.comp.gss.session.BasketService] (class: javax.naming.LinkRef)
  |   |   |   +- PopulationBean!com.comp.gss.session.PopulationService[link -> gss-ea/PopulationBean/local-com.comp.gss.session.PopulationService] (class: javax.naming.LinkRef)
  |   |   |   +- PopulationBasketBean!com.comp.gss.session.PopulationBasketService[link -> gss-ea/PopulationBasketBean/local-com.comp.gss.session.PopulationBasketService] (class: javax.naming.LinkRef)
  |   |   |   +- OutputBean[link -> gss-ea/OutputBean/local-com.comp.gss.session.OutputService] (class: javax.naming.LinkRef)

任何帮助将不胜感激。提前致谢!

/埃里克

【问题讨论】:

    标签: jboss ejb jndi lookup


    【解决方案1】:

    试试:

    return ( CodesService )ctx.lookup( "java:global/gss-ea/gss-ejb/CodesBean" );
    

    注意:“global”之前没有“/”。

    【讨论】:

      【解决方案2】:

      您是否检查过您的 jmx 控制台以查看 ejb 是否已正确部署。我认为您用来查找的名称不正确。它通常带有本地或远程的 ejb 名称。快速查看您的 jmx 控制台将为您提供正确的名称。

      话虽如此,如果您使用的是 ejb 3.x,则不必也可能不应该像这样查找 ejb。只需使用 @Ejb 注释将您的 Ejb 注入到您的 servlet 中。

      如果你使用的是Ejb3.1,你可以直接在你的war中打包ejb。

      【讨论】:

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