论坛首页 入门讨论版 Spring

Spring+Hibernate+Struts+Proxool的构架,在使用ApplicationContext时的问题

浏览 2332 次
该帖已经被评为新手帖
作者 正文
时间:2006-12-12 关键字: Proxool spring
Hi,大家好:

我使用的框架如下:Spring+Hibernate+Struts+Proxool(数据连接池)

我的classpath下有以下文件:


proxool.xml
spring-context.xml
spring-context-blog.xml
spring-context-passport.xml

我是在WEB-INF/struts-config.xml里配置的Spring如下:


<plug-in
className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation"
value="/WEB-INF/classes/spring-context.xml,/WEB-INF/classes/spring-context-blog.xml,/WEB-INF/classes/spring-context-passport.xml" />
</plug-in>

proxool.xml文件如下:

<?xml version="1.0" encoding="utf-8"?>
<proxool-config>
<proxool>
<alias>oraclePool</alias>

<driver-url>jdbc:oracle:thin:@192.168.0.10:1521:xao2</driver-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>

<driver-properties>
<property name="user" value="xxx"/>
<property name="password" value="xxx"/>
</driver-properties>

<house-keeping-sleep-time>90000</house-keeping-sleep-time>
<proxool.simultaneous-build-throttle>100</proxool.simultaneous-build-throttle>
<prototype-count>10</prototype-count>
<maximum-connection-count>100</maximum-connection-count>
<minimum-connection-count>10</minimum-connection-count>
</proxool>
</proxool-config>

Spring-context.xml中关于SessionFactory的配置如下:


<bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" singleton="true">
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.proxool.xml">proxool.xml</prop>
<prop key="hibernate.proxool.pool_alias">oraclePool</prop>
<prop key="hibernate.cglib.use_reflection_optimizer">true</prop>
<prop key="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</prop>
</props>
</property>

<property name="mappingDirectoryLocations">
<list>
<value>classpath:/com/xxx/framework/hbms</value>
</list>
</property>
</bean>


问题是这样的:

使用Spring自动注入的Bean时没有问题,但是因为程序需要,我现要要用代码的方式从ApplicationContext中得到Bean,于是我写了一个类如下:


public class BlogAppContext {
private static BlogAppContext instance;

private ApplicationContext blogAppContext;

public synchronized static BlogAppContext getInstance() {
if (instance == null) {
instance = new BlogAppContext();
}
return instance;
}

private BlogAppContext() {
this.blogAppContext = new ClassPathXmlApplicationContext(new String[] {
"classpath:spring-context.xml","classpath:spring-context-blog.xml" });
}

public ApplicationContext getBlogAppContext() {
return blogAppContext;
}
}


这个java类我想是没有问题的,我在Action中用下面代码得到Bean:

BlogProfileDTO blogProfileDTO = (BlogProfileDTO) BlogAppContext
.getInstance().getBlogAppContext()
.getBean("blogProfileDTO");

但是产生了下面的错误,我在网上查了许多资料,但是还是没有解决问题,希望有丰富经验的朋友们给点思路,指点一下,谢谢了。


HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Error creating bean with name 'mySessionFactory' defined in class path resource [spring-context.xml]: Initialization of bean failed; nested exception is org.hibernate.HibernateException: Proxool Provider unable to load JAXP configurator file: proxool.xml
org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:523)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.tuckey.web.filters.urlrewrite.RewrittenUrl.doRewrite(RewrittenUrl.java:176)
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:728)

root cause

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mySessionFactory' defined in class path resource [spring-context.xml]: Initialization of bean failed; nested exception is org.hibernate.HibernateException: Proxool Provider unable to load JAXP configurator file: proxool.xml
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:403)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:233)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:145)
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:277)
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:313)
org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:87)
org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:72)
com.xao2.framework.util.BlogAppContext.<init>(BlogAppContext.java:20)
com.xao2.framework.util.BlogAppContext.getInstance(BlogAppContext.java:13)
com.xao2.framework.action.blog.ViewBlogProfileAction.execute(ViewBlogProfileAction.java:33)
org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:106)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.tuckey.web.filters.urlrewrite.RewrittenUrl.doRewrite(RewrittenUrl.java:176)
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:728)

note The full stack trace of the root cause is available in the Apache Tomcat/5.5.9 logs.
Apache Tomcat/5.5.9
   
时间:2006-12-12
好像是缺少jar包吧!
   
0 请登录后投票
时间:2006-12-12
daoger 写道
好像是缺少jar包吧!


啊?
缺少Jar包,缺少哪个呢?我加入了proxool最新的jar包。而且在spring配置文件让spring自动注册到service以及action中的bean都可以正常使用的:比如下面的配置片段:

<action path="/blog/addEntry" name="blogEntryForm"
input="/WEB-INF/blog/baidongli.ftl"
type="org.springframework.web.struts.DelegatingActionProxy"
scope="request" validate="true">
<forward name="write" path="/WEB-INF/blog/baidongli.ftl" />
<forward name="success"
path="/WEB-INF/blog/addentrysuccess.ftl" />
</action>
   
0 请登录后投票
时间:2006-12-12
Proxool什么版本?好像高版本的有冲突,降版本试试。
   
0 请登录后投票
时间:2006-12-12
laoer 写道
Proxool什么版本?好像高版本的有冲突,降版本试试。


版本号是:0.8.3

还要降吗?laoer你怎么没上MSN啊。
   
0 请登录后投票
时间:2007-03-01
好像是<prop key="hibernate.proxool.xml">proxool.xml</prop>的"proxool.xml"路径不对
   
0 请登录后投票
论坛首页 入门讨论版 Spring

跳转论坛:
JavaEye推荐