【发布时间】:2010-06-08 07:41:12
【问题描述】:
我正在寻找部署在 JBoss 上的 EJB 中的入口点。
Servlet 在其web.xml 中使用load-on-startup 标记。
我正在为 EJB 搜索类似的 init() 功能。
【问题讨论】:
标签: java jboss jakarta-ee ejb lifecycle
我正在寻找部署在 JBoss 上的 EJB 中的入口点。
Servlet 在其web.xml 中使用load-on-startup 标记。
我正在为 EJB 搜索类似的 init() 功能。
【问题讨论】:
标签: java jboss jakarta-ee ejb lifecycle
直到 3.1 才出现 EJB。使用 EJB 3.1,您可以使用单例 bean 来模拟:
来自Application Startup / Shutdown Callbacks:
@Startup
@Singleton
public class FooBean {
@PostConstruct
void atStartup() { ... }
@PreDestroy
void atShutdown() { ... }
}
否则,您将需要依靠古老的技巧来使用ServletContextInitializer。
有一些特定于应用程序的扩展,例如lifecycle listener 用于 Glassfish。也许JBoss有这样的事情。
但如果我是你,我会尽量依赖标准功能。非标准扩展的问题是您永远不知道可以做什么或不可以做什么,例如能不能开始交易等等
【讨论】:
本文描述了在服务器启动时调用功能的七种不同方式。不过,并非所有人都可以使用 JBoss。
Seven ways to get things started. Java EE Startup Classes with GlassFish and WebLogic
【讨论】:
如果您的目标是 JBoss AS 5.1,并且您不介意使用 JBoss EJB 3.0 Extensions,您可以构建一个服务 bean 来引导您的 EJB。如果你的服务实现了一个带有@Management注解的接口并声明了一个带有public void start() throws Exception签名的方法,JBoss将在它启动服务时调用这个方法。然后,您可以在要初始化的 EJB 上调用专用的 init() 方法:
@Service
public class BeanLauncher implements BeanLauncherManagement
{
@EJB private SessionBeanLocal sessionBean;
@Override
public void start() throws Exception
{
sessionBean.init();
}
}
@Management
public interface BeanLauncherManagement
{
public void start() throws Exception;
}
有关这方面的更多信息,包括其他生命周期事件,可以找到here。
【讨论】:
托管 Bean 可用于在 JBoss 启动时执行某些处理,您必须在配置文件中添加该托管 bean 的条目。
【讨论】:
您应该能够将以下行添加到要在启动时运行的方法的顶部:
@Observer("org.jboss.seam.postInitialization")
【讨论】: