在JavaEE中保存conexion';s Session.vs。连接池

在JavaEE中保存conexion';s Session.vs。连接池,java,jakarta-ee,database-connection,connection-pooling,Java,Jakarta Ee,Database Connection,Connection Pooling,我知道JavaEE的会话对象可以存储复杂的对象,比如与数据库的连接 我正在考虑如何为一个编程实践实现一个特定的应用程序,这个实践是用JavaEE制作的。我的第一个选择是使用连接池,这在JavaEE中非常容易 出于好奇,我想知道,为了正确地证明这一决定,在客户端启动会话并将其存储在数据库中的任何时候创建与数据库的连接,与使用连接池相比,有哪些优点和缺点 非常感谢。使用连接池可以最大限度地提高连接的可用性。这意味着更少的连接=更少的内存=更少的套接字等。池比在会话中保存更好的原因是如果有人意外退出会

我知道JavaEE的
会话
对象可以存储复杂的对象,比如与数据库的连接

我正在考虑如何为一个编程实践实现一个特定的应用程序,这个实践是用JavaEE制作的。我的第一个选择是使用连接池,这在JavaEE中非常容易

出于好奇,我想知道,为了正确地证明这一决定,在客户端启动会话并将其存储在数据库中的任何时候创建与数据库的连接,与使用连接池相比,有哪些优点和缺点


非常感谢。

使用连接池可以最大限度地提高连接的可用性。这意味着更少的连接=更少的内存=更少的套接字等。池比在会话中保存更好的原因是如果有人意外退出会发生什么?如果会话中存在连接,则可能会使该连接保持长时间(可能是无限期)活动

资源池将优化资源(您的数据库连接)的处理,使您的系统能够处理它。即使如果有很多打开的连接,最终也可能会耗尽资源

如果将数据库连接存储在会话上下文中,则更可能发生这种情况。Web应用程序不需要一直连接到数据库,这种连接可以在新操作开始时建立,并在结束时关闭。使用资源池,当您不再需要连接时,可以将连接返回到资源池,这样新用户(web范例中的会话)就可以使用您已经发布的资源,而不是创建新的资源

池还将处理一些资源长期闲置(在特定时间内没有人使用它们)的场景,然后它将释放这些资源

在会话中存储数据库连接时,您永远不会释放资源,而是保留对它的永久引用,该引用将持续用户会话的时间。您可能不会在短时间内遇到任何问题,特别是如果同时连接的用户确实很少的话。但在现实世界的应用程序中,您肯定会找到它们

因此,在会话上下文中存储数据库连接被认为是一种不良做法

编辑:我忘了在会话中只存储
可序列化的
对象,因此,如果应用程序服务器决定钝化会话,则可以在应用程序服务器决定重新激活会话时将其持久化和还原。数据库连接不是可序列化的资源