Motivation
Um auf die IdM Datenbank von einem SAP NW AS Java zuzugreifen, kann man sich eine DataSource anlegen. Wenn man sich auf dem AS Java befindet, auf dem die UI für IdM deployed ist, kann man die vorhandene DataSource nutzen. Bei Verwendung der DataSource hat man gegenüber dem „DriverManager“ den Vorteil, dass alle Verbindungsparameter zentral im Applikationsserver definiert werden können, man benötigt also im Code keine Parameter für beispielsweise Username, Passwort etc.
Vorgehensweise
Dazu startet man den Netweaver Administrator (NWA) und geht auf: Konfiguration > Infrastruktur > Anwendungsressourcen:
Falls vorhanden, sollte man auf dem AS Java für die IdM UI folgende DataSource vorfinden:
Die folgende Einstellungen besitzt:
Um nun eine DataSource anzulegen, geht man wie folgt vor:
Anlegen einer neuen Ressource vom Typ „Neue JDBC-Custom-DataSource“:
Anschließend übernimmt man die o.g. Einstellungen.
Wenn man eine Applikation deployed, die auf diese Ressource bzw. Datenbank zugreifen soll, kann man das relativ einfach, mit folgenden Code erledigen. Im Beispiel wird davon ausgegangen, dass eine DataSource mit Namen „IDM_DataSource“ angelegt wurde bzw. existiert:
import java.sql.*;
import javax.naming.*;
import javax.sql.*;
final class GetConnection {
/** Uses JNDI and Datasource (preferred style). */
static Connection getJNDIConnection(){
String DATASOURCE_CONTEXT = "jdbc/IDM_DataSource";
Connection result = null;
try {
Context initialContext = new InitialContext();
if ( initialContext == null){
log("JNDI problem. Cannot get InitialContext.");
}
DataSource datasource = (DataSource)initialContext.lookup(DATASOURCE_CONTEXT);
if (datasource != null) {
result = datasource.getConnection();
}
else {
log("Failed to lookup datasource.");
}
}
catch ( NamingException ex ) {
log("Cannot get connection: " + ex);
}
catch(SQLException ex){
log("Cannot get connection: " + ex);
}
return result;
}
...
}
Als Vergleich: die konventionelle Vorgehensweise über den DriverManager am Beispiel MySQL:
import java.sql.*;
import javax.naming.*;
import javax.sql.*;
final class GetConnection {
/** Uses DriverManager. */
static Connection getSimpleConnection() {
//See your driver documentation for the proper format of this string :
String DB_CONN_STRING = "jdbc:mysql://localhost:3306/airplanes";
//Provided by your driver documentation. In this case, a MySql driver is used :
String DRIVER_CLASS_NAME = "org.gjt.mm.mysql.Driver";
String USER_NAME = "juliex";
String PASSWORD = "ui893djf";
Connection result = null;
try {
Class.forName(DRIVER_CLASS_NAME).newInstance();
}
catch (Exception ex){
log("Check classpath. Cannot load db driver: " + DRIVER_CLASS_NAME);
}
try {
result = DriverManager.getConnection(DB_CONN_STRING, USER_NAME, PASSWORD);
}
catch (SQLException e){
log( "Driver loaded, but cannot connect to db: " + DB_CONN_STRING);
}
return result;
}
...
}
Egal, für welchen Weg man sich entscheidet (DataSource im AS Java oder DriverManager), es wird ein Handle auf die Datenbank vom Typ „Connection“ zurückgegeben. Mit „Connection“ kann man dann alle üblichen Operationen (SQL-Statements etc.) auf der Datenbank ausführen, siehe „Lesson: JDBC Basics„.
Fazit
Im Interesse der Wartbarkeit eines Systems sollte man bei Verwendung eines Applikationsservers (egal ob IBM Websphere, SAP Netweaver, JBoss etc.) immer den Weg der DataSource gegenüber dem „DriverManager“ vorziehen. Man macht seinen Code dadurch flexibler und unabhängig von irgendwelchen systemspezifischen Einstellungen.
motivation
To connect to the IdM (Identity Management) database of SAP NW IdM you can use the ‚old-style‘ ‚DriverManager‘ class or you can use the ‚DataSource“ mechansim provided by SAP NetWeaver AS Java. Wenn man sich auf dem AS Java befindet, auf dem die UI für IdM deployed ist, kann man die vorhandene DataSource nutzen. Bei Verwendung der DataSource hat man gegenüber dem „DriverManager“ den Vorteil, dass alle Verbindungsparameter zentral im Applikationsserver definiert werden können, man benötigt also im Code keine Parameter für beispielsweise Username, Passwort etc.
Vorgehensweise
Dazu startet man den Netweaver Administrator (NWA) und geht auf: Konfiguration > Infrastruktur > Anwendungsressourcen:
Falls vorhanden, sollte man auf dem AS Java für die IdM UI folgende DataSource vorfinden:
Die folgende Einstellungen besitzt:
Um nun eine DataSource anzulegen, geht man wie folgt vor:
Anlegen einer neuen Ressource vom Typ „Neue JDBC-Custom-DataSource“:
Anschließend übernimmt man die o.g. Einstellungen.
Wenn man eine Applikation deployed, die auf diese Ressource bzw. Datenbank zugreifen soll, kann man das relativ einfach, mit folgenden Code erledigen. Im Beispiel wird davon ausgegangen, dass eine DataSource mit Namen „IDM_DataSource“ angelegt wurde bzw. existiert:
import java.sql.*;
import javax.naming.*;
import javax.sql.*;
final class GetConnection {
/** Uses JNDI and Datasource (preferred style). */
static Connection getJNDIConnection(){
String DATASOURCE_CONTEXT = "jdbc/IDM_DataSource";
Connection result = null;
try {
Context initialContext = new InitialContext();
if ( initialContext == null){
log("JNDI problem. Cannot get InitialContext.");
}
DataSource datasource = (DataSource)initialContext.lookup(DATASOURCE_CONTEXT);
if (datasource != null) {
result = datasource.getConnection();
}
else {
log("Failed to lookup datasource.");
}
}
catch ( NamingException ex ) {
log("Cannot get connection: " + ex);
}
catch(SQLException ex){
log("Cannot get connection: " + ex);
}
return result;
}
...
}
Als Vergleich: die konventionelle Vorgehensweise über den DriverManager am Beispiel MySQL:
import java.sql.*;
import javax.naming.*;
import javax.sql.*;
final class GetConnection {
/** Uses DriverManager. */
static Connection getSimpleConnection() {
//See your driver documentation for the proper format of this string :
String DB_CONN_STRING = "jdbc:mysql://localhost:3306/airplanes";
//Provided by your driver documentation. In this case, a MySql driver is used :
String DRIVER_CLASS_NAME = "org.gjt.mm.mysql.Driver";
String USER_NAME = "juliex";
String PASSWORD = "ui893djf";
Connection result = null;
try {
Class.forName(DRIVER_CLASS_NAME).newInstance();
}
catch (Exception ex){
log("Check classpath. Cannot load db driver: " + DRIVER_CLASS_NAME);
}
try {
result = DriverManager.getConnection(DB_CONN_STRING, USER_NAME, PASSWORD);
}
catch (SQLException e){
log( "Driver loaded, but cannot connect to db: " + DB_CONN_STRING);
}
return result;
}
...
}
Egal, für welchen Weg man sich entscheidet (DataSource im AS Java oder DriverManager), es wird ein Handle auf die Datenbank vom Typ „Connection“ zurückgegeben. Mit „Connection“ kann man dann alle üblichen Operationen (SQL-Statements etc.) auf der Datenbank ausführen, siehe „Lesson: JDBC Basics„.
Fazit
Im Interesse der Wartbarkeit eines Systems sollte man bei Verwendung eines Applikationsservers (egal ob IBM Websphere, SAP Netweaver, JBoss etc.) immer den Weg der DataSource gegenüber dem „DriverManager“ vorziehen. Man macht seinen Code dadurch flexibler und unabhängig von irgendwelchen systemspezifischen Einstellungen.



