解决方案不应该通过注射容器错误发生

时间:2010-10-02 05:02:28

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

我有一个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 archtype http://code.google.com/p/javaee5-maven-archetype/来创建主项目和测试。 archtype生成的默认代码有效,无需在@EJB注入中指定JNDI名称。

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

4 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:1)

使用@EJB注释的mappedName属性,同时注入servlet

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

答案 2 :(得分:1)

请检查 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文件然后进行部署

答案 3 :(得分:0)