gpt4 book ai didi

session - 在远程调用期间管理无状态 EJB 的 "session"或调用上下文的技术是什么?

转载 作者:行者123 更新时间:2023-12-01 13:52:07 25 4
gpt4 key购买 nike

我正在编写一个使用 RMI 调用 EJB 的应用程序。 EJB 是无状态的;业务需求不需要与客户的对话状态。

EJB 方法调用的参数之一是“用户”对象,用于确定与调用关联的用户是否有权执行该操作。我们没有使用容器管理的 auth-auth:User 对象只是远程客户端提供的 POJO。

我想让这个用户对象在“ session ”或调用上下文中全局可用/可注入(inject)。我知道无状态 EJB 没有 EJB 意义上的“ session ”;我所说的“ session ”是指“当前调用”。例如,假设我们只有一个具有两种方法的远程 EJB:

  • myStatelessEjb.add(事物, 用户)
  • myStatelessEjb.update(事物, 用户)

这些方法调用了更多方法:涉及其他 EJB、Bean Validator 等。与其到处传递 User 对象,我想让 User 对象在当前远程上下文中全局可用/可注入(inject)EJB 调用。

我当然可以绕过 User 对象或用“Thing”封装它,但我认为不使用 User “污染”我的对象和 API 可能是一个更好的设计,因为这是一个横切关注点。

注释(强调):

  • 我正在使用 RMI。
  • 没有 HTTP session ,因为我使用的是 RMI。
  • 我没有使用容器管理的 auth-auth。
  • 我正在使用容器管理的事务。

是否有适用于此问题的标准技术?例如也许远程客户端应该调用一个有状态的 EJB 来保存用户,或者 ThreadLocal 是合适的,或者我可以连接到容器管理的事务,或者可能已经有一个我不知道的适用 session /上下文。

最佳答案

最简单的方法是将用户存储在@RequestScoped CDI bean 中并根据需要注入(inject):

@RequestScoped
public class RequestUser {
private User user;

//getter and setter for user
}

@Remote
@Statless
public class MyRemoteInterface {
@Inject
private RequestUser requestUser;
...
public void foo(User user, Bar bar) {
request.setUser(user);
...
}
}

@Stateless
public class OtherEJB() {
@Inject
private RequestUser user;

public void doBar(Bar bar) {
User user = user.getUser();
...
}
}

同时 @SessionScoped仅对 HTTP session 有用,@RequestScoped具有更广泛的适用性:

public @interface RequestScoped

Specifies that a bean is request scoped.

The request scope is active:

  • during the service() method of any servlet in the web application, during the doFilter() method of any servlet filter and when the container calls any ServletRequestListener or AsyncListener,
  • during any Java EE web service invocation,
  • during any remote method invocation of any EJB, during any asynchronous method invocation of any EJB, during any call to an EJB timeout method and during message delivery to any EJB message-driven bean, and
  • during any message delivery to a MessageListener for a JMS topic or queue obtained from the Java EE component environment.

关于session - 在远程调用期间管理无状态 EJB 的 "session"或调用上下文的技术是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30945216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com