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

Java 不应通过注入容器错误进行解决,java,jakarta-ee,ejb-3.0,jboss5.x,Java,Jakarta Ee,Ejb 3.0,Jboss5.x,我有一个EJB3项目要部署在jboss5.1.0ga上。我有一个无状态ejb被注入到其他无状态bean和servlet中 我正在使用@EJB注释而不使用任何参数来注入ejbbean(我有一个测试项目只是为了模拟注入,它可以工作) 当我尝试部署时,会出现以下错误 "Caused by: java.lang.RuntimeException: java.lang.IllegalStateException: Resolution should not happen via injection con

我有一个EJB3项目要部署在jboss5.1.0ga上。我有一个无状态ejb被注入到其他无状态bean和servlet中

我正在使用@EJB注释而不使用任何参数来注入ejbbean(我有一个测试项目只是为了模拟注入,它可以工作)

当我尝试部署时,会出现以下错误

"Caused by: java.lang.RuntimeException: java.lang.IllegalStateException: Resolution should not happen via injection container"
我已经搜索过了,但似乎找不到错误的原因

更新:1

EJBJAR和WAR都部署在同一个EAR中。我正在使用JEE5 archtype来创建主项目和测试。archtype生成的默认代码可以工作,并且不需要在@EJB注入中指定JNDI名称

更新:2 完整部署stacktrace,

已知问题


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


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

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

以下是version=“2.5”



您是否将servlet放入.WAR文件中?将servlet放在.WAR文件中,将bean放在.JAR文件中。创建ear文件,然后部署它

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

@EJB(mappedName=“Foo/EmployeeManagerBean/local”)
员工经理本地经理;

明白了#2:确保您是使用Java1.6或更高版本编译的。这在Eclipse中可能很棘手。您必须检查Project->Properties中的三个位置以确保:项目方面、编译器符合性设置和生成路径

由archtype生成的默认代码可以工作,并且不需要在@EJB中指定JNDI名称
那么您添加了什么?你能发布完整的stacktrace吗?我有一个抽象DAO,我在其中使用
@PersistenceContext
注入持久性上下文。基本DAO由所有DAO实现扩展。感兴趣的是,我可以在非托管bean中注入@PersistenceContext吗?
感兴趣的是,我可以在非托管bean中注入@PersistenceContext吗?
不,注入不能发生,因为类是非托管的。请不要担心,我仍然认为stacktrace和关于“不工作”部分的更多细节会对读者有所帮助。
<?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">