我有一个必须在启动时运行的类,所以我创建了以下内容:
@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不同的不同作用域。
我可以重写所有并避免使用注入,但我想知道是否有可能“滥用”单例中的生成器方法以获得有效的初始值?
的问候,
迈克尔