只是查看Web上连接池的示例,它们都基于每个servlet实现连接池。因此每个servlet都有自己的数据库连接池。我的问题是,为什么这比全局数据库连接池更可取?由于全局池似乎比每个servlet池更有效..
另外,因为我正在考虑实现这样一个池。有没有办法在servlet之前初始化一个类(我正在使用jetty btw)?我刚刚开始进行servlet开发,但这对于其他类似于配置的东西似乎也很有用。否则我只是会使用某种类似单身的模式..
答案 0 :(得分:7)
1)我要说标准做法是在上下文描述符中将连接池设置为JNDI资源,这样不就是每个servlet要做的事情。
2)您需要实现并声明ServletContextListener。
答案 1 :(得分:3)
说实话,我真的不知道你在说什么。也许你可以提供你看过的样品。
对我而言,“真正的”连接池应该完全Servlet
不可知,并且在每个Servlet的基础上使用连接池是一个更多的使用细节(和一个坏的IMO)。只需查看DBCP或c3p0,即可获得可在“容器外”上下文中使用的连接池的良好示例。
另请注意,大多数(如果不是全部)容器实际上提供了自己的连接池实现(有时基于前面提到的示例),我认为没有任何充分的理由不使用它们。使用它们的标准方法是使用JDNI命名服务注册DataSource
。今天,DataSouce
大部分时间是通过IoC注入的。在过去,经常使用Service Locator模式。
如果是Jetty,请查看文档中的DataSource Examples。
答案 2 :(得分:2)
我的问题是,为什么这类似于全局数据库连接池?
不是!所有servlet都应该在池中共享连接!
另外,因为我正在考虑实现这样一个池。
已经有方法(Spring IoC)注入容器管理的池连接。
。有没有办法在servlet之前初始化一个类(我正在使用jetty btw)?
IoC容器可以引导每个资源和servlet!
您可以通过将Spring dispatcherServlet和包含映射和servlet的xml注册为bean定义来弹出连接servlet!
如果您只想注入连接并保留servlet的其余部分,请使用以下定义:
<bean name="simpleServletHandlerAdapter"
class="org.springframework.web.servlet.handler.SimpleServletHandlerAdapter" />
<bean name="simpleServletPostProcessor"
class="org.springframework.web.servlet.handler.SimpleServletPostProcessor" />
答案 3 :(得分:2)
Web容器使用JNDI提供ConnectionFactory(或类似)非常频繁,JNDI使用连接池,但配置它的方式不是标准化的。
请参阅http://docs.codehaus.org/display/JETTY/DataSource+Examples了解如何使用Jetty。
答案 4 :(得分:0)
每个servlet拥有一个连接池的一个优点是,如果其中一个servlet行为不当并使用其所有可用连接,那么其他servlet仍然会在其单独的池中提供连接。这样可以提高应用程序的稳定性。