Organizational Research By

Surprising Reserch Topic

connection cannot be cast to oracle jdbc oracleconnection


connection cannot be cast to oracle jdbc oracleconnection  using -'java,oracle,hibernate,jdbc,jndi'

Why java.sql.Connection cannot be cast to oracle.jdbc.OracleConnection in code below?

My main goal is to pass to Oracle connection new user name and save it in 'SESSION' table in for example 'osuser' column because I want to trace in DB user changes and display it in the table.

@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();
        }
    }
}


Here is error log:

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


Generally I have 2 problem in this case:


why cast from Connection to OracleConnection fails and
what is the best way to implement my intend (I mean set the new user name to v$session.osuser in Oracle DB?


I work with Oracle 11g, Hibernate (using entity manager), data source via jndi.

Please help, thanks!

EDIT:

After some improvement the problem with casting still exists.

Improvement:

Connection connection = DataSourceUtils.getConnection(dataSource);
connection = ((org.jboss.resource.adapter.jdbc.WrappedConnection)connection).getUnderlyingConnection();
OracleConnection oracleConnection = (OracleConnection) connection;


Error:

java.lang.ClassCastException: $Proxy287 cannot be cast to org.jboss.resource.adapter.jdbc.WrappedConnection

    

asked Sep 29, 2015 by sujata naik
0 votes
599 views



Related Hot Questions

6 Answers

0 votes
NULL
answered Sep 29, 2015 by okesh.badhiye
0 votes
NULL
answered Sep 29, 2015 by sameer rathore
0 votes
NULL
answered Sep 29, 2015 by patelnikul321
0 votes
NULL
answered Sep 29, 2015 by santosh soni
0 votes
NULL
answered Sep 29, 2015 by sachin wagh
0 votes
NULL
answered Sep 29, 2015 by param.oncemore

...