注入@Startup @Singleton bean实例为null - Tomee Webprofile 1.6.0.2

时间:2014-12-21 21:02:20

标签: java cdi java-ee-6

我的@Singleton @Startup bean的实例,Tomee成功地创建,启动和放置了我的单例容器'当我尝试在POJO中使用它时为null。我已尝试使用和不使用POJO的@ManagedBean anotation。我是否遗漏了规范或教程中的基本内容?

非常感谢, 特德S.

Tomee启动日志:

Dec 21, 2014 2:48:24 PM org.apache.openejb.assembler.classic.Assembler startEjbs
INFO: Started Ejb(deployment-id=MyStartupBean, ejb-name=MyStartupBean, container=My Singleton Container)

MyStartupBean.java:

@Startup
@Singleton
public class MyStartupBean
{
    private final Properties _companyNames = new Properties();

    @PostConstruct
    public void init() 
    {   
        _companyNames.put("key1", "ABC Company");
        _companyNames.put("key2", "XYZ Company");
     }

    public Properties getCompanyNames()
    {
        return _companyNames;
     }
}

MyPojo.java:

public class MyPojo
{
    @EJB
    private MyStartupBean _startupBean;
    private String _companyName;    

    public MyPojo(String inputKey)
    {
        Properties companyNames = _startupBean.getCompanyNames(); // <== _startupBean is null
        String name = companyNames.getProperty(inputKey);
        setCompanyName(name);
    }

    public void setCompanyName(String name)
    {
        _companyName = name;
    }

    public String getCompanyName()
    {
        return _companyName;
    }
}

1 个答案:

答案 0 :(得分:1)

你可能实例化你的pojo不是你,例如。

MyPojo mp = new MyPojo(someInput);

当你这样做时,注射不起作用。您需要使用托管引用来使用CDI / EJB组件。