.net webservice studio调用方法传参_Oracle触发器调用webservice说明
Oracle觸發器調用webservice說明
該文檔主要介紹oracle觸發器加載java代碼,在java代碼中調用一個webservice服務接口的測試例子。
1. 測試環境(本測試用例使用的環境)
· Oracle版本:Release 10.2.0.1.0
· Tomcat版本:apache-tomcat-7.0.63
2. Webservice服務器
使用axis2創建一個測試用的webservice服務器。
服務器配置:
1) 把附件中的[axis2.war]拷貝到tomcat路徑下的webapps。我的是在C:apache-tomcat-7.0.63webapps。啟動tomcat,axis2.war會自動解壓。
2) 把附件中的[test.aar]文件拷貝到解壓后的文件路徑axis2WEB-INFservices下面。我的是在C:apache-tomcat-7.0.63webappsaxis2WEB-INFservices。
3) 這樣webservice服務器就配置好了。
說明:test.aar文件就是webservice測試服務器代碼編譯成的。使用的是axis2 Service Archiver插件編譯而成。插件如下:
服務器代碼如下:
3. Java代碼
Java端代碼說明:由于java代碼需要加載到oracle中,而oracle10g使用的jdk版本為1.4。因此java端代碼只能使用1.4版本的jdk支持的api。此處測試代碼用的是axis調用webservice。
說明:下列代碼中ulr=?的地址需要自行修改,根據自己tomcat端口調整。
3.1代碼如下
文件名為Main.java
import java.rmi.RemoteException;
import javax.activation.DataHandler;
import javax.xml.namespace.QName;
import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory;
import org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory;
public class Main {
public static void service(String name) {
String url = "http://localhost:8800/axis2/services/test/simpleMethod";
Service service = new Service();
Call call;
String vstr ;
try {
call = (Call) service.createCall();
QName qn = new QName("ns1:DataHandler", "DataHandler");
call.setTargetEndpointAddress(url);
call.setOperationName(new QName("http://test", "simpleMethod"));
call.registerTypeMapping(DataHandler.class, qn,
JAFDataHandlerSerializerFactory.class,
JAFDataHandlerDeserializerFactory.class);
vstr = (String)call.invoke(new Object[] {name});
System.out.println(vstr);
} catch (ServiceException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
3.2所需jar包
為了能正常運行上述java代碼,需要在oracle中加載兩個axis的jar包,分別為:axis.jar,commons-discovery-0.2.jar。
1)將附件中的axis.jar,commons-discovery-0.2.jar兩個jar包拷貝到oracle路徑.. sqljlib下。我的oracle路徑是:F:oracleproduct10.2.0db_1sqljlib。根據oracle安裝路徑自行修改。
2)加載axis.jar,commons-discovery-0.2.jar到oracle中
在cmd窗口中,切換到F:oracleproduct10.2.0db_1sqljlib下,運行下列指令:
loadjava -u system/oracle -r -v -f -genmissing -s -grant public axis.jar commons-discovery-0.2.jar
system/oracle:數據庫用戶名/密碼
指令執行完之后,顯示:
3)加載java文件到oracle中
在cmd中運行下列指令:
loadjava -r -f -o -user system/oracle@orcl f:Main.java
4)至此,java文件被成功加載到oracle中了。
4. 存儲過程
打開oralce自帶的sqlplus工具,創建存儲過程并調用java代碼。
create or replace procedure service(name varchar2) as language java name 'Main.service(java.lang.String)';
/
如下圖:
賦權限:
在sqlplus中用超級管理員登錄,給system用戶賦權限。
conn /as sysdba
exec dbms_java.grant_permission( 'SYSTEM','SYS:java.lang.RuntimePermission', 'createClassLoader', '' );
commit;
exec dbms_java.grant_permission( 'SYSTEM','SYS:java.lang.RuntimePermission', 'getClassLoader', '' );
commit;
exec dbms_java.grant_permission( 'SYSTEM','SYS:java.net.SocketPermission', 'localhost', 'resolve' );
commit;
exec dbms_java.grant_permission( 'SYSTEM', 'SYS:java.net.SocketPermission', '127.0.0.1:8800', 'connect,resolve' );
commit;
如下圖:
5. Oracle觸發器
創建一個基于wjq.operator表(我的數據庫中的一個表),每行數據有更新的觸發器,并調用存儲過程,如下:
在sqlplus中執行,用system用戶登錄:
CREATE OR REPLACE TRIGGER trigger_update
before update
ON wjq.operator
FOR EACH ROW
BEGIN
service('張三');
END ;
/
如下圖:
6. 測試
在sqlplus中測試,執行更新語句操作。
wjq.operator中只有兩行數據:
執行update wjq.operator set sex='1';時所有的數據都要更新,觸發器被執行兩次。
執行update wjq.operator set sex='1' where sex ='2';時有一條數據需要被更新,觸發器被執行一次。
如下圖:
總結
以上是生活随笔為你收集整理的.net webservice studio调用方法传参_Oracle触发器调用webservice说明的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: spo2数据集_Arduino 血氧心率
- 下一篇: 晶闸管有几个pn结_晶闸管的电路符号和图