Jakarta ee 无状态EJB中的刷新数据

Jakarta ee 无状态EJB中的刷新数据,jakarta-ee,ejb,Jakarta Ee,Ejb,是否有一个每次查找EJB时都会调用的函数?在调用任何方法之前,我需要刷新一些数据。不确定我是否完全理解您的意思。首先,您可能需要区分无状态EJB和有状态EJB 无状态EJB是良好的、无状态的,不应该包含数据。应用程序。服务器可以随时决定销毁或重建它。您实际上并不持有对特定实例的引用,该实例是在查找时创建的。应用程序。服务器维护一个EJB池,每次调用使用其中一个EJB 有状态EJB可以包含数据。您持有对一个特定实例的引用,该实例是在查找bean时创建的。回调方法可以通过@PostConstruc

是否有一个每次查找EJB时都会调用的函数?在调用任何方法之前,我需要刷新一些数据。

不确定我是否完全理解您的意思。首先,您可能需要区分无状态EJB和有状态EJB

  • 无状态EJB是良好的、无状态的,不应该包含数据。应用程序。服务器可以随时决定销毁或重建它。您实际上并不持有对特定实例的引用,该实例是在查找时创建的。应用程序。服务器维护一个EJB池,每次调用使用其中一个EJB

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


也就是说,如果您需要在调用方法之前执行某些操作,我建议您使用拦截器(使用
@interceptor
,适用于无状态和有状态EJB)。与AOP一样,您可以在bean方法实际执行之前和之后执行一些操作,例如刷新缓存

数据是独立于客户端的,所以我创建了无状态bean(可能是错误的)。我需要在方法调用之前读取配置文件。此配置在部署后可能会更改,因此每次有人查找我的EJB时,我都需要更新此数据。配置数据不是业务数据,在您的情况下也不是完全静态的。我担心每次重新修改配置都会带来糟糕的性能。您可以存储一个时间戳,并在经过特定时间段后重新加载数据。如果使用EJB3.1,您可以将配置存储在实例字段、静态字段中,或者尝试使用
@Singleton
bean。实例字段意味着每个bean实例将有一个配置,静态字段意味着只有一个配置,但必须确保正确地同步。