在我的另一篇文章(
struts+spring+hibernate+proxool配置)中已经提到有关使用SSH与proxool数据库连接池配置,当时使用的是struts1.2,并且proxool是使用单独的XML文件来实现,下面使用struts2来实现相关配置.
似乎使用struts2与使用struts1.x没什么区别,只不过是在struts进行整合时在struts.xml中将spring插件增加进去,就可以了,但有个问题,那就struts2与spring进行整合时,web.xml中的spring加载必须使listener来加载,如果使用ContextLoderServlet,则会出空指向异常,报的是Struts2的objectFactory中的某处,因为绝大多数WEB容器的加载顺序是:Listener,Filter,Servlet,所以将会现struts2在spring前加载,它就找不到spring的管理容器,产生异常,解决办法使用ContextLoderListener来加载spring,好,这样一来又有问题了,spring出异常了,它又会找不到我们在applicationContext.xml所提供的数据源的别名,即:proxool.DbPool,无法管理数据库连接池了,看来struts2与proxool是鱼与熊掌,二者不可兼得,貌似我们现在没办法了,怎么办?
方法一:不用proxool(废话,不用它还写这篇文章干嘛);
方法二:将proxool的加载由servlet更改成使用listener加载,但proxool官方并没有提供给我们可用于listener加载的类,我们可以自己写一个listener来实现.
首先我们要去proxool官方下载它的源码,地址:
http://nchc.dl.sourceforge.net/sourceforge/proxool/proxool-0.9.1-source.zip
此处需要注意,我没找到0.9RC3的源码,这是最新的源码0.9.1的
下载后解压打开src\java\org\logicalcobwebs\proxool\configuration\ServletConfigurator.java,也就是加载proxool的servlet,复制init()方法中的代码,放入我们自己写的listener的contextInitialized方法中去,导入相应的包,OK,一切搞定,重新启动服务器发现struts2与proxool都被正确加载了.
下面我的代码
package cn.wt.listener;
import java.io.File;
import java.util.Enumeration;
import java.util.Properties;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.logicalcobwebs.proxool.ProxoolException;
import org.logicalcobwebs.proxool.configuration.JAXPConfigurator;
import org.logicalcobwebs.proxool.configuration.PropertyConfigurator;
/**
* @author wangtao
*/
public class ProxoolListener implements ServletContextListener
{
private static final Log LOG = LogFactory.getLog(ProxoolListener.class);
private static final String XML_FILE_PROPERTY = "xmlFile";
private static final String PROPERTY_FILE_PROPERTY = "propertyFile";
private static final String AUTO_SHUTDOWN_PROPERTY = "autoShutdown";
@SuppressWarnings("unused")
private boolean autoShutdown = true;
public void contextDestroyed(ServletContextEvent arg0)
{
System.out.println("destroy database pool....");
}
public void contextInitialized(ServletContextEvent contextEvent)
{
ServletContext context = contextEvent.getServletContext(); //对应servlet的init方法中ServletConfig.getServletContext()
String appDir = contextEvent.getServletContext().getRealPath("/");
Properties properties = new Properties();
Enumeration names = context.getInitParameterNames();
while (names.hasMoreElements()) {
String name = (String) names.nextElement();
String value = context.getInitParameter(name);
if (name.equals(XML_FILE_PROPERTY)) {
try {
File file = new File(value);
if (file.isAbsolute()) {
JAXPConfigurator.configure(value, false);
} else {
JAXPConfigurator.configure(appDir + File.separator + value, false);
}
} catch (ProxoolException e) {
LOG.error("Problem configuring " + value, e);
}
} else if (name.equals(PROPERTY_FILE_PROPERTY)) {
try {
File file = new File(value);
if (file.isAbsolute()) {
PropertyConfigurator.configure(value);
} else {
PropertyConfigurator.configure(appDir + File.separator + value);
}
} catch (ProxoolException e) {
LOG.error("Problem configuring " + value, e);
}
} else if (name.equals(AUTO_SHUTDOWN_PROPERTY)) {
autoShutdown = Boolean.valueOf(value).booleanValue();
} else if (name.startsWith("jdbc")) { //此处以前是PropertyConfigurator.PREFIX改为jdbc
properties.setProperty(name, value);
}
}
if (properties.size() > 0) {
try {
PropertyConfigurator.configure(properties);
} catch (ProxoolException e) {
LOG.error("Problem configuring using init properties", e);
}
}
}
}
最后想说的是,我是将这个listener放在了spring的listener前面,不知道放在它后面是否会影响加载,没试过.
一句感叹:开源真好!
分享到:
相关推荐
在Java Web开发中,Spring、Proxool、Hibernate、Struts2和AOP(面向切面编程)是常用的框架和技术,它们各自承担着不同的职责,组合使用可以构建出高效、可维护的Web应用程序。本文将详细介绍这些技术的整合过程...
在IT行业中,Spring、Proxool、Hibernate、Struts2和AOP是五个非常关键的框架和概念,它们在企业级Java应用开发中扮演着重要角色。这些技术的整合使用可以构建出高效、灵活且可维护的Web应用程序。现在我们逐一深入...
本项目采用Struts2、Hibernate3集成JPA2、Spring3和Proxool连接池的集成,对整体SSH框架的数据访问及网站效率都有较大的提升,本项目即时部署即可使用,既满足新手的学习,也对有深层研究的朋友有帮助。
SSH(Struts2+Spring3+Hibernate3)是一种常见的Java Web开发框架组合,它整合了MVC框架Struts2、依赖注入容器Spring以及持久层框架Hibernate。这些框架的结合为开发者提供了高效、灵活且可扩展的后端架构。在本项目...
在Java Web开发中,Struts2、Spring和Hibernate是经典的MVC框架组合,它们共同构建了一个强大且灵活的后端架构。在这个组合中,数据库连接管理是一个关键环节,而Proxool作为一款轻量级的连接池库,常被用来优化...
Struts2.2.3、Spring2.5.6、Hibernate3.2和Proxool0.9.1是四个重要的Java技术组件,它们在Web应用程序开发中扮演着关键角色。这个压缩包文件包含了这些技术的集成示例,旨在帮助开发者理解和实践如何将它们有效地...
1、proxool官网,下载最新的proxool-0.9.1.jar ...4、整合Struts2、Spring和proxool,配置Web服务启动配置文件[web.xml] 5、整合Spring和proxool,配置应用上下文配置文件[applicationContext.xml]
SSH2全注解整合是Java Web开发中一种高效且现代化的方法,它将Spring 2.5、Struts 2.1和Hibernate 3.3这三个流行框架的优势结合起来,以简化开发流程并提高代码的可维护性。在这个项目中,开发者通过使用注解,避免...
在构建企业级Java应用时,整合Struts2、Hibernate3.2和Spring2.5是一个常见的选择,因为这三个框架分别负责MVC模式的展现层、持久层管理和业务层的依赖注入。在这个过程中,使用Proxool作为数据库连接池能够有效地...
**Struts框架**:Struts是基于MVC设计模式的Web应用框架,它将业务逻辑、表示逻辑和数据访问逻辑分离,使得开发人员可以独立地进行开发。Struts处理HTTP请求,并通过Action和ActionForm对象与业务逻辑交互,最后将...
本项目采用当前主流的MVC和IOC框架spring 3、优秀的ORM框架hibernate和超级厉害的proxool数据库连接池。这个工程demo,是本人在企业应用中的项目缩影,绝对实用于企业的应用。 适合朋友: 1.一直用单独的servlet和...
### Struts2、Hibernate3.2与Spring2.5集成步骤详解 在Java Web开发领域,Struts2、Hibernate和Spring三者结合是常见的企业级应用架构方案之一。本篇文章将详细阐述如何在MyEclipse6.5环境下,通过Tomcat6.0服务器...
Struts2+Spring3+HibernateBBS源码lib2.rar是一个经典的Java Web开发示例,它结合了三个流行的技术框架:Struts2、Spring3和Hibernate,用于构建一个基于论坛的Web应用程序。这个压缩包包含了运行该应用所需的核心库...
标题中的“spring3 struts2 JPA”是一个经典的Java企业级开发技术栈组合,它涵盖了Spring框架的第三个主要版本、Struts2行动框架以及Java Persistence API(JPA)的使用。这个组合通常用于构建Web应用程序,提供了一...
### Struts2、Hibernate与Spring集成详解 #### 一、集成环境搭建 在现代软件开发过程中,特别是Java Web应用开发领域,Struts2、Hibernate与Spring三者的集成使用非常常见。这种集成不仅可以提高应用程序的可维护...
Struts2、Spring和Hibernate是三个非常流行的Java开发框架,它们各自在Web应用程序的不同层面上发挥作用。Struts2主要用于控制层,提供MVC(模型-视图-控制器)架构;Spring是一个全面的后端框架,提供了依赖注入、...
Struts2、Hibernate3.2和Spring2.5是经典的Java Web开发框架组合,它们的集成可以帮助开发者构建高效、模块化的应用程序。以下是这些组件的简要介绍和集成步骤: **Struts2** 是一个基于MVC(Model-View-Controller...
9. **WebWork**: WebWork是另一个流行的Java Web框架,后来演变为Struts 2。它引入了Action和Interceptor的概念,增强了动作的灵活性,并提供了强大的数据绑定和异常处理机制。 源码分析这些框架和工具可以让你深入...
Struts2与Spring的整合则涉及Action类的定义和Spring的DispatcherServlet配置,以及Struts2的struts.xml文件配置,以便Struts2能够识别并调用Spring管理的Action类。 这个集成方案的实现涉及到了多层架构的设计,...