1

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

@Singleton
@Startup
public class Initialization
{

  @Inject
  private InitialDAO dao;

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

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

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,而单例则被指定为 applicationscoped,如 ejb 规范中所述。

我面临的问题是没有活动上下文问题,因为由于范围不同,dao 不会获得会话,因为单例使用不同于 requestScoped 的不同范围。

我可以全部重写并避免使用注入,但我想知道是否有可能从单例中“滥用”生产者方法以获得有效的 initialdao?

问候,

迈克尔

4

0 回答 0