Hi Ryan, This was recently discussed here: https://groups.google.com/d/topic/jooq-user/xi2NQva0H1Y/discussion
> Is this a good way to do it? Is it expensive to create them? Or should I be > pooling the factories too? No it isn't expensive to create them. They are essentially just wrappers for a JDBC Connection/DataSource. They should have no relevant initialisation overhead. > Also, kinda related... is there a way to close a factory so that updateable > records don't accidently try and use the factories connection when it has > actually been reassigned to somewhere else (from the connection pool). So if > I call MyRecord.store() and it was attached to a closed factory, it will > give an exception. That is a good question. I wonder if this kind of lifecycle can be handled when you supply a JDBC Connection to the Factory. I assume that using DataSource in the Factory constructor (available since jOOQ 2.4) is the better way to go. This was described in the most recent release notes: http://www.jooq.org/notes.php#2.4.0 Essentially, jOOQ fetches a JDBC Connection from the DataSource when you execute the query, and returns (closes) it again, when the query execution is finished. The returned record will then hold a reference to the DataSource. When you call store(), it will fetch a new Connection from it. That way, you should not end up with "stale" records as you do today. More info on jOOQ's support for DataSources can be seen here: https://groups.google.com/d/topic/jooq-user/eiwxsnVPWV0/discussion If you cannot use a JDBC DataSource, then you have to handle the Connection lifecycle yourself. One option is to manually "re-attach" the "stale" UpdatableRecords to a correct Factory using http://www.jooq.org/javadoc/latest/org/jooq/impl/Factory.html#attach(org.jooq.Attachable...) This is also documented in the manual: http://www.jooq.org/manual/JOOQ/Serializability/ Another option is to handle this in an ExecuteListener and supply the right Connection to jOOQ in the start() method: http://www.jooq.org/javadoc/latest/org/jooq/ExecuteListener.html#start(org.jooq.ExecuteContext) 2012/7/9 Ryan How <[email protected]>: > Hi, > > Is there a best practice for creating factories?. > > I am pretty much creating 1 factory per unit of database work (which is > roughly a request in a web application) and pass it a connection from a > connection pool. > > Is this a good way to do it? Is it expensive to create them? Or should I be > pooling the factories too? > > Also, kinda related... is there a way to close a factory so that updateable > records don't accidently try and use the factories connection when it has > actually been reassigned to somewhere else (from the connection pool). So if > I call MyRecord.store() and it was attached to a closed factory, it will > give an exception. > > Thanks, Ryan >
