Hello: I have recently posted the message attached at the bottom of this one to the mailing list. Since then, I have continued to work the sporadic and troublesome errors that are described in that attached message on otherwise perfectly working and proven code. I now have some insights that I would like to share with the group and solicit their thoughts and ideas as to what the root cause(s) may be.
Update and progress: In continuing to work towards identifying the cause of this problem, I have recently modified my Connection URLs to disable the new (4.1) server based PreparedStatements (i.e. added &useServerPrepStmts=false to JDCB URL string. This appears to be a huge key as all of my sporadic errors as described below have magically gone away with NO other changes to the source code, DB, or environment. From this, I am assuming that there are still some remaining bugs in the 4.1.5-gamma DB and/or both the mysql-connector-java-3.1.4-beta-bin.jar and the mysql- connector-java-3.0.15-ga-bin.jar Connector/J drivers related to server PreparedStatements. For the time being, running without the server PreparedStatements has me working again - however, I'd obvously like to take advantage of them as soon as possible for the performance advantage they can offer. Can anyone confirm this theory and/or shed any light on the issue or expected fixes? Thanks again in advance! Todd Original posting of problem details follows: ---------------------- Hello: I am having a problem with an (not)updatable ResultSet that I cannot figure out. The problem is not consistent in that the exact SQL statements and tables involved will work one time and then fail the next. There does not appear to be any rhyme or reason as to when or why it fails. Once it does fail, simply retrying (perhaps several times) get's me back to a working state. I have already looked extensivley for any sort of non-closed Connection, ResultSet, etc. and have found nothing. Additionally, I have isolated this in order to ensure there are no Threading considerations. Here is the table involved: CREATE TABLE OSECRegistration ( id VARCHAR(255) NOT NULL, hostName VARCHAR(255) NOT NULL, platformType VARCHAR(255) NOT NULL, registrationTime BIGINT NOT NULL, createdBy VARCHAR(255) NOT NULL, dateCreated BIGINT NOT NULL, modifiedBy VARCHAR(255) NOT NULL, dateModified BIGINT NOT NULL, PRIMARY KEY( id ), UNIQUE ( hostName, platformType ), INDEX id_index ( id ), INDEX PlatformType_index ( platformType ), FOREIGN KEY PlatformType_key ( platformType ) REFERENCES PlatformType ( platformType ) ) TYPE=InnoDB; The SQL that I am using in a PreparedStatement is as follows: String stmt = "select id, registrationTime, modifiedBy, dateModified from OSECRegistration where ( hostName = ? ) AND platformType = ? for update"; I prepare the statement as follows: ps = con.prepareStatement( stmt, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE ); I then resolve the '?' values and: ResultSet rs = ps.executeQuery(); and walk through the ResultSet modifying the required fields with statements like: rs.updateLong( i, ((Long) newValue).longValue() ); As far as I can tell, all of the above is correct. Yet, I still inconsistantly get errors such as the following: [junit] com.mysql.jdbc.NotUpdatable: Result Set not updatable.This result set must come from a statement that was created with a result set type of ResultSet.CONCUR_UPDATABLE, the query must select only one table, and must select all primary keys from that table. See the JDBC 2.1 API Specification, section 5.6 for more details. [junit] at com.mysql.jdbc.UpdatableResultSet.generateStatements (UpdatableResultSet.java:1770) [junit] at com.mysql.jdbc.UpdatableResultSet.syncUpdate (UpdatableResultSet.java:1959) [junit] at com.mysql.jdbc.UpdatableResultSet.updateLong (UpdatableResultSet.java:1343) [junit] at com.ensuren.ose.common.registration.OSECRegistrationJDBCDao.updat eResultSet(OSECRegistrationJDBCDao.java:2298) [junit] at com.ensuren.ose.common.registration.OSECRegistrationJDBCDao.readF orUpdate(OSECRegistrationJDBCDao.java:724) [junit] at com.ensuren.ose.server.registration.RegistrationBean.register (RegistrationBean.java:140) [junit] at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) [junit] at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) [junit] at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) [junit] at java.lang.reflect.Method.invoke (Method.java:324) [junit] at org.jboss.ejb.StatelessSessionContainer$ContainerInterceptor.invo ke(StatelessSessionContainer.java:683) [junit] at org.jboss.resource.connectionmanager.CachedConnectionInterceptor. invoke(CachedConnectionInterceptor.java:185) [junit] at org.jboss.ejb.plugins.StatelessSessionInstanceInterceptor.invoke (StatelessSessionInstanceInterceptor.java:72) [junit] at org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext (AbstractTxInterceptor.java:84) [junit] at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions (TxInterceptorCMT.java:315) [junit] at org.jboss.ejb.plugins.TxInterceptorCMT.invoke (TxInterceptorCMT.java:148) [junit] at org.jboss.ejb.plugins.SecurityInterceptor.invoke (SecurityInterceptor.java:120) [junit] at org.jboss.ejb.plugins.LogInterceptor.invoke (LogInterceptor.java:191) [junit] at org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invoke (ProxyFactoryFinderInterceptor.java:122) [junit] at org.jboss.ejb.StatelessSessionContainer.internalInvoke (StatelessSessionContainer.java:331) [junit] at org.jboss.ejb.Container.invoke (Container.java:723) [junit] at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) [junit] at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) [junit] at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) [junit] at java.lang.reflect.Method.invoke (Method.java:324) [junit] at org.jboss.mx.server.ReflectedDispatcher.dispatch (ReflectedDispatcher.java:60) [junit] at org.jboss.mx.server.Invocation.dispatch(Invocation.java:61) [junit] at org.jboss.mx.server.Invocation.dispatch(Invocation.java:53) [junit] at org.jboss.mx.server.Invocation.invoke(Invocation.java:86) [junit] at org.jboss.mx.server.AbstractMBeanInvoker.invoke (AbstractMBeanInvoker.java:185) [junit] at org.jboss.mx.server.MBeanServerImpl.invoke (MBeanServerImpl.java:473) [junit] at org.jboss.invocation.http.server.HttpInvoker.invoke (HttpInvoker.java:163) [junit] at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) [junit] at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) [junit] at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) [junit] at java.lang.reflect.Method.invoke (Method.java:324) [junit] at org.jboss.mx.server.ReflectedDispatcher.dispatch (ReflectedDispatcher.java:60) [junit] at org.jboss.mx.server.Invocation.dispatch(Invocation.java:61) [junit] at org.jboss.mx.server.Invocation.dispatch(Invocation.java:53) [junit] at org.jboss.mx.server.Invocation.invoke(Invocation.java:86) [junit] at org.jboss.mx.server.AbstractMBeanInvoker.invoke (AbstractMBeanInvoker.java:185) [junit] at org.jboss.mx.server.MBeanServerImpl.invoke (MBeanServerImpl.java:473) [junit] at org.jboss.invocation.http.servlet.InvokerServlet.processRequest (InvokerServlet.java:147) [junit] at org.jboss.invocation.http.servlet.InvokerServlet.doPost (InvokerServlet.java:209) [junit] at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) [junit] at javax.servlet.http.HttpServlet.service(HttpServlet.java:810) [junit] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:237) [junit] at org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:157) [junit] at org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:214) [junit] at org.apache.catalina.core.StandardValveContext.invokeNext (StandardValveContext.java:104) [junit] at org.apache.catalina.core.StandardPipeline.invoke (StandardPipeline.java:520) [junit] at org.apache.catalina.core.StandardContextValve.invokeInternal (StandardContextValve.java:198) [junit] at org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java:152) [junit] at org.apache.catalina.core.StandardValveContext.invokeNext (StandardValveContext.java:104) [junit] at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke (SecurityAssociationValve.java:72) [junit] at org.apache.catalina.core.StandardValveContext.invokeNext (StandardValveContext.java:102) [junit] at org.jboss.web.tomcat.security.JBossSecurityMgrRealm.invoke (JBossSecurityMgrRealm.java:275) [junit] at org.apache.catalina.core.StandardValveContext.invokeNext (StandardValveContext.java:102) [junit] at org.apache.catalina.authenticator.AuthenticatorBase.invoke (AuthenticatorBase.java:462) [junit] at org.apache.catalina.core.StandardValveContext.invokeNext (StandardValveContext.java:102) [junit] at org.apache.catalina.core.StandardPipeline.invoke (StandardPipeline.java:520) [junit] at org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:137) [junit] at org.apache.catalina.core.StandardValveContext.invokeNext (StandardValveContext.java:104) [junit] at org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:117) [junit] at org.apache.catalina.core.StandardValveContext.invokeNext (StandardValveContext.java:102) [junit] at org.apache.catalina.valves.AccessLogValve.invoke (AccessLogValve.java:535) [junit] at org.apache.catalina.core.StandardValveContext.invokeNext (StandardValveContext.java:102) [junit] at org.apache.catalina.core.StandardPipeline.invoke (StandardPipeline.java:520) [junit] at org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:109) [junit] at org.apache.catalina.core.StandardValveContext.invokeNext (StandardValveContext.java:104) [junit] at org.apache.catalina.core.StandardPipeline.invoke (StandardPipeline.java:520) [junit] at org.apache.catalina.core.ContainerBase.invoke (ContainerBase.java:929) [junit] at org.apache.coyote.tomcat5.CoyoteAdapter.service (CoyoteAdapter.java:160) [junit] at org.apache.coyote.http11.Http11Processor.process (Http11Processor.java:799) [junit] at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.p rocessConnection(Http11Protocol.java:705) My environment is as follows: Mandrake 9.2 MySQL 4.1.4-gamma-standard Using mysql-connector-java-3.1.4-beta-bin.jar (I have also tried the 3.0.14 production driver with the same results) and JBoss 3.2.5 Finally, I am acquiring the Connection as follows (i.e. I am not using the JBoss jndi DataSource): Class.forName( "com.mysql.jdbc.Driver" ); Connection con = DriverManager.getConnection( props.getProperty( "jdbc:mysql://localhost:3306/mydb" ), props.getProperty( "myuser" ), props.getProperty ( "mypassword" ) ); con.setAutoCommit( false ); Again, all of the above works perfectly much of the time. However, sporadically it fails with the NotUpdatable ResultSet error. Once it has failed, it takes multiple repreated attempts until it finally goes back to working again. I would greatly appreciate any and all assistance with determining what I am doing wrong. This problem has been frustrating me for several weeks now and I need some suggestions please. Thanks in advance, Todd -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]