JDBC Thin et… TNSNAMES

Peu le savent, les drivers JDBC thin sont compatibles avec la méthode de résolution TNSNAMES. Pour utiliser cette méthode, vous devez toutefois préciser l’emplacement du répertoire contenant les fichiers tnsnames.ora et sqlnet.ora. En effet, dans le cas des drivers thin, les variables ORACLE_HOME et TNS_ADMIN ne sont pas prises en compte, contrairement au cas des drivers OCI.

La propriété oracle.net.tns_admin des drivers Oracle permet d’indiquer le répertoire qui contient les fichiers de configuration réseau. Vous pouvez la positionner dans le code ou dans l’environnement de la machine virtuelle Java. Cet article présente un exemple d’utilisation d’une classe Java avec le fichier tnsnames.ora.

Classe Java

Voici un exemple de classe Java qui utilise un alias TNSNAMES et non pas une chaîne de connexion EZCONNECT :

cat OracleAuthTnsnames.java 
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class OracleAuthTnsnames {
public static void main(String[] args)
throws SQLException {
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
String url = "jdbc:oracle:thin:system/manager@WHITE";
Connection conn = DriverManager.getConnection(url);
Statement stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery("select user from dual");

while (rset.next())
System.out.println(rset.getString(1));

rset.close();
stmt.close();
conn.close();
}
}

Fichier tnsnames.ora

Pour fonctionner, il vous faut un fichier qui stocke les alias TNS comme celui-ci ; mettez les informations qui correspondent à vos accès :

cat /home/oracle/network/admin/tnsnames.ora 
WHITE = (DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=purple.easyteam.fr)(PORT=1521))
)
(CONNECT_DATA=(SERVICE_NAME=WHITE))
)

Compiler et exécuter la classe

Il vous suffit donc de compiler et d’exécuter la classe avec la propriété, ici en paramètre, pour que vos drivers Oracle résolvent la chaîne de connexion avec la méthode TNSNAMES.

export JAVA_HOME=/usr/java/jdk1.7.0_03
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:/u01/app/oracle/product/11.2.0/db_1/jdbc/lib/ojdbc6.jar

javac OracleAuthTnsnames.java

java -Doracle.net.tns_admin=/home/oracle/network/admin/tnsnames.ora
OracleAuthTnsnames

SYSTEM

Les drivers JDBC thin permettent bien plus encore et c’est déjà une autre histoire…