|
I don't think you are closing everything you think you are closing. There is a big difference between seeing ODPs (which is what I thought the original issue was) and running out of statement handles in the CLI. Seeing ODPs is expected and is a caching feature of the system. Seeing the handle count grow is a resource leak. What is happening to you is that you are getting a connection from a pool, you are creating a statement (or several) with that connection. You are doing some work (which includes creating ResultSets). You probably do close the ResultSets as you say, but you may not be closing all the statements that you created. If you do not close statements under a connection and continue to get new ones, your application will crash. There is no way for the JDBC driver to stop it (before JDK 1.2). The garbage collector can't save you from this type of leak. This is because even though your application has given up its reference to the Statement object, the JDBC driver itself has not. Therefore when the garbage collector runs, the 'lost' statement handles are still reachable. With JDK 1.2, the native JDBC driver can actually recover from most leak situations. The way this is done is by replacing the references in the JDBC driver with 'WeakReferences'. These are a new type of reference in JDK 1.2 and it basically tell the garbage collector that, assuming this is the only reference left to the object (meaning the user app 'lost' their reference), go ahead and garbage collect this object. When the object gets garbage collected, the finalizer for the object runs and the database resources get freed. The other possibility is that you are trying to create too many statements under a connection (if you need 1000 statements at a time, its the same as leaking until you have 1000 statements out there, right?). I assume this isn't the case, but it is fair to mention it. :) Regards, Richard D. Dettinger AS/400 Java Data Access Team "TRUE! nervous, very, very dreadfully nervous I had been and am; but why WILL you say that I am mad? The disease had sharpened my senses, not destroyed, not dulled them. " - Edgar Allan Poe "The Tell-Tale Heart" Madhavan <seawolf00@yahoo.com>@midrange.com on 09/29/2000 06:45:37 PM Please respond to JAVA400-L@midrange.com Sent by: owner-java400-l@midrange.com To: JAVA400-L@midrange.com cc: Subject: Re: Call Level Interface error Guys, This is the Call Level Interface error that I get in the middle of processing after which the job runs allright. Typically I have seen that File ODPs are open and exceeds 512 for a type II driver which cause the job to abort. I am attaching the job log which givers SQL error type 14 - Maximum number of handles allocated. This pertains to my earlier questions about why despite releasing connections, closing result set etc.. the file ODPs in QSQLSRVR is still open Thanks and please answer asap Regards __________________________________________________ Do You Yahoo!? Yahoo! Photos - 35mm Quality Prints, Now Get 15 Free! http://photos.yahoo.com/ SQ99999 Diagnostic 30 09/29/00 16:06:49 QSQCLI QSYS *STMT QSQCLI QSYS From module . . . . . . . . : SQLAH From procedure . . . . . . : SQLAllocHandle Statement . . . . . . . . . : 4288 To module . . . . . . . . . : SQLAS To procedure . . . . . . . : SQLAllocStmt Statement . . . . . . . . . : 3817 Thread . . . . : 0000003F Message . . . . : Error Occurred in SQL Call Level Interface Cause . . . . . : You have issued a procedure call that encountered an error. The error code is 14. Error codes are as follows: -- Error type 3 is program type out of range. -- Error type 4 is SQL data type out of range. -- Error type 9 is argument value not valid. -- Error type 10 is function sequence error. -- Error type 12 is transaction operation state not valid. -- Error type 13 is memory management problem. -- Error type 14 is maximum number of handles allocated. -- Error type 15 is no cursor name available. -- Error type 16 is handle type for operation not valid. Recovery . . . : Refer to the DB2 for AS/400 SQL Call Level Interface (ODBC) book for a complete description of the error. Specifically, look under the procedure that sent the error. MCH3601 Escape 40 09/29/00 16:06:56 QJVAJDBC QJAVA *STMT QJVAJDBC QJAVA *STMT From module . . . . . . . . : QJVASTAT From procedure . . . . . . : Java_com_ibm_db2_jdbc_app_DB2StatementRuntimeI mpl_SQLFreeStmt Statement . . . . . . . . . : 910 To module . . . . . . . . . : QJVASTAT To procedure . . . . . . . : Java_com_ibm_db2_jdbc_app_DB2StatementRuntimeI mpl_SQLFreeStmt Statement . . . . . . . . . : 910 Thread . . . . : 00000013 Message . . . . : Pointer not set for location referenced. Cause . . . . . : A pointer was used, either directly or as a basing pointer, that has not been set to an address. SQ99999 Diagnostic 30 09/29/00 16:06:56 QSQCLI QSYS *STMT QSQCLI QSYS *STMT From module . . . . . . . . : SQLAH From procedure . . . . . . : SQLAllocHandle Statement . . . . . . . . . : 4288 To module . . . . . . . . . : SQLAS To procedure . . . . . . . : SQLAllocStmt 5769SS1 V4R4M0 990521 Job Log DTRISC 09/29/00 16:24:31 Page 5 Job name . . . . . . . . . . : DEFAULT User . . . . . . : QTMHHTTP Number . . . . . . . . . . . : 246273 Job description . . . . . . : QZHBHTTP Library . . . . . : QHTTPSVR MSGID TYPE SEV DATE TIME FROM PGM LIBRARY INST TO PGM LIBRARY INST Statement . . . . . . . . . : 3817 Thread . . . . : 0000002A Message . . . . : Error Occurred in SQL Call Level Interface Cause . . . . . : You have issued a procedure call that encountered an error. The error code is 14. Error codes are as follows: -- Error type 3 is program type out of range. -- Error type 4 is SQL data type out of range. -- Error type 9 is argument value not valid. -- Error type 10 is function sequence error. -- Error type 12 is transaction operation state not valid. -- Error type 13 is memory management problem. -- Error type 14 is maximum number of handles allocated. -- Error type 15 is no cursor name available. -- Error type 16 is handle type for operation not valid. Recovery . . . : Refer to the DB2 for AS/400 SQL Call Level Interface (ODBC) book for a complete description of the error. Specifically, look under the procedure More... that sent the error. MCH3601 Escape 40 09/29/00 16:07:34 QJVAJDBC QJAVA *STMT QJVAJDBC QJAVA *STMT From module . . . . . . . . : QJVASTAT From procedure . . . . . . : Java_com_ibm_db2_jdbc_app_DB2StatementRuntimeI mpl_SQLFreeStmt Statement . . . . . . . . . : 910 To module . . . . . . . . . : QJVASTAT To procedure . . . . . . . : Java_com_ibm_db2_jdbc_app_DB2StatementRuntimeI mpl_SQLFreeStmt Statement . . . . . . . . . : 910 Thread . . . . : 00000013 Message . . . . : Pointer not set for location referenced. Cause . . . . . : A pointer was used, either directly or as a basing pointer, that has not been set to an address. CPC1126 Completion 50 09/29/00 16:23:46 QWTCCCNJ QSYS 0432 *EXT *N Thread . . . . : 00000009 Message . . . . : Job 246273/QTMHHTTP/DEFAULT was ended by user MADHUV. Cause . . . . . : User MADHUV issued a controlled end job request for job 246273/QTMHHTTP/DEFAULT. +--- | This is the JAVA/400 Mailing List! | To submit a new message, send your mail to JAVA400-L@midrange.com. | To subscribe to this list send email to JAVA400-L-SUB@midrange.com. | To unsubscribe from this list send email to JAVA400-L-UNSUB@midrange.com. | Questions should be directed to the list owner: joe@zappie.net +---
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.