I was playing around with an idea for the JDBC system control. The ability to pass it a Connection object other than one declared in it's annotations.

Here are a couple of use cases:

1) Integration with other persistence mechanisms. Let's say I have a DAO that I can pass a Connection to. I can place the DAO and and JDBC Control operations in the same transaction.

Connection conn = JDBCUtils.getConnection();
conn.setAutoCommit(false);
myJdbcControl.setExternalConnection(conn);
myJdbcControl.depositMoney(1000)
AccountAuditDAO.logDepositTransaction(1000,conn);
conn.commit();
conn.close();

2) Use it to put multiple JDBC Controls in the same db transaction (same as above, replace the DAO with another JDBC control)

3) Make unit testing easier. You can pass a connection to a test database into the control during testing and don't have to mess with the JNDI setup for out-of-container testing.

4) Support for non-standard Connection sources. If you are using a JDBC Control in a Struts app, you can grab the DataSource via the Struts DataSource mechanism.

Setting an external connection would be manipulated by methods, not annotations.

public void setExternalConnection(Connection conn);
public Connection getExternalConnection();

The control implementation would never close the external connection.

Would it be worth adding?

- Drew


Reply via email to