2009-10-23 9 views
13

Lors de la connexion à Oracle, le pilote JDBC s'identifie comme "JDBC Thin Client" à Oracle (dans v $ session comme "programme"). Il y a aussi une colonne 'ClientInfo' dans v $ session qui pourrait être utilisée pour cela, mais elle est toujours vide. Nous avons besoin d'identifier différentes applications se connectant à Oracle (qui tournent sur le même hôte, donc la colonne 'machine' dans v $ session est la même), il est donc possible de changer la façon dont Oracle JDBC Le pilote du client léger s'identifie (pour que nous puissions inclure le nom de l'application, par exemple)?Modification de l'identificateur de client léger Oracle JDBC

Ou y a-t-il une manière recommandée de faire ceci? Une restriction est que nous faisons cela dans Struts pour certaines des applications, qui gère la configuration de la connexion en interne.

+1

duplication possible de [Comment faire pour que mon application Java s'identifie à Oracle sur la connexion?] (Http://stackoverflow.com/questions/1548400/how-do-i-make-my-java-application-identify -withelf-to-oracle-on-connection) – derobert

Répondre

18

[Identical to this answer]

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 

Au niveau de l'application, vous pouvez utiliser les méthodes suivantes pour définir client_info, Module et l'action dans v $ session:

dbms_application_info.set_client_info 
dbms_application_info.set_module 
dbms_application_info.set_action 
+0

A la vôtre, cela devrait aider pour certaines applications - cela fonctionne-t-il avec OracleConnectionPoolDataSource? Je vois qu'il y a une méthode setConnectionProperties ici. Dois-je spécifier tous les champs listés, même si j'utilise les méthodes .setUser(), .setPassword(), etc, sur OracleConnectionPoolDataSource? – JeeBee

+1

Je sais que cela fonctionne sur OracleConnectionPoolDataSource. Il y a longtemps, je ne me souviens pas des détails. setConnectionProperties prend un java.util.Properties comme argument. Ne pensez pas que cela vide l'utilisateur et le mot de passe précédemment définis avec .setUser(), .setPassword(). Ai-je un sens? ;-) –

+0

Salut! Oui, cela a du sens, et cela fonctionne uniquement avec l'ensemble v $ session.program. À votre santé. – JeeBee

2

Il y a aussi une fonction Oracle:

dbms_application_info.set_client_info('Client Info'); 

qui définit la colonne CLIENTINFO dans v $ session.

Questions connexes