We have a wM java service which connects to a Foxpro database thru a JDBC and runs a query, then for each record fetched it needs to validate certain fields against an Oracle8i database. So in a
while(rs.next())
we call a stored procedure in oracle using
CallableStatement cs = cn1.prepareCall(“{call testprc ?, ?, ?)}”);
ResultSet rs1 = cs.executeQuery();
After processing some records, it gives the following error:
Exception in thread “main” java.lang.OutOfMemoryError
We tried
rs1.close();
System.gc();
in each iteration, but the program errors out just as same.
Kazi this sounds familiar. The problem may be if your query or stored proc iether by design or by accident is returning insane amount of data in result set than closing result set or asking for garbage collection gc call will not help.
By the way I had similar errors in different projects and System.dc() call does not do anything for it!
rs1.close() will close result set but if data already beoing pulled into memory its no use.
This also can be unrelated problem too if you have some other messages comming to production at same time and couse OUtofMemory. I would recomend to revisit your SQL adn stored proc code see how much data it can return.
How big are your events? Are the messages very, very large? Or are there just a lot of small ones?
Review your events and business processes with somebody else; you may find that you are guaranteeing transactions that should be “volatile”. 262MB is a big chunk of queue to max out.