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

12
我正在寻找在JBoss上部署的EJB中的入口点。
Servlet有load-on-startup标签可用于其web.xml文件中。
我正在寻找类似于EJB的init()功能。
5个回答

26

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

来自 应用程序启动/关闭回调

   @Startup
   @Singleton
   public class FooBean {

       @PostConstruct 
       void atStartup() { ... }

       @PreDestroy
       void atShutdown() { ... }

   }

否则,您需要依靠使用ServletContextInitializer的老技巧。
有一些特定于应用程序的扩展,例如Glassfish的生命周期监听器。也许JBoss也有类似的东西。
但是如果我是您,我会尽可能地依赖标准功能。非标准扩展的问题在于您永远不知道可以做什么或不能做什么,例如是否可以启动事务等。

1
另外一种方法是使用具有启动/停止生命周期方法的MBean。 MBean被注入所需的EJB,并调用所需的任何方法。 - Bozhidar Batsov
两篇非常棒的文章。最终我使用了“ServletWrapper”。但是重构仍在计划中。 谢谢。 - aelgn
我正在使用jboss 5.1(不确定它是否支持EJB3.1),我可以使用这种技术来调用部署的方法吗?谢谢。 - rayman

4
如果你的目标是JBoss AS 5.1,并且你不介意使用JBoss EJB 3.0扩展,你可以构建一个服务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;
}

更多相关信息,包括其他的生命周期事件,请点击此处查看。


4

1

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

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

1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接