Jakarta ee @PrePassivate和@PostActivate注释何时有用?

Jakarta ee @PrePassivate和@PostActivate注释何时有用?,jakarta-ee,ejb,ejb-passivation,Jakarta Ee,Ejb,Ejb Passivation,我在每个EJB教程中都看到了和注释,但我不知道它们有多有用。我需要它们的场景是什么?大多数情况下,当您使用有状态的会话bean时(除了一些很少需要的条件外,实际上不建议这样做),这对于容器在某个时间点管理和重用一些非活动连接非常有用,以帮助将从数据库获取的连接数保持在某个最佳数量 例如,您的DBMS可以管理1000个连接。因此,您可以在容器中创建大小为1000的连接池(应用程序服务器,例如GlassFish、Weblogic等) 然后,当您的应用程序达到1000个会话数时,例如,如果另一个用户希

我在每个EJB教程中都看到了和注释,但我不知道它们有多有用。我需要它们的场景是什么?

大多数情况下,当您使用有状态的会话bean时(除了一些很少需要的条件外,实际上不建议这样做),这对于容器在某个时间点管理和重用一些非活动连接非常有用,以帮助将从数据库获取的连接数保持在某个最佳数量

例如,您的DBMS可以管理1000个连接。因此,您可以在容器中创建大小为1000的连接池(应用程序服务器,例如GlassFish、Weblogic等)

然后,当您的应用程序达到1000个会话数时,例如,如果另一个用户希望进入您的应用程序,他/她应该等待,直到1000个连接中的一个被释放

在这种情况下,
钝化/激活
机制可能有用。很明显,
钝化/激活
在小型应用中不会发生。但是,对于一些具有大量并发用户的高度使用的应用程序,由于池大小、非活动超时和一些其他参数,可能会发生这种情况

示例场景

可能1000个连接中至少有200个用于某些大型表单中的一些数据输入,这些表单包含很多字段。因此,用户可能至少需要2或3分钟来完成数据输入。在这3分钟内,专用于有状态会话bean的连接处于非活动状态,可用于其他用户(其他会话bean)

因此,在指定的超时之后,容器将
钝化会话bean的当前状态(将它们序列化到特定的数据库、文件或内存),并释放到要使用的连接池的连接

当用户完成表单并单击submit按钮时,容器将从池中重新分配连接(如果可用),并
激活该会话bean的先前被钝化状态,以从钝化之前的确切状态继续业务

因此,如果您需要在该事件中执行一些手动操作,则
@PrePassivate
@postactive
对您非常有用

希望这会有帮助