@Startup @Singleton和@Produces的bean范围问题

时间:2013-10-14 11:51:05

标签: java-ee-6 cdi

我有一个必须在启动时运行的类,所以我创建了以下内容:

@Singleton
@Startup
public class Initialization
{

  @Inject
  private InitialDAO dao;

  @PostConstruct
  public void init()
  {
    dao.assurePresenceEngineStructure();
  }
}

InitialDAO有一个会话,由一个单独的类中的Producer方法注入。这是initalDAO:

public class InitialDAO 
{
  @Inject
  protected Session session;

  public void assurePresenceEngineStructure() 
  {
    Node node = session.getNode("/test");
    System.out.println(node.getPath);
  }
}

和具有生产者方法的类:

public class SessionProducer
{
    @RequestScoped
    @Produces
    public Session getSession() throws RepositoryException
    { 

      Session session = new FakeSession();
      return session;
    }
}

请注意,生产者方法已经被赋予requestScoped,并且单例被给予了应用程序,如ejb规范中所述。

我面临的问题是没有活动的上下文问题,因为作用域的不同,dao将不会获得会话,因为单例使用与requestScoped不同的不同作用域。

我可以重写所有并避免使用注入,但我想知道是否有可能“滥用”单例中的生成器方法以获得有效的初始值?

的问候,

迈克尔

0 个答案:

没有答案