为什么

java.sql.Connection不能在下面的代码中转换为oracle.jdbc.OracleConnection?

我的主要目标是传递到Oracle连接新用户名,并将其保存在例如’osuser’列中的’SESSION’表中,因为我想跟踪数据库用户更改并将其显示在表中.

@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] org.jboss.resource.adapter.jdbc.jdk6.WrappedConnectionJDK6@bcc8cb

10:42:51,701 ERROR [STDERR] java.lang.ClassCastException: $Proxy286 cannot be cast to oracle.jdbc.OracleConnection

在这种情况下一般我有2个问题:

>为什么从Connection连接到OracleConnection的失败和

>什么是最好的方式来实现我的意图(我的意思是设置新的用户名为v $session.osuser在Oracle数据库?

我使用Oracle 11g,Hibernate(使用实体管理器),通过jndi的数据源.

请帮忙,谢谢!

编辑:

经过一些改进,铸造问题依然存在.

改进:

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

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐