问题标签 [seam-conversation]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
hibernate - 帮助我了解 SEAM 和 Hibernate?
我想将 SEAM Framework 与 Hibernate 一起使用,但不想使用 EJB。我不能使用 EJB。
第一个问题是,我可以使用 EntityManager 吗?还是 EntityManager 是 EJB 的一部分?
如何获得在我的 SEAM 组件中使用 Hibernate 的权限?
谢谢,菲利普
java - SEAM/Hibernate:在对话期间我无法从数据库中获取更改
我有一堂课:
start() 方法在对话开始时被调用并初始化属性 bar(Bar 是某个实体类)。然后, bar 有一个属性 baz ,它也是一个实体。
在对话期间,可能会发生其他一些用户修改与我们的 bar 相关的 baz 对象。然后,当 end() 被调用时,bar.getBaz() 返回旧的(未修改的)baz 版本,而且,将它覆盖到数据库中。
我尝试使用 session.flush()、session.merge(bar)、session.merge(bar.getBaz()) 在 end() 方法中获取 baz 的修改状态,但没有任何效果。如何避免数据库中的污染?
seam - 检查是否正在使用 Seam 对话,而无需锁定
在我们的 Seam 应用程序中,我们有一个轮询部分,只要页面在浏览器窗口/选项卡中保持打开状态,就可以保持对话处于活动状态,以允许用户同时使用多个对象实例,而无需进行对话当他们忙于另一个页面时,它们会在“非活动”页面上过期。
一切正常,但是当轮询线程发送一个请求而另一个(长时间运行)正在进行中时,我们时不时地会遇到可怕的并发调用对话异常。我们将 concurrent-request-timeout 值设置得非常高(20 秒),并且大多数情况下页面会在 2 秒内返回。但是,在某些情况下,用户处理大量数据(并且他们愿意等待这些页面加载,无论需要多长时间),因此在通用优化方面我们无能为力。
我们正在寻找一种方法来检查(在所有请求都通过的中央过滤器中)是否有给定对话上的锁,而不尝试获取一个(以便在有锁时不会触发异常它已经)。我们有办法区分我们是否正在处理这些后台线程之一(我们这样做是为了会话管理,所以它们扩展了会话,而不是会话,总体而言)。如果我们可以确定对话已经在使用中,我们可以跳过这个轮询线程的处理,因为在那个特定时间不需要它的服务(正在使用对话,所以没有过期的危险)。
TLDR:检查缝对话是否有锁而不尝试访问它(这可能导致触发并发调用对话异常)
非常感谢任何指针,建议。
seam2 - EJB @Stateless + Seam @Scope(ScopeType.CONVERSATION) = @Stateful?
我是一个新的 SEAM 开发人员,我肯定真的很喜欢这个平台。
我想知道无状态会话 bean 和会话范围是否与有状态会话 bean 具有相同的语义?
在这种情况下,EJB 客户端是接缝,对吧?因此使用会话范围,客户端(接缝组件)使用的 ejb bean 在会话期间将是相同的,这样状态将一直保留到会话结束。
这是对的吗 ?
java - @PostConstruct 为 @ConversationScoped bean 调用了多次
我有一个@ConversationScoped bean,带有一个 start 方法,如下所示:
我的问题是,每次刷新页面时都会启动一个新对话,每次我对 bean 中的方法进行 AJAX 调用时也会启动一个新对话(这是我的主要问题)。
我真正想要发生的是让 sam 对话一直存在,直到我手动调用 conversation.end()。我在这里想念什么?
seam-conversation - 为什么Seam对话ID(cid)不按顺序排列
我在接缝对话中遇到问题。
当我在 url 栏 (http://myprojectname/login.xhtml?cid=1) 看到时,我知道对话 ID 按顺序工作。但是在我的程序中,我首先开始对话并且 cid 为 1 (http://myprojectname/login.xhtml?cid=1) 然后我开始嵌套对话并且 cid 变为 4 (http://myprojectname/register.xhtml?cid =4)。为什么会这样?
在成功的程序中, cid 为 1 之后 cid 为 2 然后 3, 4 用于新的嵌套对话。但是我们想知道为什么对话 id 变成 1 然后是 4。
请解释一下。
jsf - CDI/Weld - 结束对话后如何处理浏览器页面刷新?
在使用 CDI 的早期,我使用 faces-redirect=true 导航到一个长时间运行的对话处于活动状态的页面,因此我有一个类似 ..myPage.xhtml?cid=1 的 URL。
在某个时候我结束了谈话,我的意思是这必须是一件合理的事情,或者你也可以使用会话范围?无论如何,我结束对话,然后用户按 F5,然后这当然会导致“未找到对话”错误,因为 cid=1 不存在。
谁能建议如何解决这个问题?我正在使用 Steven Verborgh ViewScoped 实现,并简单地使用对话范围 bean 在页面之间传递参数。因此,例如,我有 2 个 @ViewScoped bean,每个都返回第 1 页和第 2 页。我将 @ConversationScoped ParameterBean @Inject 到两个视图范围的 bean 中。我在从第 1 页调用的操作方法中开始对话 (parameterBean.getConversation().begin())。在第 2 页的 preRenderView 事件中,我将 parameterBean 的属性引用到第 2 页的支持 bean 实例变量中,并且结束对话,它完成了它的工作,不再需要。
除了 F5 问题,它工作正常。如果有人有任何建议,我将不胜感激,希望我不会遗漏一些非常明显的东西。我有点假设没有摆脱重定向。
谢谢。
java - JSF ConversationScoped bean 不提升 POST 之间的范围
我有一个带有名为 view() 的操作方法和 MyObject 类型的字段的 bean:
在 screen1.xhtml 上,我使用 primefaces p:dataTable 和 var="obj" 来输出带有 commandButton 的行,以查看用户单击的行的对象。每行上的按钮如下所示。
当用户单击其中一行中的 commandButton 时,他们将被带到 page2.xhtml,其中显示有关 obj 的更多详细信息。这可以正常工作并显示详细信息。当我在 view(MyObject selectedObj) 操作方法中时,我立即调用 conversation.begin(),分配 this.obj = selectedObj,然后用户获取 page2.xhtml。
但是,当用户单击 page2 上的 commandButton 时,它应该重新显示与来自 page1 时发生的 view() 操作调用分配的 obj 不同的信息,因为范围已提升到对话。这没有发生。当作用域本应防止其丢失时,bean 中的 obj 字段为空。因此,当他们单击 page2 上的命令按钮时,当页面尝试解析 #{myBean.someProperty} 时,它会给出空指针异常。
我错过了什么?感谢您的任何帮助。
javascript - 当用户离开页面时在 Seam 中结束对话
当用户离开页面时,有什么方法可以结束 Seam 2 中的对话吗?我知道,我当然可以在导航规则中结束对话(请参阅这篇文章),但我想在用户在浏览器的地址栏中输入 url 时结束对话。
这可以通过 Javascript 实现吗(例如使用 onbeforeunload)?但是如何通过 javascript 停止对话呢?
jsf - JSF 2 ConversationScope 是如何工作的?
我有一个 JSF facelets 页面,该页面根据他们正在查看的页面显示数据表。当我显示第 1 页时,我调用view()
action 方法从数据库中获取两个页面的数据并将其存储为 bean 的私有成员字段(两个数组)。我还在方法中调用conversation.start()
了注入的对话实例view()
。
当用户单击“下一步”h:commandButton
按钮next()
(问题是,数组 2 不再存在。我不知道为什么我失去了谈话范围。有任何想法吗?