【问题标题】:Resolution should not happen via injection container error不应通过注入容器错误解决
【发布时间】:2011-04-20 03:45:18
【问题描述】:

我有一个 EJB3 项目要部署在 JBoss 5.1.0 GA 上。我将无状态 EJB 注入到其他无状态 bean 和 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

【问题讨论】:

  • The default code generated by the archtype works, and there is no need to specify the JNDI name in the @EJB 那你加了什么?你能发布完整的堆栈跟踪吗?
  • 我有一个抽象 DAO,我在其中使用 @PersistenceContext 注入持久性上下文。基本 DAO 由所有 DAO 实现扩展。我可以在非托管 bean 中注入 @PersistenceContext 感兴趣吗?
  • Of interest can I inject @PersistenceContext in an unmanaged bean? 不,由于类是非托管的,因此无法进行注入。
  • 请不要说我仍然认为堆栈跟踪和有关“不工作”部分的更多详细信息会对读者有所帮助。

标签: java jakarta-ee ejb-3.0 jboss5.x


【解决方案1】:

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

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

问题 #2:确保使用 Java 1.6 或更高版本进行编译。这在 Eclipse 中可能很棘手。您必须检查 Project->Properties 中的三个位置以确保:Project Facets、编译器合规性设置和构建路径。

【讨论】:

    【解决方案2】:

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

    这是 version="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文件然后部署它

    【讨论】:

      【解决方案3】:

      使用@EJB注解的mappedName属性,同时注入到servlet中

      该属性应包含 ejb 的 jndi 名称。

      【讨论】:

        【解决方案4】:
        猜你喜欢
        • 2018-12-18
        • 2011-07-10
        • 2018-03-05
        • 1970-01-01
        • 1970-01-01
        • 2021-02-26
        • 2023-03-12
        • 2014-11-05
        • 2019-01-19
        相关资源
        最近更新 更多