代码之家  ›  专栏  ›  技术社区  ›  n002213f

不应通过注射容器错误进行解决

  •  2
  • n002213f  · 技术社区  · 16 年前

    我有一个EJB3项目要部署在JBoss5.1.0GA上。我有一个无状态EJB被注入到其他无状态be an和servlet中。

    我使用@ejb注释而不使用任何参数来注入ejb bean(我有一个测试项目只是为了模拟注入,这是可行的)。

    当我尝试部署时,会得到下面的错误。

    "Caused by: java.lang.RuntimeException: java.lang.IllegalStateException: Resolution should not happen via injection container"
    

    我已经搜索过了,但似乎找不到/找不到错误的原因。

    更新:1

    EJB jar和war都部署在同一个EAR中。我用的是Jee5拱门, http://code.google.com/p/javaee5-maven-archetype/ 创建主项目和测试。由archtype生成的默认代码可以工作,并且不需要在@ejb注入中指定JNDI名称。

    更新:2 完整的部署堆栈跟踪, http://pastebin.com/CknXie13

    4 回复  |  直到 16 年前
        1
  •  4
  •   Rusl    14 年前

    这里有一个经常被忽视的问题:在servlet或Web服务中声明EJB的类类型时,请确保使用本地接口的名称,而不是实现。因此,jboss中的mappedName将指向实现的JNDI绑定,而声明中的类类型将指向接口。例如:

    @EJB(mappedName="Foo/EmployeeManagerBean/local")
    EmployeeManagerLocal manager;
    

    GOTCHAXY 2:确保您正在编译Java 1.6或更高版本。这在日食中可能很棘手。您必须检查Project->属性中的三个位置以确保:项目方面、编译器符合性设置和生成路径。

        2
  •  1
  •   Akshay Sahu    15 年前

    在注入servlet时使用@ejb annotation的mappedName属性

    属性应该包含EJB的JNDI名称。

        3
  •  1
  •   Sathyajith Bhat ron tornambe    14 年前

    请检查您的 web.xml文件 版本。2.4或更低版本不支持依赖项注入。

    这是 版本=“2.5”

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    

    你把servlet放到.war文件里了吗?把servlet放在.war文件中,把bean放在.jar文件中。创建和EAR文件,然后部署它

    推荐文章