I got this exception 'ORA-00923: FROM keyword not found where expected' resolved by replacing
<property name="validationQuery" value="SELECT 1"/> with <property name="validationQuery" value="SELECT 1 FROM DUAL"/> From: Jasmin Mehta <jasmin_me...@nexweb.org> To: user-java@ibatis.apache.org Date: 10/06/2009 02:07 PM Subject: ORA-00923: FROM keyword not found where expected From: Jasmin Mehta/VAB/HQ/NEXNET To: user-java@ibatis.apache.org Date: 10/06/2009 01:57 PM Subject: RE: Database Connection reset on Oracle 10g AS using Oracle 11g database 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] 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 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"> <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