问题标签 [stateful-session-bean]

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.

0 投票
0 回答
48 浏览

jakarta-ee - 保留会话

我必须使用 Java EE 开发一个应用程序,该应用程序将包含用户和一些特定于该用户的数据,这些数据保留在数据库中。我现在正在学习使用 Java 进行 Web 开发,所以我想问一下将登录的用户 id 保存在有状态会话 bean 中是否正确,然后将这个有状态的 bin 注入一个无状态的 bin 中,其中将包含更新和检索这些数据的方法基于从有状态bean中获取的id?

0 投票
1 回答
302 浏览

singleton - EJB-@Singleton 管理查询结果

我应该使用 EJB-@Singleton (javax.ejb.Singleton) 进行统计或监视,还是将统计信息缓存在公共 @SessionScoped-Bean 中会更好?为了澄清我的问题,这里有两种情况:

情景一:

用户开始 Web 会话并进行数据库查询以查看统计信息或数据表。这些查询在其会话中完成。因此,10.000 个用户将进行 10.000 个相等的数据库查询。

场景二:

用户开始 Web 会话并从预初始化的 @Singleton-Bean 重试统计数据或数据表的数据。@Singleton (javax.ejb.Singleton) 在服务器启动 (@Startup) 的开头进行了查询。因此,10.000 个用户可以从 ONE 缓存 (@Singleton) 中读取数据,而不必查询数据库。如果其他人创建/编辑/删除数据,我的 @Singleton-Bean 会触发其缓存数据的刷新。

所以我的问题是:

  • 场景 II 的扩展性是否比场景 I 更好?我猜是。我对吗?
  • 还有其他注意事项或需要考虑的事情吗?
  • 我知道,Stateless-Beans 比@stateful 或@Singleton 扩展得多。我是否应该考虑使用@Stateless-Bean 并使用 JPA/Hibernate 缓存之类的东西缓存查询。
  • 我应该使用@ApplicationScoped (javax.enterprise.context) 而不是@Singleton (javax.ejb.Singleton) 来使用代理吗?会更好吗?
0 投票
2 回答
374 浏览

ejb-3.0 - 有状态的 Bean:s​​erlvet 取错误的值,而 managedBean 没有

我有一个Stateful Session Bean保存我的登录会话的 aJSF Session Bean和一个Servlet Filter.

我需要做的是阻止非登录用户访问我的页面,所以我做了一个过滤器。

doFilter()是这样的:

在哪里userManager找到:

现在,总是System.out.println(userManager.isLogged());打印为假,而打印为真。#{loginBean.logged}

请注意,这loginBean.logged只是

并且,在我的托管 Bean 中,userManager通过

似乎 servlet 不采用与 JSF 托管 Bean 相同的 SFSB。

我究竟做错了什么?

编辑:新代码

小服务程序

jsf豆

0 投票
4 回答
1394 浏览

java - GlassFish 如何将客户端请求映射到会话

使用 EJB (3.x),您可以选择会话 Bean:@Stateful@Stateless. 如果我了解这两个选项背后的基础知识:

  • @Stateful- 每个用户/客户都有自己的,因此通常不会被汇集;跨多个请求维护状态
  • @Stateless- 不维护请求之间的状态,因此通常是池化的,因此每个新的客户端请求都会获得一个新的 bean

我的核心问题很简单,但是我有几个与之相关的小问题:我的 POJO 设计在@Statefulbeans 与. 之间有何不同@Stateless换句话说,如果我有一个HelloWorld实现Hello接口的 bean,那么 POJO 的设计如何根据我是否希望它是有状态的而改变?

与此相切:

  • 应用程序容器(在我的情况下为 GlassFish)对 EJB 施加了哪些不同的限制,具体取决于它是否有状态?
  • 在 的情况下@Stateful,来自同一用户/客户端的客户端请求如何映射到正确的 bean(从前一个请求维护客户端状态的 bean)?
  • 会话 bean 什么时候死?我假设它在请求完成后立即@Stateless,但没有任何线索@Stateful

在此先感谢您的澄清。

0 投票
1 回答
1299 浏览

java - 有状态会话 bean 与持久实体

有状态会话 bean 通常通过实现购物车来说明。来自 Java EE 外部,我倾向于使用持久模型实体来处理这种状态:具有 Products 和数量的 ShoppingCart 对象。这样,我的状态与我的所有其他状态一起由数据库维护,而不是由应用程序服务器维护。

与“普通”持久性相比,有状态会话 bean 设计的技术优势是什么?基于 Java EE 的 Web 应用程序中的购物车是否确实通常使用 SFSB 编写,或者在其他系统中仅通过更精细的域建模来编写?

0 投票
3 回答
9749 浏览

java - Java EE 6:如何从无状态会话 Bean 调用有状态会话 Bean?

我有一个作为身份验证模块的有状态会话 Bean (SFSB)。在 SFSB 中,我存储当前登录的用户。此外,我有一些外观(它们是无状态会话 Bean (SLSB))来处理我的实体的 JPA/SQL 内容。为了检查当前用户的访问权限,我尝试从 SLSB 中调用 SFSB。但是从 SLSB 调用时,当前用户字段始终为“空”。直接调用 SFSB 时,当前用户字段设置正确......对于调用,我使用 @EJB 注释。

任何想法可能是什么问题?这在某种程度上是一个上下文问题吗?通常可以从 SLSB 调用 SFSB 来保留它的状态吗?

提前谢谢了!

0 投票
1 回答
3355 浏览

jsf-2 - 在 JSF + EJB 3.1 中的请求范围托管 Bean 之间传递参数

我们的问题是使用 JSF + EJB 编辑数据库的一个非常基本、简单的实现。

保持简短:两个独立的 XHTML 视图,使用两个独立的托管 Bean @RequestScope。

WebuserListBean 和 EditWebuserBean,我们用@ManagedProperty 注入WebuserListBean,这样我们就可以获取选中的用户数据。到目前为止没有问题。视图已成功填充数据!

但!我们希望能够编辑用户!在这里(令我惊讶的是)我们无法克服这个问题。

第一次尝试:因为在填充视图后请求范围的 bean 已死,所以在 Save() 方法上,@PostConstruct 尝试再次启动,当然它不能。所以我们甚至无法从数据库或任何东西中获取它。

第二次尝试:因为请求范围的 bean 在填充视图后已死,如果我们没有在 @postconstruct 中将用户设置为字段,我们将失去与之前视图链接的用户对象的连接(并注入,但现在该视图是也死了)。

第三次尝试:无法在 ViewScoped 中注入 RequestScope

好的,我们的限制,因为我们认为这是错误的方式:

  1. 我们不想为此创建一个 SessionScoped Managed Bean
  2. 我们不想使用任何参数等。我们想使用 EJB
  3. 我们不确定是否可以将数据存储在作为模块端点的有状态会话 bean 中?这是正确的方法吗?

感谢您的任何建议,我们可以粘贴一些代码,但我想这是没有意义的!干杯!

0 投票
1 回答
984 浏览

ejb - 为什么当我将托管 bean 转换为 SFSB 时会得到 TwoPhaseCoordinator.afterCompletion - SynchronizationImple 返回失败

当会话超时时,我的 @SessionScoped WorkflowManager 托管 bean 能够重置状态,从而导致显示欢迎启动屏幕。将@Stateful 添加到 WorkflowManager 后,欢迎屏幕并没有始终如一地显示,而且从查看 server.log 来看,会话实际上并没有以一致的方式正确超时。当浏览器在会话超时后发出请求时, ViewExpiredExceptionHandler 应该重定向到启动屏幕。相反,出现的是以下堆栈跟踪和警告:

会话超时后,应销毁 WorkflowManager,并且来自客户端的下一个请求应导致创建新的 WorkflowManager。当 WorkflowManager 是托管 bean 时,这就是它工作得很好的方式。那么,为什么 JBoss 会尝试恢复之前被破坏的 WorkflowManager?我能做些什么来解决这个问题?

编辑:

0 投票
1 回答
495 浏览

jakarta-ee - 在 Filter 和 ManagedBean 中获取相同的 EJB 实例

我正在尝试向我的 Java EE 应用程序添加一个过滤器,但我遇到了一些问题。

我想将过滤器用于登录目的,所以我需要让它与管理登录的UserManager bean“对话”。

这是我的结构:

  • LoginFilter : ServletFilter
  • LoginBean : 一个SessionScoped 托管 Bean
  • UserManager:有状态会话 Bean

UserManager必须由LoginFilterLoginBean访问,因为它具有处理登录过程的方法。

LoginBean中,我用这个简单的行得到了UserManager :

我不能在LoginFilter中这样做,所以我不得不编写一个查找方法:

我也有一行将这个UserManagerLocal添加到请求属性中,但是它抛出了 NPE,因为当我调用查找方法时没有请求,所以我将它移到了doFilter()方法中。

现在问题来了。

LoginFilterLoginBean使用两个不同UserManager实例!这使得我的过滤器即使是登录的用户也停止了,因为LoginBean在UserManager的另一个实例上工作,所以LoginFilter不知道登录已经完成!

我该如何解决?我认为查找和注入会返回相同的SSFB实例!

0 投票
1 回答
178 浏览

ejb - 注入 CDI bean 到有状态 EJB 的可序列化性

我有有状态的 EJB 并注入到它的应用程序范围 CDI bean。Findbugs 发出警告,因为我的 CDI bean 不可序列化。在这种情况下,CDI bean 是否应该是可序列化的?为了避免钝化,我认为不应该。使这个领域“瞬态”足够吗,这是一个合适的解决方案吗?