Dependency injection 使用@EJB进行注入时的NullpointerException
我在用@EJB注释注入bean时遇到问题-bean总是空的 首先,这里是我的项目结构的相关部分Dependency injection 使用@EJB进行注入时的NullpointerException,dependency-injection,nullpointerexception,ejb,websphere-liberty,java-ee-8,Dependency Injection,Nullpointerexception,Ejb,Websphere Liberty,Java Ee 8,我在用@EJB注释注入bean时遇到问题-bean总是空的 首先,这里是我的项目结构的相关部分 ApplEAR.ear | ├──WebModule.war (de.example.rest) └──EJBModule.war (de.example.service) 所以。。。现在,我正在尝试从我的webmodule中的ejbmodule注入一个bean: de.example.rest.RestBean: @Stateless(name = "RestBean") @P
ApplEAR.ear
|
├──WebModule.war (de.example.rest)
└──EJBModule.war (de.example.service)
所以。。。现在,我正在尝试从我的webmodule中的ejbmodule注入一个bean:
de.example.rest.RestBean:
@Stateless(name = "RestBean")
@Path("/restElements")
public class RestBean implements IRestBean {
@EJB
private UserBean userBean;
de.example.service.UserBean:
@Stateless(name = "UserBean")
@TransactionManagement(TransactionManagementType.BEAN)
@LocalBean
public class UserBean{...
在我的WebModule中,我有一个类来扩展应用程序类:
@ApplicationPath("/*")
public class RestApplication extends javax.ws.rs.core.Application {
/**
* {@inheritDoc}
*/
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> classes = new HashSet<Class<?>>();
classes.add(de.example.rest.RestBean.class);
return classes;
}
}
我可以查找bean,但是使用注释会更容易
那么,我遗漏了什么或做错了什么呢?我将给出一个没有解释的答案(因为我无法描述JAX-RS中EJB与CDI注入的所有细微差别、规范等等) 通过从RestBean中删除EJB注释并添加
@Dependent
将其转换为CDI管理的bean,可以将UserBean注入RestBean
/。。。
导入javax.enterprise.context.Dependent;
//@无状态(name=“RestBean”)
@路径(“/rest元素”)
@依赖的
公共类RestBean实现了IRestBean{
这假设您不需要将RestBean用作远程EJB,并且只将其用作CDI管理的bean和/或JAX-RS资源
(注意:这假设您启用了CDI功能,您可以通过传递/间接的方式来实现)。您使用的是什么版本的WebSphere Liberty?我使用的是Liberty 20.0.0.8将RestBean公开为对您很重要的EJB(除了将其标记为JAX-RS资源之外)或者你只是在尝试注射UserBean?
<feature>localConnector-1.0</feature>
<feature>appSecurity-3.0</feature>
<feature>beanValidation-2.0</feature>
<feature>ejbLite-3.2</feature>
<feature>ejbRemote-3.2</feature>
<feature>javaMail-1.6</feature>
<feature>jca-1.7</feature>
<feature>jdbc-4.2</feature>
<feature>jndi-1.0</feature>
<feature>jpaContainer-2.2</feature>
<feature>jsf-2.3</feature>
<feature>jsp-2.3</feature>
<feature>ldapRegistry-3.0</feature>
<feature>servlet-4.0</feature>
<feature>transportSecurity-1.0</feature>
<feature>websocket-1.1</feature>
<feature>jaxws-2.2</feature>
<feature>jaxrs-2.1</feature>
InitialContext ctx = new InitialContext();
Object service = ctx.lookup(java:global/ApplEAR/EJBModule/UserBean!de.example.service.UserBean);