[返回]
计算机世界1999年第23期
郭宜斌 编译
本文将向读者和用户介绍如何通过使用Jaguar
CTS 的JDBC/ODBC 访问SQL Anywhere 数据库,以及建立EAServer 的Java
组件的全过程。在这个组件完成后,还将引导你考察建立Java
应用的几个主要环节:与服务器EAServer 连接,Java
组件的实例化,方法调用以及利用某个CORBA 界面显示所得到的数据。
需要配备并了解以下的工具:
◇PowerJ 2.5 或3.0;
◇EAServer 2.0 或3.0;
◇SQL Anywhere 5.0 以上;
◇浏览器。
一、Java 组件与Java Applet
建立Java 组件所需要遵循的基本步骤如下:
◇配置EAServer;
◇验证/ 创建连接缓冲区(cache);
◇用PowerJ 建立Java 组件;
◇在EAServer 上安装Java 组件;
◇用PowerJ 建立与EAServer 连接的Java 小应用并访问组件逻辑;
◇用Applet Viewer 运行该Java 小应用以显示由Java
组件所提供的数据。
二、配置EAServer
1. 验证/ 创建连接缓冲区
连接缓冲区是EAServer
与数据库之间的网关。这是一些预先配置的数据库连接,通过访问这些连接,使组件能够快速而有效地得到它们所需要的数据。这些高速缓冲区,是EAServer
借以对数据库连接和对各个组件的数据库事务作集中控制的重要设施。为了简单起见,本文所使用的例子中的连接缓冲区,是Sybase
在其“虚拟大学”范例程序中所用过的。为了检查这一连接缓冲区是否配置得正确,先需登录到Jaguar
Manager,登录时注意使用新的主机名并按“Sybase Central \ Jaguar Manager \
Servers\ Jaguar\Connection Caches" 找到连接缓冲区。然后,双击“JavaCache"
以查看其性质,单击“ping"
以检查连接是否正确。如果连接失败,应检查ODBC
数据源是否具有以下所需的性质:
Name:Jaguar SVU Sample
Type:SQL Anywhere
DB File: %JAUGAR %\sample\svu\jagdemo.db
随着EAServer
的配置就绪以及连接缓冲区的到位,现在是可以建立服务器组件的时候了。
2. 用PowerJ 建立Java 组件
这一步的任务是从零开始建立一个能用来访问我们的SVU
数据库并将数据送达给客户的Java 组件。这个组件将使用IDL
数据类型并实现ServerBean 界面,因此该组件就可以利用EAServer
的实例缓冲优势。
首先,打开PowerJ 2.5 并选择“File │New Project"。然后,选择“File
│Save Project"以保存该项目。再选择一个你所需要的工作目录并调用文件夹“eascomponent"。在得到系统提示后,保存该项目文件及文件夹“eascomponent"。再之后,关闭PowerJ
所创建的窗体(form)并从菜单中作选择“File │New │Target"。这时,Target
Wizard 即启动。选择“Java -Jaguar Server Component"并单击。此时你会看到系统要求提供目标文件所在位置的提示。指定文件夹“eascomponent"中的“eascomponent"为目标文件所在位置,然后单击“Finish"。
现在即可创建所需要的Java 组件了。从菜单中选择“File │New │Class"
以启动Class Wizard 。在后者启动后,选择“Standard Java"并单击之。送入有关类性质的以下信息后单击“Finish":
Package Name: powertimes
Class Name: instructors
Extends: Object
Implements: ServerBean
在完成以上工作之后,PowerJ 将创建“instructors.java"并为你展现相应的源代码。以下你所看到的,就是组件“instructors.java"应当具有的完整的源代码。这是这个组件的一种很直白的表达方式,更好的方式应当是先有一组框架类,然后以继承关系表达instructors。为了本文的方便,我将所有的代码都组织在一个类中。
在略去的代码中值得注意的是一个名为getAll()
的方法。这个方法使用由“conn"所定义的连接取得在其变量“sql"中所定义的数据。“conn"是在这个类的构造方法中定义的,是为了利用EAServer
服务器与所给定的数据库参数之间的连接。在运行时,EAServer VM
将力图找到与这些参数相匹配的连接缓冲区。如果存在这样的连接缓冲区,“conn"就给该缓冲区一个名字(handle)。当“conn"有数据时,方法getAll()
将以这些数据作为Java 结果集“rs" 的内容,并将“rs" 转换为EAServer
的CORBA 结果集“trs" 所要求的形式。最后,该方法将结果集“trs"
送达调用它的客户/ 对象。之所以使用结果集“trs"
而不使用结果集“rs",是由于“trs" 是CORBA IDL
类,这种类可通过EAServer
的整理功能而转换为任何客户端所需要的形式。这一点对开发者而言则意味着:这个组件现在已不再只是Java
对象,而是任何对象了。任何其结果集的实现符合CORBA
标准的对象都可以自由地访问和使用这个组件。
在完成了对类的定义之后,可通过从菜单中选择“Run │Build"而实施对类的编译。如果编译中没有出现错误,则该服务器组件即告完成,下一步是必须将它安装到EAServer
上。
3. 在EAServer 服务器上安装Java 组件
为了能在EAServer 服务器上安装Java 组件instructors,你必须将实现类(即instructors.class)拷贝到EAServer
服务器的类路径上去,将该组件登记到EAServer
服务器中,然后再生成和编译该组件的存根类和框架类。在这些工作完成后,你的组件就可供使用了。
建立以下目录并将文件instructors.class 拷贝到该目录下
%JAGUAR %\java\classes\powertimes
在完成该文件的拷贝后,打开Jaguar Manager
并使用与以前相同的登录信息进行登录。然后,进入“Sybase Central \
Jaguar Manager \ Servers\ Jaguar\Packeges"
并执行下述操作以创建该组件的软件包:
◇右击文件夹“Packeges";
◇选择“Install Packege";
◇选择“Create and Install a New Packege";
◇送入“powertimes";
◇单击“Create New Packege";
◇单击“OK"。
至此,你已创建了一个名为“powertimes" 的软件包。
为了将组件安装到你新近创建的软件包“powertimes"
中,应依此执行以下的操作:
◇右击“powertimes";
◇选择“Install Component";
◇选择“Import from Java File";
◇单击“OK";
◇以“instructors" 作为组件名;
◇单击“Create New Component";
◇单击“Browse" 并找到类%JAGUAR %\java\classes\easpackege\instructors.class;
◇单击“OK";
◇在方法验证栏单击“OK";
◇单击“OK"以转出组件性质栏。
为了完成安装,你必须为你的组件生成和编译存根类、框架类和帮助(helper)类。具体地说,应当依此进行以下的操作才能完成组件的安装:
◇右击“powertimes";
◇选择“Generate Stub/Skeleton";
◇选择Generate Stubs,Geneerate Java Stubs 和Generate Skeleton;
◇以“powertimes.stub" 作为Java 包名;
◇单击Generate;
◇单击OK。
至此,Java
的存根、框架和帮助文件都已生成。最后一步是编译这些文件。但这个过程尚未完全自动化,要求开发者选择自己的方法来编译这些文件。本文选择使用简单的命令行编译器来进行编译。具体的编译和安装过程如下:
从命令行提示出发找到%JAGUAR %\java\classes\powertimes 并执行命令:
javac *.java
在编译完成后,找到%JAGUAR %\html\classes\ powertimes\stub
并执行同一命令来编译该组件的存根和与之相关的Java 文件。
至此,已完成对组件的安装,该组件随时可以被使用了。应当说明的是,只有当初始安装该组件时以及每当组件的代号(signature)改变时才需要执行这一过程。组件的代号构成定义组件界面(包括方法名和变量)的所有要素。如果改变的只是组件的内部逻辑,就不必重新生成存根类和框架类,因为这些类只是指向实现类功能的指针,而并非包含这些逻辑本身。
在所需的组件完成后,下一步的任务是建立一个简单的Java
小应用,实现与EAServer 服务器的连接,并利用组件instructors
中的逻辑从数据库SQL Anywhere 中检索数据。
4. 建立访问EAServer 逻辑的Java 小应用
这个应用通过执行以下活动来展现组件instructors 的功能:
◇连接到服务器EAServer;
◇创建instructors 的一个实例;
◇调用instructors 的方法getData;
◇借用PowerJ 显示所检索到的数据。
首先,用PowerJ 将项目eascomponent
保存起来,然后通过从菜单中选择“File ┃New Project"
而开始一个新项目。调用新项目easapplet 并将它存入存项目eascomponent
的同一目录下。这个小应用需要Java 1.02,
除非你能肯定你所使用的浏览器与Java 1.1
兼容。为了确定这一点,从菜单中选择“View ┃Targets",easapplet
目标将指出小应用的类型。同时,在视图Target 中选择“File ┃Options
┃Properties" 并单击“Classpath"。这时候,应当在列表中出现下述信息,如果不是这样,应加上这些信息,以确保小应用能正确地编译。应当在列表中出现的信息是:
$(_SunClassPathAWT102)
%JAGUAR %\html\classes
5. 建立Java 小应用
从PowerJ 中Java 1.02 组件调色板的“Database 1.02" 中,选择“powersoft.powerj.db.Transaction",
并将它粘贴到主窗体上。再从“Database 1.02" 中选择“powersoft.powerj.db.Query.102",
也将它粘贴到主窗体上。从“Standard 1.02" 中选择“powersoft.powerj.ui.
grid.Grid.102", 并将它粘贴到主窗体上。
对窗体中对象的性质应作以下改变:
◇将transaction_1 改名为transaction_instractors;
◇将query_1 改名为query_ instractors;
◇在query_ instractors 的Query tub 中,将Transaction 置为Form1.ransaction_instractors;
◇将grid_1 改名为grid_ instractors;
◇在grid_ instractors 的Database tub 中,置Datasource 的值为“Form1.query_instractors"
并检查Bound Control;
◇在同一屏幕中,置性质DataColumns 的值为“instractor_id;firstname;lastname;"。
窗体中的对象现在就可以接受来自服务器组件的数据了,最后一步是从服务器EAServer
取得所要的数据。以下是Form1 的最终结果,IIOP
监听地址的例外值已在程序中给出。请用本文开始处你所用过的IIOP
监听地址值替换这个值。如果你没有改变过这个值,就应使用“localhost"。
通过编程可以实现在前端浏览器上显示来自服务器组件的数据。