我在Oracle中建了一个java存储过程create or replace and compile java source named javaproc as
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.io.PrintWriter; public class JavaProc {
public static void db_run() {

Socket socket = null;
Connection conn = null; 
String sql = null;
Statement stmt = null;
ResultSet rs = null; List list = new ArrayList();
String docno = "";
OutputStream socketOut = null;
try {
       conn = DriverManager.getConnection("jdbc:default:connection:");
stmt = conn.createStatement(); try {
socket = new Socket("192.168.1.106", 1234);

socketOut = socket.getOutputStream(); socketOut.write(java.net.URLEncoder.encode("asdfasdf" + "\n","UTF-8").getBytes());

// 接收服务器的反馈
BufferedReader br = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
String msg = null;
while ((msg = br.readLine()) != null) {
System.out.println(msg);
}
socketOut.close();
socket.close();
br.close();
} catch (Exception e) { }
}
rs.close();
} catch (Exception e) {
e.printStackTrace();
} }
}
使用触发器调用存储过程,然后存储过程调用java存储过程向客服端发消息,但是会报如下错误:
java.security.AccessControlException: the Permission (java.net.SocketPermission 192.168.1.106:1234 connect,resolve) has not been granted to DA. The PL/SQL to grant this is dbms_java.grant_permission( 'DA', 'SYS:java.net.SocketPermission', '192.168.1.106:1 234', 'connect,resolve' )有一个办法是使用sys用户给da授权
exec dbms_java.grant_permission( 'DA', 'SYS:java.net.SocketPermission', '192.168.1.106:1234', 'connect,resolve' );
commit;但是这样只能一个ip一个ip的授权,有没有其他办法解决 谢谢

解决方案 »

  1.   

    exec dbms_java.grant_permission('DA','SYS:java.net.SocketPermission','*','connect,resolve');
      

  2.   

    网上查的几个教程是这么说的,但我本地木有环境。官方文档:
    http://publib.boulder.ibm.com/infocenter/adiehelp/v5r1m1/index.jsp?topic=%2Fcom.sun.api.doc%2Fjava%2Fnet%2FSocketPermission.html某人Blog:
    http://blog.synyx.de/2011/10/sending-jms-from-oracledb-to-external-activemq-broker/
    国内的Blog:
    http://tangbo645.iteye.com/blog/218513http://www.csharpwin.net/ddwstp/java/javase/1056dr5048.shtml