| 493 | } |
| 494 | |
| 495 | void callWorkload(jobject workload, FDBDatabase* db, const char* method, GenericPromise<bool>&& promise) { |
| 496 | jobject jPromise = nullptr; |
| 497 | try { |
| 498 | auto clazz = getClass("com/apple/foundationdb/testing/AbstractWorkload"); |
| 499 | auto jdb = createDatabase(workload, db); |
| 500 | jPromise = createPromise(std::move(promise)); |
| 501 | env->CallVoidMethod( |
| 502 | workload, |
| 503 | getMethod( |
| 504 | clazz, method, "(Lcom/apple/foundationdb/Database;Lcom/apple/foundationdb/testing/Promise;)V"), |
| 505 | jdb, |
| 506 | jPromise); |
| 507 | env->DeleteLocalRef(jdb); |
| 508 | env->DeleteLocalRef(jPromise); |
| 509 | jPromise = nullptr; |
| 510 | checkException(); |
| 511 | } catch (...) { |
| 512 | if (jPromise) { |
| 513 | env->DeleteLocalRef(jPromise); |
| 514 | } |
| 515 | throw; |
| 516 | } |
| 517 | } |
| 518 | }; |
| 519 | |
| 520 | struct JavaWorkload final : FDBWorkload { |