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>

