Hi,
I am writing some stored procedure for Derby. And I am confused about the transaction settings for a Derby stored procedure using a nested connection.
Actually I am trying to modify the transaction isolation level to something like Serializable or Read Committed, and also change the auto commit to be false so that I can manually control the rollback or commit in the stored procedure. What I am doing is just something like:


            connection = DriverManager.getConnection("jdbc:default:connection");
            connection.setAutoCommit(false);
            connection
                    .setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);

            PreparedStatement insertToIndexPerson = connection
                    .prepareStatement("INSERT INTO index_time_person (index_time, person_email) VALUES (?, ?)");
            insertToIndexPerson.setTimestamp(1, the_time);
            insertToIndexPerson.setString(2, the_person_email);
            insertToIndexPerson.executeUpdate();
            insertToIndexPerson.close();
            connection.commit();


I found both the autocommit mode and isolation level can be modified successfully.
But when I read Derby guide documents (derbydev.pdf "Programming database-side JDBC procedures), I found these items which is obvious forbids what I was doing:

In order to preserve transactional atomicity, database-side JDBC procedures that use
nested connections have the following limitations.
Cannot issue a commit or rollback, unless called within a CALL statement.
Cannot change connection attributes such as auto-commit.

If these items are true for my stored procedure, then I cannot modify the isolation level and neither change the autocommit mode.
And I am yet confused about the first statement "Cannot issue a commit or rollback, unless called within a CALL statement." Could a Derby procedure be called without a "CALL statement"?

I am new to Derby and quite curious about these. Thanks!