Search code examples
javaoracle-databasepropertiesconnection

How do I make my Java application identify itself to Oracle on connection?


When my application connects to an Oracle database I want to be able to see by looking at the active sessions in the database that it is connected. Currently it identifies itself as "JDBC Thin Client" because that's the driver that I'm using, but other Java based applications that I have are somehow able to set this value to something more meaningful, like "SQL Developer". I thought it was a property of the Connection or the OracleDataSource, but I've not managed to find one that does the trick. Is this possible? In case it matters, I'm using Java 1.5, with Oracle 10g and the 10g thin driver.


Solution

  • java.util.Properties props = new java.util.Properties();
    props.setProperty("password","mypassword");
    props.setProperty("user","myusername");
    props.put("v$session.osuser", System.getProperty("user.name").toString());
    props.put("v$session.machine", InetAddress.getLocalHost().getCanonicalHostName());
    props.put("v$session.program", "My Program Name");
    DriverManager.registerDriver (new oracle.jdbc.OracleDriver());
    Connection conn=
        DriverManager.getConnection("jdbc:oracle:thin:@myhostname:1521:mysid", props);
    

    SQL>select username,osuser,program,machine
    from v$session
    where username = 'ROB'; 
    
    USERNAME  OSUSER       PROGRAM             MACHINE
    --------- -----------  ------------------  -----------
    ROB       rmerkw       My Program Name     machine
    

    At application level you can use the following methods to set client_info, module and action in v$session:

    dbms_application_info.set_client_info
    dbms_application_info.set_module
    dbms_application_info.set_action