zoukankan      html  css  js  c++  java
  • 在PLSQL中编译复杂的java(转)

    原文地址:在PLSQL中编译复杂的java

    PLSQL中可以编译运行JAVA程序。

    一个简单的例子:

    create or replace and compile java source named xxfnd as package xxfnd;
    public class Test{
      public void Test(){
      }

      public static String  helloWorld{
              
      return "success";
     
      }
    }

    但是如果真的想在PLSQL中用JAVA做成什么事情,这样的程度是不够的。

    需要在PLSQL中使用JAVA的原因

    1. JAVA作为开源跨平台的语言,提供了丰富的工具包,可以处理很多复杂的内容,如操作EXCEL,发布Service等等;

    2. Oracle开发中有些事情只能用PLSQL来做。比如工作流。

    而当我们需要在工作流中借助JAVA完成复杂任务时,需要引用很多jar包。

    本文介绍一个完整的例子,在PLSQL中实现复杂的JAVA程序调用。

    1. 导入java程序所需jar包。这是很关键的一步。很多文章都语焉不详。

    上传所需jar包至应用服务器,这里假设绝对路径为:

    /home/applqv/pushjar/

    telnet至应用服务器。

    sqlplus /nolog
    connect sys/pass as sysdba;

    使用如下语法将jar包加载至数据库:

    call dbms_java.loadjava('-v -r  PUBLIC -synonym /home/applqv/pushjar/axis.jar');
    在导入中可能会报错,但是报错的时候,大部分jar包中的class文件应该已经成功加载了。所以有时候可以

    忽略这个报错。

    可以用以下SQL查询已经成功加载的class

    select * from dba_objects where object_type='JAVA CLASS' AND OBJECT_NAME LIKE '%com/ibm/wsdl%'

    可以在数据库parameter user_dump_dest  路径中找到dbms_java.loadjava的trace文件。其中会有详细的log记录。

    每次执行dbms_java.loadjava都会有trace。

    2. 在PLSQL中编写java程序。可以直接将按照以下语法写好的java程序贴到PLSQL中,然后F8编译。

    create or replace and compile java source named xxfnd as package xxfnd;
    import com.google.gson.Gson;
    import com.google.gson.GsonBuilder;


    import java.util.HashMap;
    import java.util.Map;

    import javax.xml.namespace.QName;

    import org.apache.axis.client.Call;
    import org.apache.axis.client.Service;
    public class Test{
      public void Test(){
      }

      public static String  helloWorld(String a){
              
     
       String url = "http://172.2.2.1/wms/services/ws";
            try{
            Service service = new Service();
           
            org.apache.axis.client.Call call = (org.apache.axis.client.Call)service.createCall();
           
            call.setTargetEndpointAddress(url);
            call.setOperationName(new QName("null", "push"));
            Map map = new HashMap();
                 for (String key: map.keySet()) {
                String sreMessage =
                    "{"Push": [{"username": "" + key + "","appname": "BG_405","pushcontents": "" +
                    map.get(key) + ""}]}  ";
                System.out.println("请求:" + sreMessage);
                System.out.println("返回:" +
                                   call.invoke(new Object[] { sreMessage }));
               System.out.println( "aaa"+call.getMessageContext().getCurrentMessage().getMessageType());                  
            }
          
            }
            catch(Exception e){
              
            }
      return "success";  
      }
    }
    3. 查看编译是否出错:

    show errors java source xxfnd;

    4.将java程序封装在PLSQL包中:

    create or replace package test_pkg is
      function hello_world(a varchar2) return varchar2;
    end test_pkg;
    /

    create or replace package body test_pkg is
      function hello_world(a varchar2) return varchar2 is
        language java name 'xxfnd.Test.helloWorld(java.lang.String) return String';
    end test_pkg;
    /

    5. 至此,java程序已经可以调用了。

  • 相关阅读:
    python学习笔记十五-生成器
    python学习笔记十四-迭代器
    python学习笔记十三-装饰器
    The Zen of Python, by Tim Peters
    python学习笔记十二-函数
    python学习笔记十一-集合set
    tensorflow2 gpu 在 win10 上安装过程和问题处理
    anaconda navigator stuck 卡在 loading applications... 处理
    python工具pip加速For windows
    WCF With StructureMap
  • 原文地址:https://www.cnblogs.com/huanghongbo/p/5283291.html
Copyright © 2011-2022 走看看