[英]Problem with using java.nio in Oracle 19c Java Stored Procedures
我正在嘗試從保存到 Oracle 數據庫 19.3 的 java function 連接到我的本地 kafka 服務器。 問題是我無法訪問服務器。 在數據庫跟蹤文件中,我看到 kafka 庫正在使用 java.nio package 連接到服務器。 任何連接嘗試都以“連接被拒絕”結束。 我也承認我可以從命令行工具向主題發送數據。
要檢查來自數據庫的請求是否傳入端口 9092 的 localhost 服務器,我運行了 Hercules TCP 服務器並將其設置為偵聽此端口。 然后,當我使用我的 java function 時,什么也沒有發生。 我編寫了一些“測試”函數來只簡單地連接到我的本地服務器,看看是否有一些網絡問題。 The function where i use java.net package is working and i can see that i receive connection requests from database, but the function where i use java.nio package is returning always "Connection refused"
我已將 java.net.SocketPermission 授予我的數據庫用戶:
exec dbms_java.grant_permission( 'KAFKA', 'SYS:java.net.SocketPermission', '*', 'connect,resolve' );
commit;
Are there needed some special permissions to use java.nio package into oracle database java functions or maybe i'm doing something wrong?
這是我的 java “測試”功能代碼:
CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED "testTCP" AS
import java.net.Socket;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.channels.SocketChannel;
public class testTCP {
public static String conn_nio(){
String response;
try {
InetSocketAddress hostAddress = new InetSocketAddress("localhost", 9092);
SocketChannel client = SocketChannel.open(hostAddress);
client.close();
response = "OK";
}
catch(Exception e){
response = "Message: " + e.getMessage() + " Cause: " + e.getCause();
}
return response;
}
public static String conn_net() {
String response;
try
{
Socket socket = new Socket( "localhost", 9092 );
socket.close();
response = "OK";
}
catch( Exception e )
{
response = "Message: " + e.getMessage() + " Cause: " + e.getCause();
}
return response;
}
}
無法重現。 我將它指向我開始使用的本地 HTTP 服務器的端口 8080
python -m SimpleHTTPServer 8080
兩種連接方法都可以:
CREATE OR REPLACE FUNCTION test_net RETURN VARCHAR2 AS
LANGUAGE JAVA NAME 'testTCP.conn_net() return java.lang.String';
/
CREATE OR REPLACE FUNCTION test_nio RETURN VARCHAR2 AS
LANGUAGE JAVA NAME 'testTCP.conn_nio() return java.lang.String';
/
SELECT test_net FROM DUAL;
OK
SELECT test_nio FROM DUAL;
OK
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.