oracle实时调用java http接口

oracle实时调用java http接口
当表中insert时,触发器调用存储过程,存储过程调用java http

创建java source

备注:(plsql普通用户登陆创建java source)
新建java source,代码:

create or replace and compile java source named jym as
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;

public class JYM {

	public static void sendGet(String url,String title){
		String result ="";
		BufferedReader in = null;
		try{
		String urlName = url+"?title="+title;
		URL realUrl = new URL(urlName);
		URLConnection conn = realUrl.openConnection();
		conn.setRequestProperty("accept", "*/*");
		conn.setRequestProperty("connection", "Keep-Alive");
		conn.connect();
		in= new BufferedReader(new InputStreamReader(conn.getInputStream()));
		String line;
		while((line = in.readLine())!=null){
		result += "/n"+line;
		}
		}catch(Exception e){
		System.out.println("发送GET请求出现异常"+e);
		e.printStackTrace();
		}
		finally{
		try{
		if(in !=null){
		in.close();
		}
		}catch(Exception e){
		e.printStackTrace();
		}
		}
		}
}

创建存储过程

带返回值和不带返回值的方法请查看具体创建存储过程的方法
代码如下:

create or replace procedure lqHttp(ip varchar2,title varchar2)
as language java name
'JYM.sendGet(java.lang.String,java.lang.String)';

创建表:

create table message_notion(
 id number(2),
 name varchar2(20),
 title varchar2(20)
)

插入:

insert into message_notion (id,name,title) values (89,'lihq','test');

创建触发器:

create or replace trigger insterMessageNotionAfter
after  insert on message_notion
for each row
begin
lqHttp('http://ip:端口号/Sp/helloworld',:new.title);
end insterMessageNotionAfter;

备注:ip+端口号 必须要oracle能访问到ip,我这边是oracle单独服务器,项目单独服务器,必须开启端口权限,可以访问。

insert一条数据:

insert into message_notion (id,name,title) values (9,'lihq','test');

查看接口没有接收到数据,这个是因为oracle访问网络通信需要添加ACl控制权限。
切换登陆名,用sys登陆plsql ,开始添加ACL网络权限:

BEGIN
    dbms_network_acl_admin.create_acl(acl         => 'lhqhttp.xml',
                                      DESCRIPTION => 'Normal Access',
                                      principal   => 'SCOTT',
                                      is_grant    => TRUE,
                                      PRIVILEGE   => 'connect',
                                      start_date  => NULL,
                                      end_date    => NULL);
END;

principal :用户名,刚才添加java source和触发器的用户名

我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:
is_grant :表示有权限

begin  dbms_network_acl_admin.add_privilege(acl     => 'lhqhttp.xml',
                                         principal  => 'SCOTT',
                                         is_grant   => TRUE,
                                         privilege  => 'connect',
                                         start_date => null,
                                         end_date   => null);
end;
begin
    dbms_network_acl_admin.assign_acl(acl        => 'lhqhttp.xml',
                                      host       => '120.78.212.39',
                                      lower_port => 80,
                                      upper_port => NULL);
end;

这三步执行完之后,查看ACl控制权限

SELECT any_path
	FROM resource_view 
where any_path  like '/sys/acls/%.xml';

SELECT  acl,
       principal,
       privilege,
       is_grant,
       TO_CHAR(start_date, 'DD-MON-YYYY') AS start_date,
       TO_CHAR(end_date, 'DD-MON-YYYY') AS end_date
  FROM dba_network_acl_privileges;

用SCOTT用户执行insert。
如果能查看到则正常,打不开可以直接执行上边insert数据,看看接口是否调用成功。
我添加了ACL控制权限接口调用成功,但是sql查询权限一直看不到acl,不知道是不是没有重启的原因。
代码下载链接:
oracle和java代码
(积分自动设置5,不知道咋回事,需要的朋友可以留言)

你可能感兴趣的:(oracle,oracle,触发器,存储过程,url_http)