Matt,

I've CCed [email protected], so that others interested can share their 
views as well. For comments, please see inline ...

Werner

wg> -----Original Message-----
wg> From: Matt Harvey [mailto:[EMAIL PROTECTED]
wg> Sent: Tuesday, May 03, 2005 10:37 PM
wg> To: Werner Guttmann
wg> Subject: RE: [castor-user] [JDO] Two questions
wg> 
wg> 
wg> Hi Werner,
wg> 
wg> (I wasn't sure the rest of the list would be interested in 
wg> the details.)
wg> 
wg> There seem to be a lot of places where conn.commit() is 
wg> called (about 16 or so, although only 2 are outside of the test 
wg> code). The cleanest thing would be to replace those calls with 
wg> some kind of ConnectionUtilities.commit(conn) which:
wg> 
wg>     public static void commit(Connection conn)
wg>       throws SQLException
wg>     {
wg>       conn.commit();
wg>       conn.setAutoCommit(true);
wg>     }
wg> 
wg> I think this would be safe because you always seem to be calling
wg> setAutoCommit(false) when starting to use a connection. Oh, and of
wg> course there would have to be a corresponding rollback() method that
wg> also setAutoCommit(true).
wg> 
wg>     public static void rollback(Connection conn)
wg>       throws SQLException
wg>     {
wg>       conn.rollback();
wg>       conn.setAutoCommit(true);
wg>     }
wg> 
wg> Now, it may not be worth the effort just to support 
wg> PostgresSQL 7.4, but I imagine there's some general value in resetting 
wg> the value of auto-commit after you're done using a connection.

Actually, this is the point where I don't really feel comfortable. I am not 
really eager to introduce code to the system that is specific to one RDBMS 
(postgreSQL in this case). Whilst I agree with you that this very kind of 
funtionality should be introduced to Castor, it needs to be in a different 
place. Having said that, what we need is to introduce an observer pattern where 
e.g. a method of a interface/class to be created will be invoked upon 
commit/rollback. And that's exactly where your code needs to go, a 
postgreSQL-specific class that deals with these issues. There's already the 
PersistenceFactory and all the RDBMS-specific implementatiosn out there, but I 
am not sure whether this is the right place to add such functionality.

wg> 
wg> 
wg> 
wg> -----Original Message-----
wg> From: Werner Guttmann [mailto:[EMAIL PROTECTED] 
wg> Sent: Tuesday, May 03, 2005 4:02 AM
wg> To: [email protected]
wg> Subject: RE: [castor-user] [JDO] Two questions
wg> 
wg> Matt,
wg> 
wg> Castor does currently not offer a life-cycle method for 
wg> releasing its
wg> resources, but as we have been recently talking about this, 
wg> I am sure
wg> this feature will make it into one of the upcoming 
wg> releases. Al always,
wg> any contribution(s) would be welcomed.
wg> 
wg> Regards
wg> Werner
wg> 
wg> PS Wrt the postgreSQL issue, can you please have a look at 
wg> the current
wg> codebase and let me know where and how you think this could 
wg> be added.
wg> 
wg> -----Original Message-----
wg> From: Matt Harvey [mailto:[EMAIL PROTECTED]
wg> Sent: Monday, May 02, 2005 7:35 PM
wg> To: [email protected]
wg> Subject: [castor-user] [JDO] Two questions
wg> 
wg> 
wg> Two questions regarding castor's interaction with a database:
wg> 
wg> 1) There doesn't seem to be a way to shut down the JDO 
wg> object. I'm using
wg> a pooling data source underneath it, and I would like a clean way to
wg> close down all of the connections in the pool. How is one 
wg> intended to
wg> indicate that a JDO object is no longer in use? No close() method?
wg> 
wg> 
wg> 2) We're using PostgreSQL 7.4 as our database, and their 
wg> implementation
wg> of setAutoCommit(false) is somewhat braindead. When 
wg> auto-commit is set
wg> to false, invoking commit() on a Connection causes the 
wg> driver to send
wg> "commit; begin;" and invoking rollback() on the Connection 
wg> causes it to
wg> send "rollback; begin;".  
wg> 
wg> In other words, it opens the next transaction after you commit your
wg> transaction. While this basically works, it means that you 
wg> end up with
wg> an open-ended transaction. This causes all kinds of problems. The
wg> solution is to always call setAutoCommit(true) after 
wg> calling commit. The
wg> Postgres driver sends an "end" when you set auto-commit to true. 
wg> 
wg> This is basically a bit of silliness in Postgres 7.4, but it would
wg> probably be worth looking at updating Castor to setAutoCommit(true)
wg> after its commit (since it always calls setAutoCommit(false) anyway.
wg> 
wg> 
wg> 
wg> Thanks!
wg> 

Reply via email to