DATI IDENTIFICATIVI DEL PROGETTO N. VERSIONE 1.0 ITEM Integrazione con Java DATA DI USCITA PREVISTA DESCRIZIONE Creazione di DLL per integrazioni con Java Pag. 1 di 9
Descrizione dei requisiti Sezione Macro Analisi ELEMENTI IN INGRESSO PROVENIENZA OBIETTIVI SOLUZIONE Integrazione per l Abruzzo Realizzazione di un modulo per chiamare classi Java Pag. 2 di 9
Pianificazione RISORSE FASE DESCRIZIONE FASE INIZIO PREVISTO FINE PREVISTA COINVOLTE 1 Analisi JNI Riccardo Nobili 01-01-2008 10-01-2008 2 Realizzazione della DLL Riccardo Nobili 11-01-2008 31-01-2008 Pag. 3 di 9
Sezione Progettazione Si realizza una DLL che consenta di istanziare una Java Virtual Machine e da questa creare oggetti e chiamare metodi. Il wrapper deve esporre una interfaccia di tipo winapi C. Architettura del SoftWare La DLL si chiama MilleJava.dll e implementa i seguenti metodi: Metodo Init_JavaVM Init_JavaVM_File Free_JavaVM New_Java Call_Java_SS_S Call_SJava_V_O Call_Java_V_B Call_Java_SS_B Call_Java_S_B Call_Java I Call_Java_SSS_S Call_Java S Descrizione Lancia la JVM Init_JavaVM_File prendendo il classpath da file Libera la memoria dalla JVM Chiama il costruttore di una classe Chiama il metodo di una classe di tipo func(string, string) as string Chiama un metodo statico di una classe di tipo func() as object Chiama il metodo di una classe di tipo func() as bool Chiama il metodo di una classe di tipo func(string, string) as bool Chiama il metodo di una classe di tipo func(string) as bool Chiama il metodo di una classe di tipo func() as int Chiama il metodo di una classe di tipo func(string, string,string) as string Chiama il metodo di una classe di tipo func() as string Specifiche di dettaglio Funzione: Init_JavaVM Descrizione: Lancia la JVM (Java Virtual Machine) bool Init_JavaVM(String szclasspath) szclasspath := Classpath Boolean := Esito dell operazione Note: Questo metodo inizializza un JVM passandogli un classpath come stringa. La JVM viene individuata automaticamente nel registry dalla chiave: HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment Che indica la versione di default del Java Runtime installato. Pag. 4 di 9
Funzione: Init_JavaVM_File Descrizione: Lancia la JVM bool Init_JavaVM(String szclasspathfile) szclasspathfile := Path di un file di testo che contiene il classpath Boolean := Esito dell operazione Note: Questo metodo inizializza un JVM passandogli un classpath in un file di testo La JVM viene individuata automaticamente nel registry dalla chiave: HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment Funzione: Free_JavaVM Descrizione: Libera la memoria della JVM void Free_JavaVM() Nessuno Nessuno Note: Una volta liberata la JVM non può essere più chiamata la Init_JavaVM perché un processo non può lanciare più di una JVM. Questo è un Bug della implementazione di Java, quindi questa funzione non andrebbe mai chiamata se non alla fine del processo. Funzione: New_Java Descrizione: Chiama il costruttore di una classe jobject New_Java(String szclass) szclass := Nome della classe da istanziare Valore di ritorno := Handle dell oggetto istanziato Pag. 5 di 9
Note: il tipo jobject deve essere memorizzato in un tipo long integer Funzione: Call_Java_SS_S Descrizione: Chiama il metodo di una classe di tipo func(string, string) as string String Call_Java_SS_S(jobject jo, String lpfunc, String lppar1, String lppar2) lppar1 := valore parametro 1 lppar2 := valore parametro 2 string := ritorno del metodo Note: il tipo jobject deve essere memorizzato in un tipo long integer,il tipo string è un char *. Call_SJava_V_O Descrizione: Chiama un metodo statico di una classe di tipo func() as object jobject Call_SJava_V_O(String szclass, String lpfunc) szclass := Nome della classe iobject := Handle dell oggetto Note: il tipo jobject è un long integer,il tipo string è un char *. Call_Java_V_B Descrizione: Chiama il metodo di una classe di tipo func() as bool bool Call_Java_V_B(jobject jo, String lpfunc) bool := ritorno del metodo Pag. 6 di 9
Call_Java_SS_B Descrizione: Chiama il metodo di una classe di tipo func(string, string) as bool bool Call_Java_SS_B(jobject jo, Striing lpfunc, String lppar1, String lppar2) lppar1 := valore parametro 1 lppar2 := valore parametro 2 bool := ritorno del metodo Call_Java_S_B Descrizione: Chiama il metodo di una classe di tipo func(string) as bool bool Call_Java_SS_B(jobject jo, Striing lpfunc, String lppar) lppar := valore parametro bool := ritorno del metodo Call_Java I Descrizione: Chiama il metodo di una classe di tipo func() as integer Integer Call_Java_V_B(jobject jo, String lpfunc) integer := ritorno del metodo Pag. 7 di 9
Funzione: Call_Java_SSS_S Descrizione: Chiama il metodo di una classe di tipo func(string, string, string) as string String Call_Java_SSS_S(jobject jo, String lpfunc, String lppar1, String lppar2, String lppar3) lppar1 := valore parametro 1 lppar2 := valore parametro 2 lppar3 := valore parametro 3 string := ritorno del metodo Note: il tipo jobject deve essere memorizzato in un tipo long integer,il tipo string è un char *. Funzione: Call_Java S Descrizione: Chiama il metodo di una classe di tipo func() as string String Call_Java S(jobject jo, String lpfunc) string := ritorno del metodo Note: il tipo jobject deve essere memorizzato in un tipo long integer,il tipo string è un char *. Esempi Un esempio per chiamare un messaggio dell abruzzo char * szfileconf; LPCSTR pstr; szfileconf = "AritServices.conf"; if(!init_javavm_file(szfileconf)) { printf("java NON è partito!\n"); } printf("java VM partito!\n"); jobject jo=null; jo = Call_SJava_V_O("com/deda/arit/client/AritServices", "getinstance"); if(!jo ) { Pag. 8 di 9
printf("metodo non trovato!\n"); Free_JavaVM(); return -1; } Call_Java_SS_B(jo,"login","user1","pwd1"); pstr = Call_Java_SSS_S(jo,"sendMsg","DocumentRepository_ProvideAndRegisterDocumentSetB", "<?xml version=\"1.0\" \"?>< documento principale >","<?xml version=\"1.0\" \"?>< documento allegato >"; if( pstr ) printf("sendmsg ret-->%s\n",pstr); if( Call_Java_V_B(jo,"stop") ) printf("stop!\n"); Free_JavaVM(); printf("free Java VM!\n"); Richiedente Data Firma Approvato da Data Firma Pag. 9 di 9