- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
TL;博士 我们得到 @SessionScoped
注入(inject)的 bean 实例具有另一个 session 的内容
最近,我们的两个客户系统遇到了严重的问题。我们的客户正在两台装有 WELD 2.0.5 的 Glassfish 4.0 服务器的机器上运行同一 JSF 2.2 应用程序的两个独立实例(内存泄漏!)。
一些用户一直在报告问题,例如提交表单,响应显示另一个用户名而不是最初登录的用户名。由于我们无法在我们的开发和测试环境中重现这种行为,我们开始从生产系统中获取日志数据。
我们记录了什么?
在我们第一次尝试时,我们开始记录哪个用户在某个时间从哪个客户端执行了哪个操作。在浏览日志后,我们发现了这样的序列:
Time Client User Action
.............................
t=0 ClientA UserA Login
t=1 ClientA UserA Logoff
t=2 ClientB UserB Login
t=3 ClientB UserB ActionA
t=4 ClientB *UserA* ActionB
t=5 ClientB UserB Logoff
User A
)在替换发生之前并不总是结束(有时会导致一个用户注销另一个用户......)。那么当前登录的用户存储在哪里呢?我们将其作为属性存储在
@SessionScoped
中bean 被注入(inject)
@RequestScoped
bean 在我们需要这些信息的任何地方。这使我们得出了一个理论,即
@SessionScoped
bean 有时会混淆。
@Named
@javax.enterprise.context.SessionScoped
public class SessionStateBean {
private User user;
public void setUser(...) { }
public User getUser() { }
}
@SessionScoped
的值进行比较。 bean 角,扁 bean 。 @SessionScoped
的每个实例bean 收到自己的 UUID 并在 bean 构建和销毁以及用户属性更改时进行记录。我们知道 @SessionScoped
是可能的beans 可以有多个代理,被钝化等,但我们试了一下。 Time Session Client User Action
.............................
t=0 SessA ClientA UserA Login
t=1 SessA ClientA UserA Logoff
t=2 SessB ClientB UserB Login
t=3 SessB ClientB UserB ActionA
t=4 |SessB ClientB *UserA* ActionB
+-> SessionScope != Session
t=5 SessB ClientB UserB Logoff
@SessionScoped
发生了什么 bean 实例。由于我们正在跟踪
@PostConstruct
&
@PreDestroy
事件,观察到如下序列:
Time Session Bean Action UserValue
................................
t=0 SessA BeanA Construct (null)
t=1 SessA BeanA SetUser UserA // login
t=2 SessA BeanA SetUser (null) // logout
t=3 SessA BeanA Destroy (null)
// so far so good, now it gets interesting
t=4 SessB BeanA SetUser UserB // login
t=5 SessB BeanA SetUser (null) // logout
t=6 SessC BeanA SetUser UserC // login
t=7 SessC BeanA SetUser (null) // logout
t=8 SessD BeanA SetUser UserD // login
t=9 SessD BeanA SetUser (null) // logout
@PreDestroy
之后事件 bean 实例无需经过构建和销毁的生命周期即可重用。考虑到所有记录的 bean 实例,这发生在大约。从 500(系统 A)到 4000(系统 B)中的 1 个 bean。当 session 范围值和 HTTP session 值不同时,这并不总是发生,但是当我们看到这样的 bean 实例被重用时,总是发生在值不同的时候。
@SessionScoped
中来绕过这个问题。 bean 直接进入 HTTP session ,到目前为止它似乎工作正常。但是这种方法实在是太笨拙了……
最佳答案
而不是以这种方式注入(inject) session 范围的 bean:
@Inject
private SessionBean sessionBean;
@Inject
private Instance<SessionBean> sessionBean;
关于jsf - Weld + GF4 + SessionScoped : Sometimes wrong bean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25017334/
Note The specifics in this question regarding read_line and ~str pertain to a pre-1.0 version of Rus
我正在研究 Python 中字典的使用,我对必须用来将键与值分开的符号以及键的“”感到越来越困惑。 通常,我会这样写: user = {"name": "John", "surname": "Doe"
这post's answer建议 PEP 8: E128 要求在第一行之后的行上有空格,当它们都包含在括号内时。但是,对于 if 语句,情况似乎并非如此。您可以看到前三行没有警告,而后三行有警告,因为
作为个人挑战,我正在尝试创建一个工具,该工具将使用Puppeteer抓取网站(本实验所使用的购物平台AliBaba)的搜索结果,并将输出保存到JSON对象中,以便以后用于创建前端的可视化。 我的第一步
我注意到在 WPF 中,当尝试从后台线程更新 UI 时(我知道你不应该这样做 - 只是玩弄东西),有时它会抛出 InvalidOperationException,有时它只是什么也没做。我第一次注意到
为什么R与plot()函数中的add参数不一致?有时有效有时无效!在此示例中,它采用参数 add=TRUE 没有问题: plot(0:10, 0:10*3) plot(identity, add=TR
我正在尝试用 node.js 制作一些东西,我(和其他开始学习 node 的人一样)对它的异步性质有疑问。我四处搜索了一下,但找不到关于它的具体问题的答案(也许我只是搜索得不是很好......),所以
我有一个垫表,它调用 GET要求。我还有一个 Mat Dialog,它可以获取数据并保存点击调用 POST要求。一切正常,但有时在我单击“保存”按钮后表格会更新,但有时不会(我必须重新加载页面并查看它
我正在使用 GSON 来解析 JSON 字符串,但有一个键包含 Json,它有时是对象,有时是数组。 所以请帮助我使用 gson 将它解析为模型类。 Resonse with Array { "
我想知道为什么在 Mac OS X 上的滚动条有时是白色透明的,有时是黑色透明的,如果您在常规设置中将“显示滚动条”设置为“滚动时”。所有浏览器(Safari、Chrome、Firefox、Opera
我已经开发了一个需要使用本地化的应用程序,所以我选择了 this nice library为我的申请。但我只是混淆了他们的文档中提到他们需要使用观察者通知来收听语言何时发生变化。但是在我的主 Cont
我在 ChildWindow 中使用 SL Toolkit 5 中的 BusyIndicator 控件。 在某些解决方案中,它可以工作,但在其他解决方案中,使用完全相同的代码(至少看起来),我在运
问题:我目睹了一种随机情况,其中 ob_get_conents() 什么都不返回,而它应该有一些东西。每天失败几千次。随机。 基础:我使用输出缓冲将特定的 HTML 生成输出包装到一个变量中并写入文件
很难说出这里问的是什么。这个问题是模棱两可的、模糊的、不完整的、过于宽泛的或修辞的,无法以目前的形式得到合理的回答。如需帮助澄清这个问题以便重新打开它,visit the help center .
我正在使用 React 和 EmailJS 设计联系表单。我的问题是,当我输入自己的姓名、电子邮件、电话或消息值时,电子邮件不起作用。当我单击“发送消息”按钮而不在“姓名”、“电子邮件”、“电话”或“
我很困惑。 我创建了以下位于 http://tapmeister.com/test/dom.html 的脚本.由于某些未知原因,tinymce.editors.ta1 和 tinymce.editor
我正在尝试在运行时实现自动类注册(我认为这种技术属于“注册模式”的名称)。在下面的示例中,我将 int 存储在静态成员 vector 中,但目标是存储以后可以调用的函数指针。 我的理解是,由于我下面代
我的程序有时会崩溃,有时当我对数组中的元素调用 free() 时不会。数组中的元素是一个结构。我将展示一些代码: //This first part might be a bit messy, and
我正在使用 Laravel Validator 类对数组进行一些基本验证。 我的数组: $employee['name']='name'; $employee['address']='address'
作为一名法国 Gwent 玩家,我构建了一个 discord 机器人(使用 node.js 和 discord.js)来在您命名卡片时显示卡片的信息。它使用一些自定义表情来显示其中的某些部分。 它在几
我是一名优秀的程序员,十分优秀!