问题描述:
使用websphere 配置数据库连接池,在spring 中使用jndi的方式获取连接,程序中使用jdbcTemplate操作数据,添加或删除一条数据时,第一次添加成功,第二次添加报错,连续再添加依然报错,过几分钟,操作删除,有可能成功,有可能不成功。并且可以保证程序无问题,开发时是采用tomcat做服务器的,Spring中连接配置是采用直连的,就无任何问题。
代码:
applicationContext.xml
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean" lazy-init="default" autowire="default" dependency-check="default" >
<property name="jndiName">
<value>java:comp/env/jdbc/hxcc</value>
</property>
</bean>
<bean id="custInfoDAO" class="com.cupdata.cif.dao.CustInfoDAOImpl">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="searchHelper">
<ref bean="searchHelper" />
</property>
</bean>
CustInfoDAOImpl.java
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter(){
public int getBatchSize() {
return listCustInfo.size();
}
public void setValues(PreparedStatement ps, int i) throws SQLException {
ps.setString(1, listCustInfo.get(i).getKeytype());
ps.setString(2, listCustInfo.get(i).getCustid());
ps.setString(3, listCustInfo.get(i).getCusttype());
}
});
错误描述:
java.lang.NullPointerException
at oracle.jdbc.dbaccess.DBData.clearItem(DBData.java:431)
at oracle.jdbc.dbaccess.DBDataSetImpl.clearItem(DBDataSetImpl.java:3528)
at oracle.jdbc.driver.OraclePreparedStatement.clearParameters(OraclePreparedStatement.java:3401)
at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.resetStatement(WSJdbcConnection.java:2417)
at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.prepareStatement(WSJdbcConnection.java:2065)
at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.prepareStatement(WSJdbcConnection.java:2017)
at org.springframework.jdbc.core.JdbcTemplate$SimplePreparedStatementCreator.createPreparedStatement(JdbcTemplate.java:1114)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:470)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:505)
at org.springframework.jdbc.core.JdbcTemplate.batchUpdate(JdbcTemplate.java:769)
at com.cupdata.cif.dao.CustInfoDAOImpl.addCustMainInfo(CustInfoDAOImpl.java:84)
at com.cupdata.cif.manager.CustInfoManagerImpl.addCustMainInfo(CustInfoManagerImpl.java:41)
at com.cupdata.cif.manager.CustInfoManagerImpl$$FastClassByCGLIB$$a0ccfc8a.invoke(<generated>)
at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:698)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:148)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:643)
at com.cupdata.cif.manager.CustInfoManagerImpl$$EnhancerByCGLIB$$172567a9_2.addCustMainInfo(<generated>)
at com.cupdata.cif.action.CustInfoAction.addCustMainInfo(CustInfoAction.java:62)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:618)
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:280)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:216)
at org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:106)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at com.ibm.ws.cache.servlet.ServletWrapper.serviceProxied(ServletWrapper.java:282)
at com.ibm.ws.cache.servlet.CacheHook.handleFragment(CacheHook.java:459)
at com.ibm.ws.cache.servlet.CacheHook.handleServlet(CacheHook.java:265)
at com.ibm.ws.cache.servlet.ServletWrapper.service(ServletWrapper.java:262)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1075)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1016)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:145)
at net.ed.cc.common.struts.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:138)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:190)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:130)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:87)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:771)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:679)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:546)
at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:478)
at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:90)
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:744)
at com.ibm.ws.wswebcontainer.WebContainer.handleRequest(WebContainer.java:1455)
at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:115)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:458)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:387)
at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:102)
at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:136)
at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:195)
at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:743)
at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:873)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1473)
表面上看是空指针错误,但程序中根本就没有空指针
at com.cupdata.cif.dao.CustInfoDAOImpl.addCustMainInfo(CustInfoDAOImpl.java:84)
84行就是 jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter(){ ....
datasource不为空,jdbcTemplate也不为空
问题已解决:
方法一:将Websphere的数据源配置属性中的“sql的最高缓存数”改为0可解决问题
方法二:升级OJDBC.jar包,低版本中的 DBData.clearItem(int i) 方法存在bug
分享到:
相关推荐
WebSphere 数据库连接池配置 WebSphere 数据库连接池配置是指在 WebSphere 应用服务器中配置数据库连接池,以便更好地管理数据库连接。下面是 WebSphere 数据库连接池配置的详细过程: 一、数据库连接池配置...
WebSphere 数据库连接池配置 在 WebSphere 环境中,配置数据库连接池是非常重要的一步骤。数据库连接池是指在应用服务器中维护的一组数据库连接的集合,使应用程序能够能够快速地获取数据库连接,从而提高应用程序...
在WebSphere应用服务器中,数据库连接池的配置是实现高效数据库访问的关键步骤。连接池管理数据库连接,避免了频繁创建和关闭连接的开销,提高了系统的性能和响应速度。本文主要讨论了在WebSphere中配置Oracle、SQL ...
在 WebSphere 中,数据源需要指定一个唯一的名称(数据源名)和 JNDI(Java Naming and Directory Interface)名称,便于应用程序通过 JNDI 查找并获取连接。同时,选择或创建与数据源匹配的 J2C 认证别名,以存储...
### WebSphere连接池参数详解 在企业级应用服务器领域中,IBM WebSphere Application Server(简称WebSphere或WAS)是一款非常流行的解决方案。其中,连接池技术是提高数据库访问效率的关键技术之一。本文将深入...
WebSphere中流行数据库连接池的配置 本文介绍WebSphere下Oracle、SQL Server、Sybase、MySQL数据库连接池的配置方法,并给出相应调用连接池的示例。相对于Weblogic,WebSphere连接池的配置要稍微复杂一些,因为缺少...
### WebSphere中流行数据库连接池的配置详解 #### 一、引言 在现代企业级应用开发中,数据库连接池的合理配置对于提高系统的性能和稳定性至关重要。WebSphere作为IBM的一款高级应用程序服务器,支持多种数据库管理...
在 Weblogic 中,连接池配置是指将多个连接组合成一个池,以便于应用程序可以快速地获取连接。连接池配置可以提高应用程序的性能,减少与数据库的交互开销。 连接池配置包括两个主要部分:连接池和连接。连接池是指...
10. **Java代码获取连接**:在Java代码中,使用JNDI查找机制获取数据源,然后通过数据源获取数据库连接。示例代码如下: ```java Context ctx = null; ctx = new InitialContext(); DataSource ds = (DataSource...
在帆软报表FineReport中,若要实现与Websphere应用服务器的JNDI连接,需要进行一系列配置,以确保报表能够利用JNDI获取数据源,并最终在WEB环境中通过浏览器访问报表。 首先,需要了解JNDI(Java Naming and ...
WebSphere 配置数据库连接池 在 WebSphere 中配置数据库连接池是非常重要的一步,对于初学者来说,可能会遇到一些困难。因此,本文将介绍 WebSphere 下 Oracle、SQL Server、Sybase、MySQL 数据库连接池的配置方法...
【WebSphere数据库连接池配置详解】 在WebSphere应用服务器中,配置数据库连接池是确保高效、稳定的应用运行的关键步骤。本文将深入讲解如何在WebSphere环境中配置针对Oracle、SQL Server、Sybase和MySQL这四种流行...
总结,WebSphere 支持多种数据库连接池的配置,每种数据库的配置略有不同,但核心步骤都是选择正确的驱动、配置连接信息、设置 JNDI 名称以及调整连接池参数。理解这些配置对于管理员来说至关重要,因为它们直接影响...
WebSphere 中流行数据库连接池的配置(Oracle、SQL Server、Sybase、MySQL) 在 WebSphere 中配置数据库连接池是非常重要的,因为它能够提高应用程序的性能和可靠性。本文将详细介绍如何在 WebSphere 中配置 Oracle...
在IBM WebSphere Application Server (WAS) 中配置JNDI(Java Naming and Directory Interface)以连接到DB2数据库,涉及到的关键技术主要包括JNDI、DB2数据库连接池以及相关的驱动jar包。以下将详细讲解这些知识点...
### WebSphere 下 Oracle 连接池的配置详解 #### 一、概述 在WebSphere环境下配置Oracle连接池是一项重要的任务,它能够显著提高应用程序的性能和响应速度。连接池技术可以有效管理数据库连接资源,避免频繁创建和...
配置完成后,应用程序可以通过编程方式(如Spring框架中的JdbcTemplate)或JNDI查找来获取并使用这些数据源,实现与数据库的连接。 总结,配置Data Source是J2EE应用程序部署的关键步骤,尤其是在Websphere和Tomcat...