Почему java.sql.Connection не может быть передан в oracle.jdbc.OracleConnection в коде ниже?
Моя главная цель - перейти к новому имени пользователя для подключения к Oracle и сохранить его в таблице "SESSION", например, в столбце "osuser", потому что я хочу отслеживать в пользовательских изменениях БД и отображать их в таблице.
@Repository
public class AuditLogDAOImpl implements AuditLogDAO {
@PersistenceContext(unitName="myUnitName")
EntityManager em;
@Resource(name = "dataSource")
DataSource dataSource;
public void init() {
try {
Connection connection = DataSourceUtils.getConnection(dataSource);
OracleConnection oracleConnection = (OracleConnection) connection; //Here I got cast exception!
String metrics[] = new String[OracleConnection.END_TO_END_STATE_INDEX_MAX];
metrics[OracleConnection.END_TO_END_CLIENTID_INDEX] = "my_new_username";
oracleConnection.setEndToEndMetrics(metrics, (short) 0);
java.util.Properties props = new java.util.Properties();
props.put("osuser", "newValue");
oracleConnection.setClientInfo(props);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Вот журнал ошибок:
10:42:29,251 INFO [STDOUT] [email protected]b
10:42:51,701 ERROR [STDERR] java.lang.ClassCastException: $Proxy286 cannot be cast to oracle.jdbc.OracleConnection
Как правило, у меня есть 2 проблемы в этом случае:
- почему сбрасывается из Connection to OracleConnection и
- Каков наилучший способ реализации моего намерения (я имею в виду установить новое имя пользователя для v $session.osuser в Oracle DB?
Я работаю с Oracle 11g, Hibernate (используя диспетчер сущностей), источником данных через jndi.
Пожалуйста, помогите, спасибо!
EDIT:
После некоторого улучшения проблема с кастингом все еще существует.
Улучшение:
Connection connection = DataSourceUtils.getConnection(dataSource);
connection = ((org.jboss.resource.adapter.jdbc.WrappedConnection)connection).getUnderlyingConnection();
OracleConnection oracleConnection = (OracleConnection) connection;
Ошибка:
java.lang.ClassCastException: $Proxy287 cannot be cast to org.jboss.resource.adapter.jdbc.WrappedConnection