当前位置: 首页 > 知识库问答 >
问题:

Java EE,CDI-@inject不工作;空

龚俭
2023-03-14

我对Java EE(依赖项注入)有点陌生,我不明白为什么@inject给我的是null,但是initialcontext.dolookup确实起作用。

这是我的豆子。它只是一把刀。EntityManager的包装器

@Stateless
public class PersonManager {
    @PersistenceContext("unitName="PersonData")
    EntityManager em;
...
}
@Path("/PersonService")
@RequestScoped
public class PersonService {
    @Inject private PersonManager manager; //this comes up null

    @GET
    @Produces("text/html")
    public String getAllPersons() {
        List<Person> personList manager.findAll(); //null pointer exception, manager null
    }
}
@GET
@Produces("text/html")
public String getAllPersons() {
    try {
        manager = InitialContext.doLookup("java:global/PersonApp/PersonData/PersonManager");
    }
    catch(Exception e) {
        e.printStackTrace();
    }

    List<Person> personList manager.findAll(); //this works!
}

--jar(PersonData-EJB模块-包含PersonManager)

--war(PersonRest-web模块-包含PersonService)

共有1个答案

丁绪
2023-03-14

问题原来是在rest应用程序注册中添加PersonService作为单例。

@ApplicationPath("api")
public class RestApplication extends Application{

    private Set<Object> singletons = new HashSet<Object>();
    private Set<Class<?>> empty = new HashSet<Class<?>>();
    public RestApplication(){
         //below line caused @Inject not to work. commented out
         //singletons.add(new PersonService());  
    }
    @Override
    public Set<Class<?>> getClasses() {
         return empty;
    }
    @Override
    public Set<Object> getSingletons() {
         return singletons;
    }
}
 类似资料:
  • 它有一个servlet和一个JAX-RS资源POJO,两者都运行良好。接下来,我在与servlet和JAX-RS POJO相同的包中创建了一个类: 当我访问POJO的rest路径时,我在Glassfish日志中得到消息:

  • 我有一个简单的属性转换实现,在这个实现中,我试图注入一个必须提供转换逻辑的对象,但是似乎不适合这种情况。转换器类看起来像这样: 当被触发时,它会抛出一个,因为属性没有从容器中初始化。为什么? 我使用的是Glassfish 4,在所有其他情况下,都可以正常工作。 不可能在转换器上使用CDI吗? 任何帮助都将不胜感激:) 我的问题的重点更多的是属性转换部分。我明白要让CDI工作,bean必须满足这里描

  • 首先,我密集地谷歌了一下,根据http://jglue.org/cdi-unit-user-guide/在单元测试中生产注入的东西应该可以正常工作。 我的设置: 例外情况: 组织。jboss。焊接例外情况。DeploymentException:包含3个异常的异常列表: 异常0:org.jboss.weld.exceptions.部署异常: WELD-001408:带限定符的类型记录器的不满意依赖

  • 像这样上课: 有没有可能告诉Weld不要注射到c中?我可以否决使用事件的类: 但是B物体也不会被注射。我在搜索类似这样的东西:“如果类名是A,字段类型是C,那么省略注入。” 更具体地说,我希望HK2引擎注入“C”字段,问题是HK2和焊接都使用@注入注释。 我尝试了西利亚罗斯的解决方案。我找到了想要添加自定义注入实现的类型,比如: 在我添加了覆盖注入(…)在美国 比如: 在Manager eBVia

  • 问题内容: 我试图将在Spring上下文中定义的bean注入到CDI托管组件中,但没有成功。不会注入Bean,而是在每次执行注入时都会创建一个新实例。我的环境是带有JBoss Weld的Tomcat 7。 Spring ApplicationContext很简单: CDI托管bean如下所示: 这是我的 但是,当我从JSF页面访问属性时,每次访问时都会创建一个新实例。这是一个简单的示例: 我得到以

  • 我正在尝试在我的应用程序中实现注销,因此我做了以下操作: 但是当我检查用户是否登录时,它说是: 我错过什么了吗?在使会话无效后,我是否应该获得一个新的AuthorizedUser实例(sessionScoped)? 编辑:如果有人需要,添加getHandler;)