Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dependency injection 使用@EJB进行注入时的NullpointerException_Dependency Injection_Nullpointerexception_Ejb_Websphere Liberty_Java Ee 8 - Fatal编程技术网

Dependency injection 使用@EJB进行注入时的NullpointerException

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

我在用@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")
@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);