无状态 EJB 实现接口注入失败
Stateless EJB implements interface injection failed
野飞 8.2.0
我有一个 Stateless
EJB 和一个接口。
@Local
@Stateless
public class Bean implements IBean{
...
}
@Local
public interface IBean {
...
}
但是我得到一个焊接错误。如果 Bean 没有实现接口,则没有错误。根据
https://blogs.oracle.com/arungupta/entry/what_s_new_in_ejb应该没有错误。
错误:
WELD-001408: Unsatisfied dependencies for type Bean with qualifiers @Default
at injection point [BackedAnnotatedField] @Inject private mypackage.anotherBean.bean
更新:
我已经用 Local
尝试了所有可能的组合,但它没有帮助。仅当接口被删除时才不会出现错误。
@Stateless
public class Bean implements IBean{
...
}
@Local
public interface IBean {
...
}
//*****************************
@Stateless
public class Bean implements IBean{
...
}
public interface IBean {
...
}
//************************************
@Local
@Stateless
public class Bean implements IBean{
...
}
public interface IBean {
...
}
您需要从 Bean 中删除 @Local
。
@Stateless
public class Bean implements IBean{
...
}
因为你定义了2个可能,Local WELD不知道该用哪一个。
oracle 文档也通过 @Remote
接口显示了这一点:
@Remote
public interface Foo { . . . }
@Stateless
public class Bean implements Foo, Bar {
. . .
}
当您想通过 EJB(使用 @EJB
)或 CDI(使用 @Inject
)容器注入 bean 时,您可以声明一个具有接口类型的变量。已声明接口的具体实现由容器在应用程序部署期间找到。在您的示例中,问题不在于注释,而在于被注入的声明类型(Bean
而不是 IBean
)。
野飞 8.2.0
我有一个 Stateless
EJB 和一个接口。
@Local
@Stateless
public class Bean implements IBean{
...
}
@Local
public interface IBean {
...
}
但是我得到一个焊接错误。如果 Bean 没有实现接口,则没有错误。根据 https://blogs.oracle.com/arungupta/entry/what_s_new_in_ejb应该没有错误。
错误:
WELD-001408: Unsatisfied dependencies for type Bean with qualifiers @Default
at injection point [BackedAnnotatedField] @Inject private mypackage.anotherBean.bean
更新:
我已经用 Local
尝试了所有可能的组合,但它没有帮助。仅当接口被删除时才不会出现错误。
@Stateless
public class Bean implements IBean{
...
}
@Local
public interface IBean {
...
}
//*****************************
@Stateless
public class Bean implements IBean{
...
}
public interface IBean {
...
}
//************************************
@Local
@Stateless
public class Bean implements IBean{
...
}
public interface IBean {
...
}
您需要从 Bean 中删除 @Local
。
@Stateless
public class Bean implements IBean{
...
}
因为你定义了2个可能,Local WELD不知道该用哪一个。
oracle 文档也通过 @Remote
接口显示了这一点:
@Remote
public interface Foo { . . . }
@Stateless
public class Bean implements Foo, Bar {
. . .
}
当您想通过 EJB(使用 @EJB
)或 CDI(使用 @Inject
)容器注入 bean 时,您可以声明一个具有接口类型的变量。已声明接口的具体实现由容器在应用程序部署期间找到。在您的示例中,问题不在于注释,而在于被注入的声明类型(Bean
而不是 IBean
)。