Auf Thema antworten

Ich grabe dieses Thema doch noch mal aus.


Ich habe mitlerweile herausgefunden das es bei DLL's sowas wie "sharing" gibt.

Wenn man das mal auf Java überträgt sähe das wie folgt aus :


Eine Klasse mit einem static field. Die Funktionsweise kennen wir alle : der Inhalt bleibt über alle Instanzen innerhalb der VM gleich. Ändert man ihn in einer Instanz so wird er auch in allen anderen geändert. Das "sharing" in DLL's geht sogar noch eine Nummer weiter : stellt euch vor das diese Änderung nicht nur innerhalb einer VM abläuft sondern über die Grenzen einer VM hinweg auch in anderen.


Daraus folgt meine Überlegung :


Wenn man mit JNI arbeitet und über eine DLL mit diesem "sharing" zwei verschiedene VM's kombinieren will müsste man in diesem speziellen Speicherbereich eigentlich nur 4 Pointer anlegen : je zwei für das JNI-Env was die VM selbst repräsentiert und dann noch zwei jObject-pointer für die jeweilige Instanz der Klasse in den beiden VM. Natürlich könnte man die weg lassen und in Java dann mit "static" arbeiten, aber das will ich nicht.


Laut Wikipedia sieht eine native JNI-Methode so aus :

[code]JNIEXPORT void JNICALL Java_ClassName_MethodName

   (JNIEnv *env, jobject obj)

 {

     /*Implement Native Method Here*/

 }[/code]

Definiert man diese Methode nun zwei mal, also einmal für den Service und einmal für den Controller, so müsste es doch möglich sein im shared-memory diese zu speichern und dann jeweils von der anderen VM darauf zu zugreifen.


Nun gibt es dabei aber einige Probleme :


1) Laut MSDN müssen alle Variablen in der "sharing"-Deklaration bereits initialisiert werden. Kann man hier "NULL" oder "0" für die Pointer verwenden oder muss man dafür erstmal "pseudo-Objekte" nutzen die dann später überschrieben werden ?


2) Laut Wikipedia muss eine native-Methode sich erstmal in den aktuellen Thread von "JNI-Env" einklinken damit der call gültig ist. Am schluss soll man sich von diesem auch wieder lösen um es sauber aufzuräumen. Wie würde man das nun umsetzen ?


Ich werde mal versuchen mit Hilfe von Google und dem was ich dort finde mir zumindest theroetisch mal etwas zusammen zu klicken. Ich hoffe das jemand der Ahnung von JNI hat mir dann hilft das ganze funktionsfähig zu bekommen.



Oben