static void initPLJavaClasses(void) { jfieldID tlField; JNINativeMethod backendMethods[] = { { "isCallingJava", "()Z", Java_org_postgresql_pljava_internal_Backend_isCallingJava }, { "isReleaseLingeringSavepoints", "()Z", Java_org_postgresql_pljava_internal_Backend_isReleaseLingeringSavepoints }, { "_getLibraryPath", "()Ljava/lang/String;", Java_org_postgresql_pljava_internal_Backend__1getLibraryPath }, { "_getConfigOption", "(Ljava/lang/String;)Ljava/lang/String;", Java_org_postgresql_pljava_internal_Backend__1getConfigOption }, { "_getStatementCacheSize", "()I", Java_org_postgresql_pljava_internal_Backend__1getStatementCacheSize }, { "_log", "(ILjava/lang/String;)V", Java_org_postgresql_pljava_internal_Backend__1log }, { "_clearFunctionCache", "()V", Java_org_postgresql_pljava_internal_Backend__1clearFunctionCache }, { "_isCreatingExtension", "()Z", Java_org_postgresql_pljava_internal_Backend__1isCreatingExtension }, { 0, 0, 0 } }; Exception_initialize(); elog(DEBUG2, "checking for a PL/Java Backend class on the given classpath"); s_Backend_class = PgObject_getJavaClass( "org/postgresql/pljava/internal/Backend"); elog(DEBUG2, "successfully loaded Backend class"); PgObject_registerNatives2(s_Backend_class, backendMethods); tlField = PgObject_getStaticJavaField(s_Backend_class, "THREADLOCK", "Ljava/lang/Object;"); JNI_setThreadLock(JNI_getStaticObjectField(s_Backend_class, tlField)); Invocation_initialize(); Exception_initialize2(); SPI_initialize(); Type_initialize(); Function_initialize(); Session_initialize(); PgSavepoint_initialize(); XactListener_initialize(); SubXactListener_initialize(); SQLInputFromChunk_initialize(); SQLOutputToChunk_initialize(); SQLInputFromTuple_initialize(); SQLOutputToTuple_initialize(); InstallHelper_initialize(); s_setTrusted = PgObject_getStaticJavaMethod(s_Backend_class, "setTrusted", "(Z)V"); }
static void String_initialize_codec() { jmethodID string_intern = PgObject_getJavaMethod(s_String_class, "intern", "()Ljava/lang/String;"); jstring empty = JNI_newStringUTF( ""); jclass scharset_class = PgObject_getJavaClass("java/nio/charset/StandardCharsets"); jfieldID scharset_UTF_8 = PgObject_getStaticJavaField(scharset_class, "UTF_8", "Ljava/nio/charset/Charset;"); jobject u8cs = JNI_getStaticObjectField(scharset_class, scharset_UTF_8); jclass charset_class = JNI_getObjectClass(u8cs); jmethodID charset_newDecoder = PgObject_getJavaMethod(charset_class, "newDecoder", "()Ljava/nio/charset/CharsetDecoder;"); jmethodID charset_newEncoder = PgObject_getJavaMethod(charset_class, "newEncoder", "()Ljava/nio/charset/CharsetEncoder;"); jclass decoder_class = PgObject_getJavaClass("java/nio/charset/CharsetDecoder"); jclass encoder_class = PgObject_getJavaClass("java/nio/charset/CharsetEncoder"); jmethodID encoder_abpc = PgObject_getJavaMethod(encoder_class, "averageBytesPerChar", "()F"); jclass result_class = PgObject_getJavaClass("java/nio/charset/CoderResult"); jfieldID overflow = PgObject_getStaticJavaField(result_class, "OVERFLOW", "Ljava/nio/charset/CoderResult;"); jfieldID underflow = PgObject_getStaticJavaField(result_class, "UNDERFLOW", "Ljava/nio/charset/CoderResult;"); jclass buffer_class = PgObject_getJavaClass("java/nio/Buffer"); s_CharsetDecoder_instance = JNI_newGlobalRef(JNI_callObjectMethod(u8cs, charset_newDecoder)); s_CharsetEncoder_instance = JNI_newGlobalRef(JNI_callObjectMethod(u8cs, charset_newEncoder)); s_CharsetDecoder_decode = PgObject_getJavaMethod(decoder_class, "decode", "(Ljava/nio/ByteBuffer;)Ljava/nio/CharBuffer;"); s_CharsetEncoder_encode = PgObject_getJavaMethod(encoder_class, "encode", "(Ljava/nio/CharBuffer;Ljava/nio/ByteBuffer;Z)" "Ljava/nio/charset/CoderResult;"); s_CharsetEncoder_averageBytesPerChar = JNI_callFloatMethod(s_CharsetEncoder_instance, encoder_abpc); s_CoderResult_OVERFLOW = JNI_newGlobalRef( JNI_getStaticObjectField(result_class, overflow)); s_CoderResult_UNDERFLOW = JNI_newGlobalRef( JNI_getStaticObjectField(result_class, underflow)); s_CoderResult_throwException = PgObject_getJavaMethod(result_class, "throwException", "()V"); s_CharBuffer_class = (jclass)JNI_newGlobalRef( PgObject_getJavaClass("java/nio/CharBuffer")); s_CharBuffer_wrap = PgObject_getStaticJavaMethod(s_CharBuffer_class, "wrap", "(Ljava/lang/CharSequence;)Ljava/nio/CharBuffer;"); s_Buffer_position = PgObject_getJavaMethod(buffer_class, "position", "()I"); s_Buffer_remaining = PgObject_getJavaMethod(buffer_class, "remaining", "()I"); s_the_empty_string = JNI_newGlobalRef( JNI_callObjectMethod(empty, string_intern)); s_server_encoding = GetDatabaseEncoding(); s_two_step_conversion = PG_UTF8 != s_server_encoding; uninitialized = false; }