Changeset 364 for trunk/zoo-project/zoo-kernel/service_internal_java.c
- Timestamp:
- Sep 29, 2012, 3:59:06 PM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/zoo-project/zoo-kernel/service_internal_java.c
r360 r364 40 40 classpath=(char*) malloc((strlen(ntmp)+strlen(tmp->value)+strlen(cclasspath)+4)*sizeof(char)); 41 41 oclasspath=(char*) malloc((strlen(ntmp)+strlen(tmp->value)+strlen(cclasspath)+22)*sizeof(char)); 42 #ifndef WIN32 42 43 sprintf(classpath,"%s/%s/:%s",ntmp,tmp->value,cclasspath); 44 #else 45 sprintf(classpath,"%s/%s/;%s",ntmp,tmp->value,cclasspath); 46 #endif 43 47 } 44 48 else{ … … 54 58 #endif 55 59 60 #ifdef WIN32 61 JavaVMOption options[2]; 62 #else 56 63 JavaVMOption options[1]; 64 #endif 57 65 JavaVMInitArgs vm_args; 58 66 JavaVM *jvm; … … 62 70 jfieldID fid; 63 71 jobject jobj; 64 jclass cls,cls_gr; 72 jclass cls; 73 #ifdef JAVA7 74 jobject cls_gr; 75 #else 76 jclass cls_gr; 77 #endif 65 78 int i; 66 79 67 80 options[0].optionString = strdup(oclasspath); 81 #ifdef WIN32 82 options[1].optionString = "-Xmx512M"; 83 #endif 68 84 69 85 JNI_GetDefaultJavaVMInitArgs(&vm_args); 70 86 vm_args.version = JNI_VERSION_1_6; 71 87 vm_args.options = options; 88 #ifdef WIN32 89 vm_args.nOptions = 2; 90 #else 72 91 vm_args.nOptions = 1; 73 vm_args.ignoreUnrecognized = JNI_FALSE; 92 #endif 93 vm_args.ignoreUnrecognized = JNI_TRUE; 74 94 75 95 result = JNI_CreateJavaVM(&jvm,(void **)&env, &vm_args); … … 79 99 } 80 100 #ifdef DEBUG 81 else 101 else 82 102 fprintf(stderr,"JAVA VM Started\n"); 83 103 #endif 84 104 85 105 tmp=getMap(s->content,"serviceProvider"); 106 #ifdef JAVA7 107 cls = env->FindClass(tmp->value); 108 cls_gr = env->NewGlobalRef(cls); 109 #else 86 110 cls = (*env)->FindClass(env,tmp->value); 87 111 cls_gr = (*env)->NewGlobalRef(env, cls); 112 #endif 88 113 if( cls == NULL ) { 89 114 char pbt[10240]; 90 115 sprintf(pbt,"can't find class %s\n",tmp->value); 116 fprintf(stderr,pbt); 117 fflush(stderr); 91 118 map* err=createMap("text",pbt); 92 119 addToMap(err,"code","NoApplicableCode"); … … 94 121 freeMap(&err); 95 122 free(err); 123 #ifdef JAVA7 124 (*jvm).DestroyJavaVM(); 125 #else 96 126 (*jvm)->DestroyJavaVM(jvm); 127 #endif 97 128 return -1; 98 129 } … … 104 135 105 136 if (cls != NULL) { 137 #ifdef JAVA7 138 (*env).ExceptionClear(); 139 pmid=(*env).GetStaticMethodID(cls, s->name, "(Ljava/util/HashMap;Ljava/util/HashMap;Ljava/util/HashMap;)I"); 140 #else 106 141 (*env)->ExceptionClear(env); 107 142 pmid=(*env)->GetStaticMethodID(env,cls_gr, s->name, "(Ljava/util/HashMap;Ljava/util/HashMap;Ljava/util/HashMap;)I"); 143 #endif 108 144 if (pmid!=0){ 109 145 #ifdef DEBUG … … 112 148 jclass scHashMapClass,scHashMap_class; 113 149 jmethodID scHashMap_constructor; 150 #ifdef JAVA7 151 scHashMapClass = (*env).FindClass("java/util/HashMap"); 152 scHashMap_class = (jclass)(*env).NewGlobalRef(scHashMapClass); 153 scHashMap_constructor = (*env).GetMethodID(scHashMap_class, "<init>", "()V"); 154 #else 114 155 scHashMapClass = (*env)->FindClass(env, "java/util/HashMap"); 115 156 scHashMap_class = (*env)->NewGlobalRef(env, scHashMapClass); 116 157 scHashMap_constructor = (*env)->GetMethodID(env, scHashMap_class, "<init>", "()V"); 158 #endif 117 159 /** 118 160 * The 3 standard parameter for each services … … 123 165 jint pValue=0; 124 166 167 #ifdef JAVA7 168 pValue=(*env).CallStaticIntMethod(cls,pmid,arg1,arg2,arg3); 169 #else 125 170 pValue=(*env)->CallStaticIntMethod(env,cls,pmid,arg1,arg2,arg3); 171 #endif 126 172 if (pValue != (jint)NULL){ 127 173 res=pValue; … … 146 192 FILE* new_stdout=fopen(tmps,"w+"); 147 193 dup2(fileno(new_stdout),fileno(stdout)); 194 #ifdef JAVA7 195 (*env).ExceptionDescribe(); 196 #else 148 197 (*env)->ExceptionDescribe(env); 198 #endif 149 199 fflush(stdout); 150 200 dup2(old_stdout,fileno(stdout)); … … 152 202 long flen=ftell(new_stdout); 153 203 rewind(new_stdout); 154 char tmps1[flen];204 char *tmps1=(char*)malloc((flen+1)*sizeof(char)); 155 205 fread(tmps1,flen,1,new_stdout); 156 206 fclose(new_stdout); 157 char pbt[100+flen];207 char *pbt=(char*)malloc((100+flen+1)*sizeof(char)); 158 208 sprintf(pbt,"Unable to run your java process properly. Server returns : %s",tmps1); 159 209 map* err=createMap("text",pbt); … … 162 212 freeMap(&err); 163 213 free(err); 214 #ifdef JAVA7 215 (*jvm).DestroyJavaVM(); 216 #else 164 217 (*jvm)->DestroyJavaVM(jvm); 218 #endif 165 219 return -1; 166 220 } … … 173 227 freeMap(&err); 174 228 free(err); 229 #ifdef JAVA7 230 (*jvm).DestroyJavaVM(); 231 #else 175 232 (*jvm)->DestroyJavaVM(jvm); 233 #endif 176 234 return -1; 177 235 } … … 183 241 freeMap(&err); 184 242 free(err); 243 #ifdef JAVA7 244 (*jvm).DestroyJavaVM(); 245 #else 185 246 (*jvm)->DestroyJavaVM(jvm); 247 #endif 186 248 return -1; 187 249 } 250 #ifdef JAVA7 251 (*jvm).DestroyJavaVM(); 252 #else 188 253 (*jvm)->DestroyJavaVM(jvm); 254 #endif 189 255 return res; 190 256 } … … 193 259 jobject scObject,scObject1; 194 260 if(scHashMap_constructor!=NULL){ 261 #ifdef JAVA7 262 scObject = (*env).NewObject(scHashMap_class, scHashMap_constructor); 263 #else 195 264 scObject = (*env)->NewObject(env, scHashMap_class, scHashMap_constructor); 265 #endif 196 266 jmethodID put_mid = 0; 197 267 268 #ifdef JAVA7 269 put_mid = (*env).GetMethodID(scHashMapClass, "put", 270 "(Ljava/lang/Object;Ljava/lang/Object;)" 271 "Ljava/lang/Object;"); 272 #else 198 273 put_mid = (*env)->GetMethodID(env,scHashMapClass, "put", 199 274 "(Ljava/lang/Object;Ljava/lang/Object;)" 200 275 "Ljava/lang/Object;"); 276 #endif 201 277 maps* tmp=t; 202 278 while(tmp!=NULL){ 203 279 map* tmap=getMapType(tmp->content); 204 280 map* tmp1=tmp->content; 281 #ifdef JAVA7 282 scObject1 = (*env).NewObject(scHashMap_class, scHashMap_constructor); 283 #else 205 284 scObject1 = (*env)->NewObject(env, scHashMap_class, scHashMap_constructor); 285 #endif 206 286 map* sizeV=getMap(tmp1,"size"); 207 287 map* isArray=getMap(tmp1,"isArray"); … … 211 291 if(isArray==NULL){ 212 292 if(sizeV!=NULL && strcmp(tmp1->name,"value")==0){ 293 #ifdef JAVA7 294 jbyteArray tmpData=(*env).NewByteArray(atoi(sizeV->value)); 295 (*env).SetByteArrayRegion(tmpData,0,atoi(sizeV->value),(const jbyte *)tmp1->value); 296 (*env).CallObjectMethod(scObject1, put_mid, (*env).NewStringUTF(tmp1->name), tmpData); 297 #else 213 298 jbyteArray tmpData=(*env)->NewByteArray(env,atoi(sizeV->value)); 214 299 (*env)->SetByteArrayRegion(env,tmpData,0,atoi(sizeV->value),tmp1->value); 215 300 (*env)->CallObjectMethod(env,scObject1, put_mid, (*env)->NewStringUTF(env,tmp1->name), tmpData); 301 #endif 216 302 }else 303 #ifdef JAVA7 304 (*env).CallObjectMethod(scObject1, put_mid, (*env).NewStringUTF(tmp1->name), (*env).NewStringUTF(tmp1->value)); 305 #else 217 306 (*env)->CallObjectMethod(env,scObject1, put_mid, (*env)->NewStringUTF(env,tmp1->name), (*env)->NewStringUTF(env,tmp1->value)); 307 #endif 218 308 } 219 309 else{ … … 224 314 jmethodID scArrayList_constructor; 225 315 jobject scObject2,scObject3,scObject4; 316 #ifdef JAVA7 317 scArrayListClass = (*env).FindClass("java/util/ArrayList"); 318 scArrayList_class = (jclass)(*env).NewGlobalRef(scArrayListClass); 319 scArrayList_constructor = (*env).GetMethodID(scArrayList_class, "<init>", "()V"); 320 jmethodID add_mid = 0; 321 scObject2 = (*env).NewObject(scArrayList_class, scArrayList_constructor); 322 scObject3 = (*env).NewObject(scArrayList_class, scArrayList_constructor); 323 scObject4 = (*env).NewObject(scArrayList_class, scArrayList_constructor); 324 325 add_mid = (*env).GetMethodID(scArrayListClass, 326 "add","(Ljava/lang/Object;)Z"); 327 #else 226 328 scArrayListClass = (*env)->FindClass(env, "java/util/ArrayList"); 227 329 scArrayList_class = (*env)->NewGlobalRef(env, scArrayListClass); … … 234 336 add_mid = (*env)->GetMethodID(env,scArrayListClass, 235 337 "add","(Ljava/lang/Object;)Z"); 236 338 #endif 237 339 int i; 238 340 … … 243 345 244 346 if(sMap!=NULL && vMap!=NULL && strncmp(vMap->name,"value",5)==0){ 347 #ifdef JAVA7 348 jbyteArray tmpData=(*env).NewByteArray(atoi(sMap->value)); 349 (*env).SetByteArrayRegion(tmpData,0,atoi(sMap->value),(const jbyte *)vMap->value); 350 (*env).CallObjectMethod(scObject2, add_mid, tmpData); 351 #else 245 352 jbyteArray tmpData=(*env)->NewByteArray(env,atoi(sMap->value)); 246 353 (*env)->SetByteArrayRegion(env,tmpData,0,atoi(sMap->value),vMap->value); 247 354 (*env)->CallObjectMethod(env,scObject2, add_mid, tmpData); 355 #endif 248 356 }else{ 357 #ifdef JAVA7 358 jobject tmpData=(*env).NewStringUTF(vMap->value); 359 (*env).CallObjectMethod(scObject2, add_mid, tmpData); 360 #else 249 361 jobject tmpData=(*env)->NewStringUTF(env,vMap->value); 250 362 (*env)->CallObjectMethod(env,scObject2, add_mid, tmpData); 363 #endif 251 364 } 252 365 253 366 } 254 367 368 #ifdef JAVA7 369 (*env).CallObjectMethod(scObject1, put_mid, (*env).NewStringUTF(tmp1->name), scObject2); 370 #else 255 371 (*env)->CallObjectMethod(env,scObject1, put_mid, (*env)->NewStringUTF(env,tmp1->name), scObject2); 256 372 #endif 373 257 374 } 258 375 } 259 376 else 377 #ifdef JAVA7 378 (*env).CallObjectMethod(scObject1, put_mid, (*env).NewStringUTF(tmp1->name), (*env).NewStringUTF(tmp1->value)); 379 #else 260 380 (*env)->CallObjectMethod(env,scObject1, put_mid, (*env)->NewStringUTF(env,tmp1->name), (*env)->NewStringUTF(env,tmp1->value)); 381 #endif 261 382 tmp1=tmp1->next; 262 383 } 384 #ifdef JAVA7 385 (*env).CallObjectMethod(scObject, put_mid, (*env).NewStringUTF(tmp->name), scObject1); 386 #else 263 387 (*env)->CallObjectMethod(env,scObject, put_mid, (*env)->NewStringUTF(env,tmp->name), scObject1); 388 #endif 264 389 tmp=tmp->next; 265 390 } … … 292 417 return NULL; 293 418 } 419 #ifdef JAVA7 420 entrySet_mid = (*env).GetMethodID(scHashMapClass, "entrySet", "()Ljava/util/Set;"); 421 containsKey_mid = (*env).GetMethodID(scHashMapClass, "containsKey", "(Ljava/lang/Object;)Z"); 422 get_mid = (*env).GetMethodID(scHashMapClass, "get", "(Ljava/lang/Object;)Ljava/lang/Object;"); 423 #else 294 424 entrySet_mid = (*env)->GetMethodID(env, scHashMapClass, "entrySet", "()Ljava/util/Set;"); 295 425 containsKey_mid = (*env)->GetMethodID(env, scHashMapClass, "containsKey", "(Ljava/lang/Object;)Z"); 296 426 get_mid = (*env)->GetMethodID(env, scHashMapClass, "get", "(Ljava/lang/Object;)Ljava/lang/Object;"); 427 #endif 297 428 298 429 if(containsKey_mid==0){ … … 319 450 #endif 320 451 452 #ifdef JAVA7 453 scSetClass = (*env).FindClass("java/util/Set"); 454 iterator_mid = (*env).GetMethodID(scSetClass, "iterator", "()Ljava/util/Iterator;"); 455 #else 321 456 scSetClass = (*env)->FindClass(env, "java/util/Set"); 322 457 iterator_mid = (*env)->GetMethodID(env, scSetClass, "iterator", "()Ljava/util/Iterator;"); 458 #endif 323 459 #ifdef DEBUG 324 460 fprintf(stderr,"mapsFromHashMap 1 (%d) \n",iterator_mid); 325 461 #endif 326 462 463 #ifdef JAVA7 464 scIteratorClass = (*env).FindClass("java/util/Iterator"); 465 hasNext_mid = (*env).GetMethodID(scIteratorClass, "hasNext", "()Z"); 466 #else 327 467 scIteratorClass = (*env)->FindClass(env, "java/util/Iterator"); 328 468 hasNext_mid = (*env)->GetMethodID(env, scIteratorClass, "hasNext", "()Z"); 469 #endif 470 329 471 #ifdef DEBUG 330 472 fprintf(stderr,"mapsFromHashMap 2 (%d)\n",hasNext_mid); 331 473 #endif 474 475 #ifdef JAVA7 476 next_mid = (*env).GetMethodID(scIteratorClass, "next", "()Ljava/lang/Object;"); 477 #else 332 478 next_mid = (*env)->GetMethodID(env, scIteratorClass, "next", "()Ljava/lang/Object;"); 479 #endif 333 480 #ifdef DEBUG 334 481 fprintf(stderr,"mapsFromHashMap 3 (%d)\n",next_mid); 335 482 #endif 336 483 484 #ifdef JAVA7 485 scMapEntryClass = (*env).FindClass("java/util/Map$Entry"); 486 getKey_mid = (*env).GetMethodID(scMapEntryClass, "getKey", "()Ljava/lang/Object;"); 487 #else 337 488 scMapEntryClass = (*env)->FindClass(env, "java/util/Map$Entry"); 338 489 getKey_mid = (*env)->GetMethodID(env, scMapEntryClass, "getKey", "()Ljava/lang/Object;"); 490 #endif 339 491 #ifdef DEBUG 340 492 fprintf(stderr,"mapsFromHashMap 4 (%d)\n",getKey_mid); 341 493 #endif 494 #ifdef JAVA7 495 getValue_mid = (*env).GetMethodID(scMapEntryClass, "getValue", "()Ljava/lang/Object;"); 496 #else 342 497 getValue_mid = (*env)->GetMethodID(env, scMapEntryClass, "getValue", "()Ljava/lang/Object;"); 498 #endif 343 499 #ifdef DEBUG 344 500 fprintf(stderr,"mapsFromHashMap 5 (%d)\n",getValue_mid); 345 501 #endif 346 502 503 #ifdef JAVA7 504 jobject final_set=(*env).CallObjectMethod(t,entrySet_mid); 505 jobject final_iterator=(*env).CallObjectMethod(final_set,iterator_mid); 506 #else 347 507 jobject final_set=(*env)->CallObjectMethod(env,t,entrySet_mid); 348 508 jobject final_iterator=(*env)->CallObjectMethod(env,final_set,iterator_mid); 349 509 #endif 350 510 351 511 maps* final_res=NULL; 352 512 map* res=NULL; 513 #ifdef JAVA7 514 while((*env).CallBooleanMethod(final_iterator,hasNext_mid)){ 515 jobject tmp=(*env).CallObjectMethod(final_iterator,next_mid); 516 517 jobject imap=(*env).CallObjectMethod(tmp,getValue_mid); 518 jobject set=(*env).CallObjectMethod(imap,entrySet_mid); 519 jobject iterator=(*env).CallObjectMethod(set,iterator_mid); 520 521 #else 353 522 while((*env)->CallBooleanMethod(env,final_iterator,hasNext_mid)){ 354 523 jobject tmp=(*env)->CallObjectMethod(env,final_iterator,next_mid); … … 358 527 jobject iterator=(*env)->CallObjectMethod(env,set,iterator_mid); 359 528 529 #endif 360 530 int size=-1; 531 #ifdef JAVA7 532 if((*env).CallBooleanMethod(imap,containsKey_mid,(*env).NewStringUTF("size"))){ 533 jobject sizeV=(*env).CallObjectMethod(imap, get_mid,(*env).NewStringUTF("size")); 534 const char* sizeVS=(*env).GetStringUTFChars((jstring)sizeV, NULL); 535 #else 361 536 if((*env)->CallBooleanMethod(env,imap,containsKey_mid,(*env)->NewStringUTF(env,"size"))){ 362 537 jobject sizeV=(*env)->CallObjectMethod(env, imap, get_mid,(*env)->NewStringUTF(env,"size")); 363 538 const char* sizeVS=(*env)->GetStringUTFChars(env, sizeV, NULL); 539 #endif 364 540 size=atoi(sizeVS); 365 541 fprintf(stderr,"SIZE : %s\n",sizeVS); 542 #ifdef JAVA7 543 (*env).ReleaseStringUTFChars((jstring)sizeV, sizeVS); 544 #else 366 545 (*env)->ReleaseStringUTFChars(env, sizeV, sizeVS); 546 #endif 367 547 } 368 548 549 #ifdef JAVA7 550 while((*env).CallBooleanMethod(iterator,hasNext_mid)){ 551 jobject tmp1=(*env).CallObjectMethod(iterator,next_mid); 552 jobject jk=(*env).CallObjectMethod(tmp1,getKey_mid); 553 jobject jv=(*env).CallObjectMethod(tmp1,getValue_mid); 554 555 const char* jkd=(*env).GetStringUTFChars((jstring)jk, NULL); 556 #else 369 557 while((*env)->CallBooleanMethod(env,iterator,hasNext_mid)){ 370 558 jobject tmp1=(*env)->CallObjectMethod(env,iterator,next_mid); … … 373 561 374 562 const char* jkd=(*env)->GetStringUTFChars(env, jk, NULL); 563 #endif 375 564 if(size>=0 && strcmp(jkd,"value")==0){ 565 #ifdef JAVA7 566 jobject value=(jobject)(*env).GetByteArrayElements((jbyteArray)jv, NULL); 567 #else 376 568 jobject value=(*env)->GetByteArrayElements(env, jv, NULL); 569 #endif 377 570 if(res==NULL){ 378 571 res=createMap(jkd,""); … … 390 583 } 391 584 else{ 585 #ifdef JAVA7 586 const char* jvd=(*env).GetStringUTFChars((jstring)jv, NULL); 587 #else 392 588 const char* jvd=(*env)->GetStringUTFChars(env, jv, NULL); 589 #endif 393 590 if(res==NULL){ 394 591 res=createMap(jkd,jvd); … … 396 593 addToMap(res,jkd,jvd); 397 594 } 595 #ifdef JAVA7 596 (*env).ReleaseStringUTFChars((jstring)jv, jvd); 597 #else 398 598 (*env)->ReleaseStringUTFChars(env, jv, jvd); 599 #endif 399 600 } 400 601 602 #ifdef JAVA7 603 (*env).ReleaseStringUTFChars((jstring)jk, jkd); 604 #else 401 605 (*env)->ReleaseStringUTFChars(env, jk, jkd); 606 #endif 402 607 403 608 } 609 #ifdef JAVA7 610 jobject jk=(*env).CallObjectMethod(tmp,getKey_mid); 611 #else 404 612 jobject jk=(*env)->CallObjectMethod(env,tmp,getKey_mid); 613 #endif 405 614 maps* cmap=(maps*)malloc(sizeof(maps)); 615 #ifdef JAVA7 616 cmap->name=(char*)(*env).GetStringUTFChars((jstring)jk, NULL); 617 #else 406 618 cmap->name=(*env)->GetStringUTFChars(env, jk, NULL); 619 #endif 407 620 #ifdef DEBUG 408 621 fprintf(stderr," / %s \n",cmap->name);
Note: See TracChangeset
for help on using the changeset viewer.