在JBoss启动时调用EJB中的方法

时间:2010-06-08 07:41:13

标签: java jboss java-ee ejb lifecycle

我正在寻找在JBoss上部署的EJB的入口点。

Servlet在load-on-startup中使用web.xml标记。

我正在为EJB搜索类似的init()功能。

5 个答案:

答案 0 :(得分:25)

在3.1之前,EJB不存在。使用EJB 3.1,您可以使用单例bean来模拟:

来自Application Startup / Shutdown Callbacks

   @Startup
   @Singleton
   public class FooBean {

       @PostConstruct 
       void atStartup() { ... }

       @PreDestroy
       void atShutdown() { ... }

   }

否则,你需要依靠好老技巧来使用ServletContextInitializer

有一些特定于应用程序的扩展,例如Glassfish lifecycle listener。也许JBoss有这样的事情。

但如果我是你,我会尽可能地依赖标准功能。非标准扩展的问题在于您永远不知道可以做什么或不做什么,例如你可以开始交易等吗?

答案 1 :(得分:4)

本文介绍了在服务器启动时调用功能的七种不同方法。但并非所有这些都适用于JBoss。

Seven ways to get things started. Java EE Startup Classes with GlassFish and WebLogic

答案 2 :(得分:4)

如果你的目标是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

答案 3 :(得分:1)

Managed Beans可用于在JBoss启动时执行某些过程,您必须在配置文件中添加该托管bean的条目。

答案 4 :(得分:1)

您应该能够将以下行添加到要在启动时运行的方法的顶部:

@Observer("org.jboss.seam.postInitialization")