Portal开发工具箱(Portal Development Kit,PDK)的两个主要特点是完全用PL/SQL实现的PDK -PL/SQL和用Java实现调用接口的PDK-Java。它们都能访问Web资源或数据库服务器,两者都能调用Java程序,假如Java程序被导入数据库中,可以从PL/SQL调用它们。下面是构成全部Portal环境的组件列表:
Apache监听器是一个HTTP服务,处理所有通过请求端口(默认端口为80)的请求,请求首先路由到本地主机。因为请求字符串中包含"pls",即虚拟目录,该字符串(表示请求的实际字符串是可配置的,此处为默认配置)的定义在$ORACLE_HOME/apache/modplsql/cfg/plsql.conf文件中,Apache根据这一文件识别出"pls"是一个PL/SQL请求并且把执行任务传递给PL/SQL模块(mod_plsql)。mod_plsql随后查看网址字符串的剩下部分。"simpledad"是数据库访问描述符(Database access Descriptor,DAD),它给出关于mod_plsql怎样被连接到数据库中去执行请求的信息,可以配置多个DAD,它包含用户名、密码、认证方式、路径别名等信息。 “show”为mod_plsql执行的PL/SQL过程,假如在URL的最后没有指定过程名,则mod_plsql会查找默认的过程名,此默认过程名也可在DAD中设置。过程运行并发送结果(使用PL/SQL Web Toolkit生成的)到HTTP缓冲区中,当过程执行完后,HTTP缓冲区的内容通过mod_plsql和Apache返回到浏览器。过程可以直接使用PL/SQL Web Toolkit编程,也可以通过loadpsp命令行工具把PSP页面加载到数据库中生成过程,浏览PSP页面只需在URL中以过程名结尾即可,不需扩展名“.psp”。
设置Apache Web 服务器中的mod_plsql模块来接收浏览器对数据库中的存储过程的调用。Oracle HTTP Server组件已经包含在Oracle9.0.1服务器中,使用缺省的端口和主机参数,配置文件$ORACLE_HOME/apache/apache/conf/httpd.conf不用修改。需要为Apache Web 服务器设置DAD,步骤如下:
3.点击"网关数据库访问描述符设置",如图4所示。可以将新的数据库访问描述符添加到现有列表。此处配置的信息包括:用户名、口令、连接字符串、文档上载路径和过程、需要进行 long raw 上载的文件扩展名、路径别名和相关过程,以及确认连接的信息。本例中修改SIMPLEDAD,如图5所示。 图4 4.在SIMPLEDAD的编辑页面中,修改Oracle 用户名为cf,Oracle 口令为cf,Oracle 连接字符串为db:1521:o90,假如网关在所连接的数据库以外的其他Oracle主目录中运行,则需要TNS连接字符串。此外,也可使用以下格式的组合字符串来替代TNS连接字符串,即::。是运行数据库的主机名,是TNS监听程序监听的端口号,是数据库例程的Oracle SID名称。为了获取最佳性能,请保持网关的数据库连接池处于打开状态。网关使用"文档访问信息"向与此数据库访问描述符关联的数据库上载或下载文档。默认情况下所有文档都将以BLOB类型上载。通过在Long Raw字段中指定以逗号分隔的文件扩展名,可以覆盖此默认设置。此字段的"*"值将使所有文档以Long Raw 数据类型上载。"文档访问过程"指定用于访问文档的虚拟路径。"文档访问过程"字段指定网关处理文档请求所调用的过程。此处都使用缺省值。假如通过此网关连接的应用程序支持将绝对路径映射到要害字,可以指定要害子,本例中此处为空。设置完该页面后返回上级页面。 图5
CREATE TABLE student (ID NUMBER(5,0) NOT NULL ,NAME VARCHAR2(15) NOT NULL ,DOB DATE ,GENDER VARCHAR2(2) DEFAULT '男' ,CLASSYR NUMBER(4,0) DEFAULT 2002 NOT NULL ,MAJOR VARCHAR2(25) ,EMAIL VARCHAR2(50) ,PHOTO VARCHAR2(100) ); alter session set nls_date_format = 'dd-mon-yyyy'; alter session set nls_date_language = 'AMERICAN'; insert into student values ( 1001,'赵鹏','14-JUL-1975','男',2001,'History', '1001@NetUniversity.org','u1001.gif') / insert into student values ( 1002,'刘宇','08-OCT-1975','女',2001,'Science', '1002@NetUniversity.org','u1002.gif') / …………
2.以帐户cf/cf建立存储过程show_student。
create or replace procedure show_student (p_id in out student.id%TYPE ,p_name out student.name%TYPE ,p_dob out student.dob%TYPE ,p_gender out student.gender%TYPE ,p_classyr out student.classyr%TYPE ,p_major out student.major%TYPE ,p_email out student.email%TYPE ,p_photo out student.photo%TYPE ) IS CURSOR get_student(p_id in student.id%TYPE DEFAULT 1001) IS SELECT * FROM student WHERE id = NVL(p_id,1001); student_row student%ROWTYPE; BEGIN IF p_id<1001 THEN p_id:=1001; END IF; IF p_id>1007 THEN p_id:=1007; END IF; OPEN get_student(p_id); FETCH get_student INTO student_row; CLOSE get_student; p_name := student_row.name; p_dob := student_row.dob; p_gender := student_row.gender;