Hi All,
The documentation for the "connectionManager" package currently states that all
this package provides is a workaround for the problem of ORMs that leak
database connections.
However it actually currently does more than that. The
ConnectionManagerDataSource class also provides a generic mechanism for getting
callbacks whenever a connection is borrowed from a DataSource or returned to a
DataSource.
Is it really necessary for Orchestra to provide such functionality? Orchestra
doesn't actually make any use of this at all (apart from an artificial "logging
listener" that could simply be replaced by adding
a few log statements into ConnectionManagerDataSource). And it just doesn't
seem to me to be part of Orchestra's core purpose to provide this sort of thing.
If it is felt that this really is is desirable, then perhaps we should decouple
the "leak fixing" part from the "listening" part? Currently, it's not just a
listener management tool because it cannot listen without also wrapping
connections in the special DisconnectableConnection proxy. We could instead:
(a)
replace
public Connection getConnection() throws SQLException
{
return DisconnectableConnectionFactory.create(this);
}
with a call to a factory object that is injected into it, and
(b)
move static method releaseAllBorrowedConnections into the
DisconnectableConnectionFactory class.
The ConnectionManagerDataSource would then be a simple standalone "listener"
mechanism rather than being half-user-tool and
half-solution-to-specific-jpa-problem.
Just to be clear, my current preference is to remove the listener
functionality: why ship/support code that isn't used?
This change would require existing Orchestra users who make use of the
ConnectionManagerDataSource to make a minor config file change.
Comments?
Cheers,
Simon