gpt4 book ai didi

java - 如何将当前的vaadin session 提供给线程池的旧线程?

转载 作者:搜寻专家 更新时间:2023-11-01 03:02:35 24 4
gpt4 key购买 nike

我在理解以下引用 VaadinSession.getCurrent() 时遇到 问题

Gets the currently used session. The current session is automatically defined when processing requests to the server and in threads started at a point when the current session is defined (see InheritableThreadLocal). In other cases, (e.g. from background threads started in some other way), the current session is not automatically defined.

具体以下几点对我来说很难理解,

... in threads started at a point when the current session is defined (see InheritableThreadLocal).

这是什么意思?

我的理解是如果线程是在定义新 session 之前或在 session 中创建的,那么它不会引用当前新创建的 session 。 p>

目前我有线程池,一些线程指的是现在关闭的旧 session ,那么我将在这些线程中使用 session 时遇到问题。

我将 springvaadin 一起使用,特别是 @Async 方法调用。

@Async
public static methodX() {
//I have used session inside it
}

问题是,thread1 已用于执行 methodX,现在我已使用 session session1 并且在用户注销后此 session1 将关闭。

现在,当新用户登录到有session2的系统,再次用thread1执行这个方法时,这个方法仍然使用了session1 而不是 session2,当方法试图从 closed session1 获取数据时会产生问题。

我的问题:

  • 为什么 Vaadin 不能提供或通知旧线程(属于旧(关闭的线程) ) session) 关于新定义的 Session ?
  • 向这些线程提供 session 的最佳方法是什么?

最佳答案

这意味着如果你在单独的线程中处理数据,你将没有当前 session :

所以这段代码:

Runtime runtime = Runtime.getRuntime();                 
final Process process = runtime.exec(action);
new Thread() {
public void run() {
try {
System.out.println(VaadinSession.getCurrent());
} catch(IOException ioe) {
ioe.printStackTrace();
}
}
}.start();

在您的 vaadin 项目中将打印一个旧 session ,即线程启动时的 session 。

编辑

我认为 Vaadin 不能为旧线程提供新 session 以避免数据损坏问题。我的意思是如果 5 个线程正在编辑同一个 session ,你就会遇到问题......

您的解决方案是为池中的每个线程提供 session ,但我真的不知道如何实现这一点,到目前为止谷歌没有给我答案。

编辑:另一种可能的解决方案

使用 HashMap<int, VaadinSession> 创建一个类来存储每个 session (使用 SessionListener )以静态方式。

当你创建你的线程时,给他们一个他们需要使用的 session 的id(id是对应于你在HashMap中你想要的 session 的键)。然后每次编辑、销毁 session 等时,只需在 HashMap 中编辑它即可。 .

由于此 HashMap 的静态行为,您可以随时从任何线程访问它,您唯一需要的是线程中与您的 session 对应的 int id。

关于java - 如何将当前的vaadin session 提供给线程池的旧线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31939561/

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