我有一个必须在启动时运行的类,所以我创建了以下内容:
@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?
问候,
迈克尔