안녕하세요,
저는 Oracle java stored procedure 에서 FTP로 접속해 파일을 가져오려고 합니다. 이클립스에서 같은 java 코드로 실행하면 잘 실행 되는데 java 코드를 Oracle java stored procedure 로 만들어 실행하면 아래 처럼 오류가 나옵니다. 그리고 아래 나오는데로 permission 을 부여해 주고 다시 실행하면 계속 돌기만 하고 실행이 안됩니다. (서비스 강제 종료 시킴ㅠㅠ)
해결 방법이 있으면 조언 부탁드립니다.
오류 보고 - ORA-29532: 자바 호출이 잡혀지지 않은 자바 예외로 인해 종료되었습니다: java.security.AccessControlException: the Permission (java.net.SocketPermission localhost:1024- listen,resolve) has not been granted to USER_XXX. The PL/SQL to grant this is dbms_java.grant_permission( 'USER_XXX', 'SYS:java.net.SocketPermission', 'localhost:1024-', 'listen,resolve' ) 29532. 00000 - "Java call terminated by uncaught Java exception: %s" *Cause: A Java exception or error was signaled and could not be resolved by the Java code. *Action: Modify Java code, if this behavior is not intended.
java 소스
create or replace and compile java source named "FtpTransfer" as import java.io.*; import java.net.*; import org.apache.commons.net.ftp.*; public class FtpTransfer { public static void ftpTransfer(String fileFolder) { FTPClient ftp = null; try { ftp = new FTPClient(); ftp.setControlEncoding("UTF-8"); ftp.connect("SERVERNAME", PORTNUMBER); ftp.login("ID", "PASSWORD"); ftp.changeWorkingDirectory("/test_dir"); File f = new File(fileFolder, "test.txt"); FileOutputStream fos = null; try { fos = new FileOutputStream(f); boolean isSuccess = ftp.retrieveFile("test.txt", fos); if (isSuccess) { System.out.println("isSuccess"); } else { System.out.println("fail"); } } catch(IOException ex) { System.out.println(ex.getMessage()); } finally { if (fos != null) { try { fos.close(); } catch(IOException ex) {System.out.println(ex.getMessage());} } } ftp.logout(); } catch (SocketException e) { System.out.println("Socket:"+e.getMessage()); } catch (IOException e) { System.out.println("IO:"); e.printStackTrace(); } } }