0

我想将上次修改表行的用户名存储为每个表中的字段。

我有以下设置:用户登录,Web 层调用一些 EJB 3.0 bean。这些 EJB bean 创建和修改一些 JPA 实体。现在,我希望将用户名(来自 weblayer)自动存储到在 EJB 方法调用期间创建或修改的每个 JPA 实体(和数据库行)。

我有这种表,(即:每个表都有字段修饰符):

CREATE TABLE my_table (
  some_data INTEGER,
  modifier VARCHAR(20)
);

自动我的意思是,我不需要为 EJB 方法中的每个实体手动设置用户名。

您可以通过将用户名存储到 ThreadLocal 变量并从 JPA 实体的 EntityListener 中的 ThreadLocal 获取用户名来实现此目的。但是,这只适用于您使用本地 EJB 调用,它不适用于跨 JVM 边界的 EJB 调用。我想通过远程 EJB 方法调用来完成这项工作。

这可能吗?

我正在使用 Weblogic Server 10.3、EJB3.0 和 EclipseLink JPA。我也有兴趣了解这是否适用于其他 JPA 实现。

4

1 回答 1

3

您可以在 EJB 类上使用 EJB 拦截器 (@Around) 来获取当前用户(使用标准 EJB api)并将名称存储在 threadlocal 变量中。这对于远程和本地调用是透明的。

于 2009-03-11T04:14:38.477 回答