Use "select 1 from dual" instead.

On Tue, Oct 6, 2009 at 10:57 AM, Jasmin Mehta <jasmin_me...@nexweb.org>wrote:

> I have changed my spring.xml accordingly:
>
>  <bean id="dataSource"
>           class="org.apache.commons.dbcp.BasicDataSource"
>            destroy-method="close">
>         <property name="driverClassName" value="${jdbc.driverClassName}"/>
>         <property name="url" value="${jdbc.url}"/>
>         <property name="username" value="${jdbc.username}"/>
>         <property name="password" value="${jdbc.password}"/>
>         <property name="validationQuery" value="SELECT 1"/>
>         <property name="testWhileIdle" value="true"/>
>         <property name="timeBetweenEvictionRunsMillis" value="300000"/>
>         <property name="numTestsPerEvictionRun" value="6"/>
>         <property name="minEvictableIdleTimeMillis" value="1800000"/>
>     </bean>
>
> But now I am getting runtime exception:
>
> [06 Oct 2009 11:32:13] DEBUG [UserSqlMapDAO] Opened SqlMapSession
> [com.ibatis.sqlmap.engine.impl.sqlmapsessioni...@282f55] for iBATIS
> operation
> [06 Oct 2009 11:32:13] DEBUG [DataSourceUtils] Fetching JDBC Connection
> from DataSource
> [06 Oct 2009 11:32:13] ERROR [WelcomeAction]
> org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get
> JDBC Connection; nested exception is
> org.apache.commons.dbcp.SQLNestedException: Cannot create
> PoolableConnectionFactory (*ORA-00923: FROM keyword not found where
> expected*
> )
>         at
> org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:204)
>         at
> org.springframework.orm.ibatis.SqlMapClientTemplate.queryForObject(SqlMapClientTemplate.java:271)
>         at
> org.nexweb.qol.gcc.ibatis.dao.sqlmaps.UserSqlMapDAO.getUserByUserNameAndRealmName(UserSqlMapDAO.java:26)
>         at
> org.nexweb.qol.gcc.ibatis.services.UserService.getUserByUserNameAndRealmName(UserService.java:30)
>         at
> org.nexweb.qol.gcc.actions.WelcomeAction.execute(WelcomeAction.java:76)
>         at
> org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58)
>         at
> org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67)
>         at
> org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
>         at
> org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
>         at
> org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
>         at
> org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
>         at
> org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
>         at
> org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
>         at
> org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
>         at
> com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:713)
>         at
> com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:370)
>         at
> com.evermind.server.http.ServletRequestDispatcher.unprivileged_forward(ServletRequestDispatcher.java:259)
>         at
> com.evermind.server.http.ServletRequestDispatcher.access$100(ServletRequestDispatcher.java:51)
>         at
> com.evermind.server.http.ServletRequestDispatcher$2.oc4jRun(ServletRequestDispatcher.java:193)
>         at
> oracle.oc4j.security.OC4JSecurity.doPrivileged(OC4JSecurity.java:283)
>         at
> com.evermind.server.http.ServletRequestDispatcher.forward(ServletRequestDispatcher.java:198)
>         at
> com.evermind.server.http.EvermindPageContext.forward(EvermindPageContext.java:392)
>         at _jsp._forward._jspService(_forward.java:48)
>         at
> com.orionserver.http.OrionHttpJspPage.service(OrionHttpJspPage.java:59)
>         at
> oracle.jsp.runtimev2.JspPageTable.compileAndServe(JspPageTable.java:724)
>         at oracle.jsp.runtimev2.JspPageTable.service(JspPageTable.java:414)
>         at
> oracle.jsp.runtimev2.JspServlet.internalService(JspServlet.java:594)
>         at oracle.jsp.runtimev2.JspServlet.service(JspServlet.java:518)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
>         at
> com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:713)
>         at
> com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:370)
>         at
> com.evermind.server.http.HttpRequestHandler.doProcessRequest(HttpRequestHandler.java:871)
>         at
> com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:453)
>         at
> com.evermind.server.http.HttpRequestHandler.serveOneRequest(HttpRequestHandler.java:221)
>         at
> com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:122)
>         at
> com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:111)
>         at
> oracle.oc4j.network.ServerSocketReadHandler$SafeRunnable.run(ServerSocketReadHandler.java:260)
>         at
> com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:303)
>         at java.lang.Thread.run(Thread.java:595)
> Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot create
> PoolableConnectionFactory (ORA-00923: FROM keyword not found where expected
> )
>         at
> org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1225)
>         at
> org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880)
>         at
> org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:113)
>         at
> org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy.getConnection(TransactionAwareDataSourceProxy.java:109)
>         at
> org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:190)
>         ... 40 more
> Caused by: java.sql.SQLException: ORA-00923: FROM keyword not found where
> expected
>
>         at
> oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:74)
>         at
> oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:131)
>         at
> oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:204)
>         at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:455)
>         at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:413)
>         at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:1034)
>         at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:183)
>         at
> oracle.jdbc.driver.T4CStatement.executeForDescribe(T4CStatement.java:780)
>         at
> oracle.jdbc.driver.T4CStatement.executeMaybeDescribe(T4CStatement.java:855)
>         at
> oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1186)
>         at
> oracle.jdbc.driver.OracleStatement.executeQuery(OracleStatement.java:1377)
>         at
> oracle.jdbc.driver.OracleStatementWrapper.executeQuery(OracleStatementWrapper.java:387)
>         at
> org.apache.commons.dbcp.DelegatingStatement.executeQuery(DelegatingStatement.java:208)
>         at
> org.apache.commons.dbcp.PoolableConnectionFactory.validateConnection(PoolableConnectionFactory.java:332)
>         at
> org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1249)
>         at
> org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1221)
>         ... 44 more
>
>
>
>
>
>  From: "meindert" <meind...@eduflex.com> To: <user-java@ibatis.apache.org>
> Date: 10/06/2009 10:23 AM Subject: RE: Database Connection reset on Oracle
> 10g AS using Oracle 11g database
> ------------------------------
>
>
>
>
> I’m using;
>
> <bean id=*"propertyConfigurer"*
>
>             class=*
> "org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"*>
>
>             <property name=*"location"* value=*"WEB-INF/config.properties"
> * />
>
>       </bean>
>
>       <bean id=*"dataSource"* class=*
> "org.apache.commons.dbcp.BasicDataSource"* destroy-method=*"close"*>
>
>             <property name=*"driverClassName"* value=*"${database_driver}"
> * />
>
>             <property name=*"url"* value=*"${database_url}"* />
>
>             <property name=*"username"* value=*"${database_user}"* />
>
>             <property name=*"password"* value=*"${database_password}"* />
>
>             <property name=*"defaultAutoCommit"* value=*"true"*/>
>
>             <property name=*"defaultTransactionIsolation"* value=*"2"*/>
>
>             <property name=*"maxActive"* value=*"10"*/>
>
>             <property name=*"removeAbandoned"* value=*"true"*/>
>
>             <property name=*"removeAbandonedTimeout"* value=*"30"*/>
>
>             <property name=*"logAbandoned"* value=*"false"*/>
>
>             <property name=*"validationQuery"* value=*"select 1"*/>
>
>       </bean>
>
> Hope it helps
>
>
>
> *From:* Jasmin Mehta [mailto:jasmin_me...@nexweb.org<jasmin_me...@nexweb.org>]
>
> *Sent:* 06 October 2009 04:05 PM
> *To:* user-java@ibatis.apache.org
> *Cc:* lmead...@apache.org
> *Subject:* Database Connection reset on Oracle 10g AS using Oracle 11g
> database
>
>
>
> Larry,
>
> I saw an answer for one of the thread
>
> *http://www.mail-archive.com/user-java@ibatis.apache.org/msg03522.html*<http://www.mail-archive.com/user-java@ibatis.apache.org/msg03522.html>
>
> I have something similar, How do I modify spring.xml file to use
> BasicDataSource feature to ping the query?
>
>
> I have J2EE application running on OC4J application server. Where the
> database connection is dropping / resetting after some idle time. The idle
> time varies from 20 mins to 90 mins. The persistence layer is created using
> Spring and iBatis with Struts as controller.
>
> I am not able to find that why the code / oracle database is trying to
> close the connection before it makes new one.
>
> Here is the exception log:
> [05 Oct 2009 11:55:38] DEBUG [SQLErrorCodesFactory] Looking up default
> SQLErrorCodes for DataSource
> [org.springframework.jdbc.datasource.transactionawaredatasourcepr...@13478c8
> ]
> [05 Oct 2009 11:55:38] DEBUG [DataSourceUtils] Fetching JDBC Connection
> from DataSource
> [05 Oct 2009 11:55:38] DEBUG [DataSourceUtils] Fetching JDBC Connection
> from DataSource
> [05 Oct 2009 11:55:38] DEBUG [DataSourceUtils] Returning JDBC Connection to
> DataSource
> [05 Oct 2009 11:55:38] DEBUG [DataSourceUtils] Returning JDBC Connection to
> DataSource
> [05 Oct 2009 11:55:38] DEBUG [SQLErrorCodesFactory] Database product name
> cached for DataSource
> [org.springframework.jdbc.datasource.transactionawaredatasourcepr...@13478c8]:
> name is 'Oracle'
> [05 Oct 2009 11:55:38] DEBUG [SQLErrorCodesFactory] SQL error codes for
> 'Oracle' found
> [05 Oct 2009 11:55:38] DEBUG [SQLErrorCodeSQLExceptionTranslator] *Translating
> SQLException with SQL state '08006', error code '17002', message [  *
> --- The error occurred in org/nexweb/qol/gcc/ibatis/dao/xml/User.xml.
> --- The error occurred while applying a parameter map.
> --- Check the getUserByUserNameAndRealmName-InlineParameterMap.
> --- Check the statement (query failed).
> --- Cause: java.sql.SQLException: *Io exception: Connection reset by peer:
> socket write error]*; SQL was [] for task [SqlMapClient operation]
> [05 Oct 2009 11:55:38] DEBUG [DataSourceUtils] Returning JDBC Connection to
> DataSource
> [05 Oct 2009 11:55:38] DEBUG [UserSqlMapDAO] *Could not close JDBC
> Connection*
> *java.sql.SQLException: Already closed.*
>       at
> org.apache.commons.dbcp.PoolableConnection.close(PoolableConnection.java:84)
>       at
> org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.close(PoolingDataSource.java:181)
>       at
> org.springframework.jdbc.datasource.DataSourceUtils.doReleaseConnection(DataSourceUtils.java:313)
>       at
> org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy$TransactionAwareInvocationHandler.invoke(TransactionAwareDataSourceProxy.java:166)
>       at $Proxy0.close(Unknown Source)
>       at
> org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:218)
>       at
> org.springframework.orm.ibatis.SqlMapClientTemplate.queryForObject(SqlMapClientTemplate.java:271)
>       at
> org.nexweb.qol.gcc.ibatis.dao.sqlmaps.UserSqlMapDAO.getUserByUserNameAndRealmName(UserSqlMapDAO.java:26)
>       at
> org.nexweb.qol.gcc.ibatis.services.UserService.getUserByUserNameAndRealmName(UserService.java:30)
>       at
> org.nexweb.qol.gcc.actions.WelcomeAction.execute(WelcomeAction.java:71)
>       at
> org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58)
>       at
> org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67)
>       at
> org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
>       at
> org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
>       at
> org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
>       at
> org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
>       at
> org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
>       at
> org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
>       at
> org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
>       at javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
>       at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
>       at
> com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:713)
>       at
> com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:370)
>       at
> com.evermind.server.http.ServletRequestDispatcher.unprivileged_forward(ServletRequestDispatcher.java:259)
>       at
> com.evermind.server.http.ServletRequestDispatcher.access$100(ServletRequestDispatcher.java:51)
>       at
> com.evermind.server.http.ServletRequestDispatcher$2.oc4jRun(ServletRequestDispatcher.java:193)
>       at
> oracle.oc4j.security.OC4JSecurity.doPrivileged(OC4JSecurity.java:283)
>       at
> com.evermind.server.http.ServletRequestDispatcher.forward(ServletRequestDispatcher.java:198)
>       at
> com.evermind.server.http.EvermindPageContext.forward(EvermindPageContext.java:392)
>       at _jsp._forward._jspService(_forward.java:48)
>       at
> com.orionserver.http.OrionHttpJspPage.service(OrionHttpJspPage.java:59)
>       at oracle.jsp.runtimev2.JspPageTable.service(JspPageTable.java:462)
>       at
> oracle.jsp.runtimev2.JspServlet.internalService(JspServlet.java:594)
>       at oracle.jsp.runtimev2.JspServlet.service(JspServlet.java:518)
>       at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
>       at
> com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:713)
>       at
> com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:370)
>       at
> com.evermind.server.http.HttpRequestHandler.doProcessRequest(HttpRequestHandler.java:871)
>       at
> com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:453)
>       at
> com.evermind.server.http.HttpRequestHandler.serveOneRequest(HttpRequestHandler.java:221)
>       at
> com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:122)
>       at
> com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:111)
>       at
> oracle.oc4j.network.ServerSocketReadHandler$SafeRunnable.run(ServerSocketReadHandler.java:260)
>       at
> com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:303)
>       at java.lang.Thread.run(Thread.java:595)
>
> Here is the Spring.xml code related to datasource :
>
>
>
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
>                                    "*
> http://www.springframework.org/dtd/spring-beans-2.0.dtd*<http://www.springframework.org/dtd/spring-beans-2.0.dtd>
> ">
> <beans>
>    <bean id="propertyConfigurer"
>
>  
> class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
>        <property name="location" value="classpath:jdbc.properties"/>
>    </bean>
>
>    <bean id="dataSource"
>          class=" org.apache.commons.dbcp.BasicDataSource">
>        <property name="driverClassName" value="${jdbc.driverClassName}"/>
>        <property name="url" value="${jdbc.url}"/>
>        <property name="username" value="${jdbc.username}"/>
>        <property name="password" value="${jdbc.password}"/>
>    </bean>
>
>    <bean id="sqlMapClient"
>          class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
>        <property name="configLocation">
>
>  <value>classpath:org/nexweb/qol/gcc/ibatis/config/SqlMapConfig.xml</value>
>        </property>
>
>        <property name="transactionConfigProperties">
>          <props>
>                <prop key="autoCommitAllowed">true</prop>
>          </props>
>        </property>
>
>       <property name="useTransactionAwareDataSource">
>            <value>true</value>
>       </property>
>        <property name="transactionConfigClass">
>
>  
> <value>com.ibatis.sqlmap.engine.transaction.jdbc.JdbcTransactionConfig</value>
>        </property>
>        <property name="dataSource" ref="dataSource"/>
>    </bean>
>
>
>
>
>
> ******************************************************************************
> This email and any files transmitted with it are intended solely for
> the use of the individual or agency to whom they are addressed.
> If you have received this email in error please notify the Navy
> Exchange Service Command e-mail administrator. This footnote
> also confirms that this email message has been scanned for the
> presence of computer viruses.
>
> Thank You!
> *
> ******************************************************************************
> *
>
> No virus found in this incoming message.
> Checked by AVG - www.avg.com
> Version: 8.5.420 / Virus Database: 270.14.3/2414 - Release Date: 10/05/09
> 18:23:00
>

Reply via email to