From b821aa395a1d2155207a8268edc8b9d94df683cb Mon Sep 17 00:00:00 2001 From: Martin Vajnar Date: Fri, 26 Jul 2013 09:53:38 +0200 Subject: [PATCH] Revert "JORTE: switch from deserialize function to endianness callback" This reverts commit fe36c69fd0d022fafc9acf3a51ca1ba780978f35. --- orte/include/jorte/jorte_typedefs_defines.h | 8 --- orte/libjorte/JORTETypeRegisterAdd.c | 69 ++++++++------------- orte/libjorte/onLoad.c | 3 + 3 files changed, 28 insertions(+), 52 deletions(-) diff --git a/orte/include/jorte/jorte_typedefs_defines.h b/orte/include/jorte/jorte_typedefs_defines.h index 37230ca..e6f50fa 100644 --- a/orte/include/jorte/jorte_typedefs_defines.h +++ b/orte/include/jorte/jorte_typedefs_defines.h @@ -37,14 +37,6 @@ typedef struct } JORTEDomainEventsContext_t; -typedef struct -{ - JavaVM *jvm; - jobject obj_buf; // byte buffer object - CDR_Endianness cur_endian; -} JORTESetEndiannessContext_t; - - typedef enum { ON_REG_FAIL = 1, ON_MGR_NEW = 2, diff --git a/orte/libjorte/JORTETypeRegisterAdd.c b/orte/libjorte/JORTETypeRegisterAdd.c index d3d2dca..f5e6718 100644 --- a/orte/libjorte/JORTETypeRegisterAdd.c +++ b/orte/libjorte/JORTETypeRegisterAdd.c @@ -25,29 +25,29 @@ * */ -#include #include +#include // library header file's path -#include "orte_all.h" +#include "orte.h" // pregenerated header #include "jorte/org_ocera_orte_DomainApp.h" - -#include "jorte/jorte_typedefs_defines.h" +#include "jorte/jorte_protos_api.h" #include "jorte/4all.h" -void set_order(CDR_Codec *cdrCodec, void *param) { +extern JavaVM *javavm; +static jobject byte_buf; + +void deserialize(CDR_Codec *cdrCodec, void *instance) { JNIEnv *env = 0; jclass cls = 0; jfieldID fid = 0; jmethodID mid = 0; jobject obj_bo = 0; - - JORTESetEndiannessContext_t *ctx = (JORTESetEndiannessContext_t*) param; //set byte order only once - if(cdrCodec->data_endian != ctx->cur_endian) { + if(byte_buf) { // get environment - (*ctx->jvm)->AttachCurrentThread(ctx->jvm, (void **)&env, NULL); + (*javavm)->AttachCurrentThread(javavm, (void **)&env, NULL); if(env == 0) { #ifdef TEST_STAGE @@ -67,14 +67,12 @@ void set_order(CDR_Codec *cdrCodec, void *param) { cls, "BIG_ENDIAN", "Ljava/nio/ByteOrder;"); - ctx->cur_endian = BigEndian; } else { fid = (*env)->GetStaticFieldID(env, cls, "LITTLE_ENDIAN", "Ljava/nio/ByteOrder;"); - ctx->cur_endian = LittleEndian; } if(fid == 0) { #ifdef TEST_STAGE @@ -90,7 +88,7 @@ void set_order(CDR_Codec *cdrCodec, void *param) { // set byte order to ByteBuffer // get BB class - cls = (*env)->GetObjectClass(env, ctx->obj_buf); + cls = (*env)->GetObjectClass(env, byte_buf); if(cls == 0) { #ifdef TEST_STAGE @@ -110,15 +108,24 @@ void set_order(CDR_Codec *cdrCodec, void *param) { } // set ByteOrder - if((*env)->CallObjectMethod(env,ctx->obj_buf,mid,obj_bo) == 0) + if((*env)->CallObjectMethod(env,byte_buf,mid,obj_bo) == 0) { #ifdef TEST_STAGE printf(":!c: set byte order failed.. \n"); #endif } - (*ctx->jvm)->DetachCurrentThread(ctx->jvm); + // delete global reference + (*env)->DeleteGlobalRef(env, byte_buf); + byte_buf = 0; + + (*javavm)->DetachCurrentThread(javavm); } + + //copy over the message instance + memcpy(instance, + cdrCodec->buffer, + cdrCodec->buf_len); } JNIEXPORT jint JNICALL @@ -128,46 +135,20 @@ Java_org_ocera_orte_DomainApp_jORTETypeRegisterAdd const char *name; int b; - JORTESetEndiannessContext_t *ctx = 0; - - jobject byte_buf = 0; - JavaVM *jvm = 0; - - // TODO free() ! - ctx = (JORTESetEndiannessContext_t*) malloc(sizeof(JORTESetEndiannessContext_t)); - if(ctx == 0) { - #ifdef TEST_STAGE - printf(":c!: ctx = NULL\n"); - #endif - } - // create global reference for ByteBuffer - // TODO delete global reference - byte_buf = (*env)->NewGlobalRef(env, obj_bb); - ctx->obj_buf = byte_buf; - // get jvm - b = (*env)->GetJavaVM(env,&jvm); - if (b < 0) - { - printf(":!c: getJavaVM() failed! \n"); - return 0; - } - ctx->jvm = jvm; - ctx->cur_endian = FLAG_ENDIANNESS; - // get type name from JAVA env name = (*env)->GetStringUTFChars(env,jname,0); // call ORTE function b = ORTETypeRegisterAdd((ORTEDomain *) handle, name, NULL, + (ORTETypeDeserialize)deserialize, NULL, - NULL, - (unsigned int) jlength, - (ORTETypeProcessEndianness) set_order, - (void*) ctx); + (unsigned int) jlength); // free memmory space (*env)->ReleaseStringUTFChars(env,jname,name); + byte_buf = (*env)->NewGlobalRef(env, obj_bb); + #ifdef TEST_STAGE printf(":c: jORTETypeRegisterAdd vraci %d [%d = ORTE_OK, %d = ORTE_BAD_HANDLE] \n", b,ORTE_OK,ORTE_BAD_HANDLE); diff --git a/orte/libjorte/onLoad.c b/orte/libjorte/onLoad.c index f7b8e48..21d56b7 100644 --- a/orte/libjorte/onLoad.c +++ b/orte/libjorte/onLoad.c @@ -5,6 +5,8 @@ static jmethodID findClassM; static jmethodID findLoadedClassM; static jobject classLoader; +JavaVM *javavm; + JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) { JNIEnv *env; jclass testCl; @@ -13,6 +15,7 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) { jmethodID getClassLoader; (*vm)->GetEnv(vm, (void **)&env, JNI_VERSION_1_6); + javavm = vm; testCl = (*env)->FindClass(env, "org/ocera/orte/JOrte"); clClass = (*env)->FindClass(env, "java/lang/Class"); -- 2.39.2