我见过 @PrePassivate
和 @PostActivate
每个 EJB 教程中都有注释,但我看不出它们有什么用处。我需要这些的场景是什么?
最佳答案
大多数时候您使用 有状态 Session Beans(实际上并不推荐,除了一些很少需要的情况)这对于容器在某个时间点管理和重用一些非事件连接很有用,以帮助保持从数据库获取的连接数一些最佳计数。
例如您的 DBMS 可以管理 1000 个连接。因此,您可以在容器(应用程序服务器,例如 GlassFish、Weblogic 等)中创建一个大小为 1000 的连接池。
然后当您的应用程序达到 1000 个 session 时,例如,如果另一个用户想要进入您的应用程序,他/她应该等到 1000 个连接中的一个被释放。
在这种情况下,Passivate/Activate
的机制可能有用。很明显 Passivate/Activate
在小型应用程序中不会发生。但是对于一些具有大量并发用户的高度使用的应用程序,由于池大小、非事件超时和一些其他参数,可能会发生这种情况。
示例 场景 :
也许在 1000 个连接中至少有 200 个被用于某些具有很多字段的大型表单中的某些数据条目。因此,用户可能至少需要 2 或 3 分钟才能完成数据输入。在这 3 分钟内,专用于有状态 session bean 的连接处于非事件状态,可用于其他用户(其他 session bean)。
因此,在指定的超时时间后,容器将 passivate
session bean 的当前状态(将它们序列化为特定的数据库或文件或内存)并释放其与要使用的连接池的连接。
当用户完成表单并单击提交按钮时,容器将重新分配池中的连接(如果可用)和 activate
该 session bean 的先前钝化状态以从钝化之前的确切状态继续业务。
所以@PrePassivate
和 @PostActivate
如果您需要在这些事件中进行一些手动操作,这对您很有用。
希望这会有所帮助。
关于jakarta-ee - @PrePassivate 和 @PostActivate 注释何时有用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37222847/