2010-06-18 69 views

回答

1

不知道我明确你的意思。首先,您可能需要区分无状态和有状态的EJB。

  • 无状态EJB非常,无国籍,而不应包含数据。应用程序。服务器可以决定随时销毁或重建它。您实际上不会持有对查询时创建的特定实例的引用。应用程序。服务器维护一个EJB池,并且每个调用都使用其中的一个。

  • 有状态的EJB可以包含数据。您持有对查找bean时创建的一个特定实例的引用。回调方法可以用@PostConstruct@PreDestroy来指定(这些回调函数对于无状态EJB也是存在的,但意义不大)。

这就是说,如果你需要执行一些被称为方法之前,我建议你使用拦截(使用@Interceptor,适用于无状态和有状态EJB)。就像使用AOP一样,您有机会在bean方法实际执行之前和之后执行某些操作,例如刷新缓存。

+0

数据是独立于客户端的,所以我创建了无状态bean(也许是错误的)。我需要在方法调用之前读取配置文件。这个配置可能会在部署后发生变化,所以我需要每次有人查找我的EJB时更新这些数据。 – Filip 2010-06-18 11:34:58

+0

我现在看到。配置数据不是业务数据,您的情况也不是完全静态的。我担心每次对配置进行重新编码都会成为糟糕的性能表现。您可以存储时间戳并在某段时间过后重新加载数据。您可以将配置存储在实例字段中的静态字段中,或者如果您使用EJB 3.1,则尝试一个'@ Singleton' bean。实例字段意味着每个bean实例都有一个配置,静态字段意味着只有一个配置,但您必须确保正确同步事物。 – ewernli 2010-06-18 11:57:43