I switched to c3p0 which allows you to add a hook when creating a connection.
Code:
<bean
id="dataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass" value="${jdbc.driverClassName}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="user" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="preferredTestQuery" value="${jdbc.validationQuery}"/>
<property
name="connectionCustomizerClassName"
value="com.example.OracleConnectionCustomizer"/>
</bean>
The onAcquire method is called after each connection is created.
Code:
public class OracleConnectionCustomizer extends AbstractConnectionCustomizer {
@Override
public void onAcquire(
Connection connection, String parentDataSourceIdentityToken)
throws Exception
{
// Follow synonyms when retrieving metadata.
((OracleConnection) connection).setIncludeSynonyms(true);
}
}