CachedRowSet Concurrency

Discussion in 'Java' started by cksanjose, Nov 14, 2007.

  1. cksanjose

    cksanjose Guest

    I have an application that starts a new process every 15 minutes. I
    create a new thread for each process so it is possible that they will
    run concurrently. I have a data access layer that returns a
    CachedRowSet object. When I only have 1 process running, the program
    is fine. As soon as another process starts, I start getting errors in
    the data access layer. I get an exception in
    "com.sun.rowset.CachedRowSetImpl.populate".
    My data access layer method looks like this:

    public RowSet retrieve(String sql)
    {
    Connection connection = null;
    ResultSet resultset = null;
    CachedRowSet rowset = null;
    Statement statement = null;

    try
    {
    connection = Current.getConnection();
    statement =
    connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
    ResultSet.CONCUR_READ_ONLY);
    resultset = statement.executeQuery(sql);
    rowset = new CachedRowSetImpl();
    rowset.populate(resultset);
    resultset.close();
    statement.close();
    }
    catch (SQLException sqle)
    {

    sqle.printStackTrace();
    }

    finally
    {
    connection = null;

    }

    return rowset;
    }
     
    cksanjose, Nov 14, 2007
    #1
    1. Advertisements

  2. cksanjose

    Lew Guest

    What is the exact message from the exception?

    What are the first few exact lines of the stack trace?
    We might need an SSCCE to answer this. We certainly need to know what the
    error is.

    <http://www.physci.org/codes/sscce.html>

    Creating an SSCCE often helps one discover an answer as they're documenting
    the question.
    Oh, please do not use TAB characters in Usenet listings!
    Hmm - a mysterious undocumented class with a black-box method. There's no way
    this could in any way be involved with the problem.
    You may wish to read up on "SQL Injection attacks".
    Note that exceptions could leave the ResultSet or the Statement not close()d.

    What would that induce?
    You should also emit the message and the SQL error code.
    What do you imagine that this accomplishes?

    The variable goes out of scope anyway. The assignment accomplishes nothing,
    and indeed might be optimized away.
     
    Lew, Nov 14, 2007
    #2
    1. Advertisements

  3. cksanjose

    cksanjose Guest

    Lew,

    Thanks for the quick response.

    The stack trace is listed but the inner exception error is
    ConversionBufferFullException.
    The error is:
    com.ibm.db2.jcc.b.SqlException
    at com.ibm.db2.jcc.b.s.a(s.java:1517)
    at com.ibm.db2.jcc.b.s.n(s.java:532)
    at com.ibm.db2.jcc.b.s.W(s.java:1436)
    at com.ibm.db2.jcc.b.kf.a(kf.java:1135)
    at com.ibm.db2.jcc.b.kf.getObject(kf.java:1122)
    at com.sun.rowset.CachedRowSetImpl.populate(CachedRowSetImpl.java:
    646)
    at com.gaic.crop.ewa.eWADataAccess.retrieve(eWADataAccess.java:97)
    at com.gaic.crop.ewa.eWADataAccess.retrieve(eWADataAccess.java:64)
    at
    com.gaic.crop.ewa.eWARecordTypeFactory08.buildAcreageRecords(eWARecordTypeFactory08.java:
    650)
    at
    com.gaic.crop.ewa.eWARecordTypeFactory08.build(eWARecordTypeFactory08.java:
    160)
    at com.gaic.crop.ewa.eWAJob.run(eWAJob.java:128)
    at java.util.concurrent.ThreadPoolExecutor
    $Worker.runTask(ThreadPoolExecutor.java:650)
    at java.util.concurrent.ThreadPoolExecutor
    $Worker.run(ThreadPoolExecutor.java:675)
    at java.lang.Thread.run(Thread.java:595)
     
    cksanjose, Nov 14, 2007
    #3
  4. cksanjose

    Esmond Pitt Guest

    Like Andrew, I'm pretty suspicious of Current.getConnection(). If it
    doesn't get you a connection from a driver-managed connection pool it is
    almost certainly the source of the problem.
     
    Esmond Pitt, Nov 14, 2007
    #4
  5. Andrew who? Did you mean, 'Lew'?
     
    Andrew Thompson, Nov 15, 2007
    #5
  6. cksanjose

    Esmond Pitt Guest

    err, oops, yes ...
     
    Esmond Pitt, Nov 15, 2007
    #6
  7. cksanjose

    Daniel Pitts Guest

    People tend to confuse you two. I don't think I've ever mistaken Lew
    for Andrew, but maybe some people only read the last two letters? :)

    Joking aside, both of you are very helpful in this community, so I can
    see why people confuse you.
     
    Daniel Pitts, Nov 15, 2007
    #7
  8. If they see the letters SSCCE, they might also get confused.

    Lew is the single greatest promoter of the SSCCE (according
    to my estimates of seeing 'SSCCE' pop up in my ..Google
    Alerts). Lew mentions SSCCEs more often than I do.

    <a little tongue in cheek>
    Great minds think alike.
    </a little tongue in cheek>
     
    Andrew Thompson, Nov 17, 2007
    #8
  9. cksanjose

    Lew Guest

    I never even heard of SSCCEs until I learned of them from Andrew.
     
    Lew, Nov 17, 2007
    #9
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.