`

关于不能初始化ACTION的错误以及排除的办法

阅读更多
  最近有测试发邮件说测试WEB前端的时候,有错误报出,我登陆服务器一看,错误代码如下

Error Message
Unable to instantiate Action, counterActionBean, defined for 'counterAction' in namespace '/stat'Error creating bean with name 'counterActionBean' defined in ServletContext resource [/WEB-INF/counter-context.xml]: 
Cannot resolve reference to bean 'counterChartService' while setting bean property 'ccs'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'counterChartService' defined in ServletContext resource [/WEB-INF/counter-context.xml]: 
Cannot resolve reference to bean 'counterDAO' while setting bean property 'counterDAO'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'counterDAO' defined in ServletContext resource [/WEB-INF/counter-context.xml]: 
Cannot resolve reference to bean 'counterDS' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'counterDS' defined in ServletContext resource [/WEB-INF/counter-context.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are: PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'initialPoolSize' threw exception; nested exception is java.sql.SQLException: Unable to start the Universal Connection Pool: oracle.ucp.UniversalConnectionPoolException: Error during pool creation in Universal Connection Pool Manager MBean


  里面的错误信息居然是在加载counter-context.xml时候的错误,并点出是 initialPoolSize 的错误,counter-context.xml文件如下
	<bean id="counterDS" class="oracle.ucp.jdbc.PoolDataSourceFactory" factory-method="getPoolDataSource" lazy-init="true">
		<property name="URL" value="${nbg.db.url}" />
		<property name="user" value="${nbg.db.user}" />
		<property name="password" value="${nbg.db.password}" />
		<property name="connectionFactoryClassName" value="oracle.jdbc.pool.OracleDataSource"/>
		<property name="connectionPoolName" value="COUNTER_POOL" />
		<property name="minPoolSize" value="5" />
		<property name="maxPoolSize" value="10" />
		<property name="initialPoolSize" value="5" />
		<property name="inactiveConnectionTimeout" value="120" />
		<property name="validateConnectionOnBorrow" value="true" />
		<property name="maxStatements" value="10" />
	</bean>

	<bean name="counterDAO" class="com.warlock.stat.cdrgui.dao.CounterDAO">
		<property name="dataSource" ref="counterDS" />
	</bean>

	<bean name="counterChartService" class="com.warlock.stat.cdrgui.service.CounterChartService">
		<property name="counterDAO" ref="counterDAO" />
	</bean>
		
	<bean name="counterActionBean" class="com.warlock.stat.cdrgui.web.action.CounterAction" scope="request">
		<property name="ccs" ref="counterChartService" />
	</bean>

我先看了官方的文档说的是initialPoolSize 默认的是0,范围在0到integer.max_size之间,然后用sqlplus连接下oracle数据库,发现也没有问题,最后我将它这个配置注释掉,初始化不分配任何的poolsize 问题得到了解决; 原因是:服务器上的oracle不能分配这么多的连接,从而造成了错误的产生,这个问题应该是环境的问题,并不是spring的问题。


注:后来发现,果然是环境的问题,主要是用root登陆以后,不能使用sqlplus连接数据库,SQLPLUS不在root权限下面,使用env没有找到,于是修改了/etc/profile然后export了SQLPLUS,同时将ojdbc6.jar加入了/opt/nsn/nstat/lib/下面,上面counter-context.xml的initialPoolSize再加入就没有问题了, 教训是惨痛的。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics