Die Schnittstelle gliedert sich in zwei Teile. Ein Teil ist in Java implementiert und stellt die Java-Repräsentation der Schnittstelle mit deren Methoden dar. Der andere Teil ist in C++ realisiert und beinhaltet die eigentlichen Methoden, welche die Zugriffe auf die TIS-Applikationen durchführen:
get-
und getNext-
Methoden auf der Java-Seite
definiert werden ist nachfolgend zu sehen:
// get public static native String getStringNative(int[] mibVarOID); public static native int getIntNative(int[] mibVarOID); // getNext public static native int getNextIntNative(int[][] mibVarOID, int oidIndex); public static native String getNextStringNative(int[][] mibVarOID, int oidIndex);Es ist zu beachten, daß die Übergabeparameter bei
get
ein- und bei getNext
zweidimensional
ausgelegt sind. Dies resultiert daraus, daß bei getNext
-Aufrufen eine OID zurückgegeben
werden muß und da die Länge einer OID (welche zurückgegeben wird) im Voraus nicht bekannt ist,
kann diese nicht als normaler Rückgabewert behandelt werden. So wird ein zweidimensionales
Feld benutzt, welches in der einen Dimension den ``Aufhänger'' für die beliebig lange Rückgabe-OID
besitzt und in der anderen Dimension die eigentlichen OID-Werte beinhaltet.
javah
-Applikation, welche von
JDK zur Verfügung gestellt wird und als Parameter ein ``.class''-File benötigt, erzeugt, Als
Parameter wird die Klasse ``jni.nativeBase.class'' übergeben, die aus der nativeBase.java Datei
entstanden ist. Es muß hierbei die Option ``-jni'' angegeben werden, damit die Header-Datei
generiert werden kann. Innerhalb dieser Datei werden die Prototypen der Native-Methoden
aufgeführt. Der Prototyp für die Native-Methode getIntNative
sieht folgendermaßen aus:
/* * Class: jni_nativeBase * Method: getIntNative * Signature: ([I)I */ JNIEXPORT jint JNICALL Java_jni_nativeBase_getIntNative (JNIEnv *, jclass, jintArray);Die Angabe ``Signature: ([I)I'' stellt dar, daß diese Methode einen Integer-Wert als Eingabe und als Ausgabeparameter enthält. Die Kodierung der Ein- und Ausgabeparameter ist in Tabelle 6.1 aufgeführt.
RFC1157VarBind
, welche von der Windows NT API zur Verfügung gestellt wird, benutzen,
muß ein solches Objekt zuerst aufgebaut werden. Danach wird der erforderliche Request gebildet
und mit Aufruf der ResolveVarbind
-Methode der Request abgesetzt. Nach erfolgreicher
Beendigung des Requests wird ggf. ein Ergebnis an die Java-Umgebung übergeben. In der Testphase
des Prototypen wird kein Exception Handling auf der Native-Seite durchgeführt, jedoch ist es
durch das Java Native Interface möglich, dies zu realisieren. Eine Native-Methode ist anhand
von getIntNative
nachfolgend dargestellt.
/* * Class: jni_nativeBase * Method: getIntNative * Signature: ([I)I */ JNIEXPORT jint JNICALL Java_jni_nativeBase_getIntNative (JNIEnv *env, jclass, jintArray intArray) { RFC1157VarBind* varBindPtr = (RFC1157VarBind*) calloc(1,sizeof(RFC1157VarBind)); varBindPtr->name.idLength = env->GetArrayLength(intArray); varBindPtr->name.ids = (unsigned int*) env->GetIntArrayElements(intArray,0); ResolveVarBind(varBindPtr,ASN_RFC1157_GETREQUEST); return varBindPtr->value.asnValue.number; }