0

カスタム Java クラスを使用して Oracle から Kafka ブローカーにメッセージを直接投稿しようとしています。そのために、Oracle に必要なライブラリをアップロードし、Oracle 関数/プロシージャを使用して Java 関数を呼び出しています。基本的な Java 関数は正常に動作していますが、Kafka が初期化され、キャッチされていない例外をスローする関数が使用されています。関数本体全体を try-catch ブロック内に配置しても、カスタマイズされた例外をメッセージとして取得できません。

JVM バージョン 1.8 を搭載した Oracle 12C を使用しています。

このメッセージは、Java 関数呼び出し時に Oracle SQL プロンプトにポップアップ表示されました (java.lang.NoClassDefFound エラー)。

カスタムクラスのjarファイルを作成し、それを尊敬されるライブラリとともにOracle DBにアップロードしました。以下のコマンドを使用してライブラリ ファイルをアップロードしました。

loadjava -u <user>/<Password>@DB -resolve <library>.jar 

Kafka Producer を初期化してメッセージの送信を開始する方法をオラクル内から教えてください

Oracle DB 内にロードされている Java 関数をデバッグする方法。

私のカスタムクラスは以下のとおりです

public class KafkaPublisher { 
static ProducerRecord<String, String> PR = null; 
static Producer<String, String> producer = null; 
static Properties prop = new Properties(); 

public static void init() { 
prop.put("bootstrap.servers", "111.11.11.11:9092"); 
prop.put("acks", "1"); 
prop.put("retries", "0"); 
prop.put("batch.size", "16384"); 
prop.put("linger.ms", "1"); 
prop.put("buffer.memory", "33554432"); 
prop.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer"); 
prop.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer"); 

} 

public static String push(String data) { 
String response = "No responce"; 
init(); 
try { 
producer = new KafkaProducer<String, String>(prop); 
PR = new ProducerRecord<String, String>("topic1", data); 
Future<RecordMetadata> future = producer.send(PR); 
RecordMetadata rMetaData = future.get(); 
response = "Current Offset: " + rMetaData.offset(); 
} catch (Exception e) { 
response = "Message: " + e.getMessage() + " Cause: " + e.getCause(); 
} 
return response; 
} 

public static String getProperties(String msg) { 
return "My message: " + msg + prop.toString(); 
} 
}

関数 getProperties(String msg) は正常に動作していますが、関数 push(String data) は動作していません。

4

1 に答える 1