我想在不使用servlet的情况下在同一时刻调用EJB中的方法,而不使用servlet。
感谢。
大卫。
答案 0 :(得分:2)
似乎没有为此目的由EJB规范定义的生命周期方法。各个供应商可以提供扩展以允许此操作。例如,Startup Beans in WebSphere将是放置所需调用逻辑的地方。
使用诸如静态方法之类的技术似乎有点危险,因为我们不知道在静态方法触发之前是否所有依赖注入都已完成,因此是否可以安全地使用EJB的业务方法。
Persoanlly,如果我需要便携式,我会咬紧牙关并使用servlet。它的成本非常低。
答案 1 :(得分:0)
尝试在静态块中进行初始化。当类加载器加载类时,这将运行一次。
static { System.out.println("static"); }
答案 2 :(得分:0)
PostConstruct钩子是正确的。
在此处查找有关PostConstruct的更多信息:
让我们以一个简单的例子结束:
@Stateless
public class TestEJB implements MyEJBInterface{
@PostConstruct
public void doThatAfterInitialization() {
//put your code here to be executed after creation and initialization of your bean
}
}
答案 3 :(得分:0)
静态初始化块在技术上在EJB中不是非法的,但在实例化类时,它们用于在任何构造函数之前执行代码(这可能是一个问题)。它们通常用于初始化静态字段,如果它们不是只读的,则在EJB中可能是非法的。那么,如何使用ejbCreate()
,setSessionContext()
或setEntityContext()
方法呢(如果没有关于您要解决的问题的更多详细信息,甚至不确定这是否合适)?
答案 4 :(得分:0)
对于@Singleton bean,EJB容器应在部署应用程序时立即创建bean实例(如果注释为@Startup。
当然,这将启动静态初始化块,构造函数,依赖注入setter,@ PostConstruct方法等。
以下是对Java EE 6 Tutorial的恰当引用。