EAS 5.2 学习手记

来源:互联网 发布:80端口怎么入侵 编辑:程序博客网 时间:2024/05/06 20:39
配置
EAS5.2+PB9.0+MS SQL2000
1.安装EAS之后首先启动Jaguar Server.如果不成功的话,右击"我的电脑"->管理->服务
把里面的"Jaguar"服务设置为手动起动.
2.打开Jaguar Manager,选择菜单Tools/Connect...新建一个连接
3.新建一个ODBC数据源 需要测试连接成功以后进行下一步
4.新建一个数据缓存  需要测试连接以后进行下一步
5.在PB 9.0里面选择Tools->EAServer Profile,在PB里面建一个EAServer连接  需要测试连接以后进行下一步

服务器端开发步骤

1。新建应用“EAServerComponent”在向导中选择需要的“package”可以选择EAServer服务器上已经存在的的package,也可以直接输入不存在的package,向导会自动创建这个package。
package的作用就是把发布的组件存进去,以便后面客户端调用组件方法。
完成创建以后会在该用一个应用中出现一个应用类,一个工程对象,一个不可视类。
注意,不可视类是服务器端开发的关键。不可视类也可以手工创建。方法如下:
在该应用建一个新的Custom Class类,之后在事件中添加activate和deactivate两个时间
手工创建的工程对象需要编辑之后再能使用
打开工程对象, 选择左上角的“Properties”(或者菜单Edit/Properties)
    在弹出的会话中的Geneal标签页的Package框中的Package name中输入package,可以是存在的,也可以是不存在的,如果不存在会自动创建。
    在EAServer Host标签中的EAServer Host框的Host Name中写入计算机名,Port number写端口号,默认是9000
Login框中的Login ID写jagadmin(或者用户名,默认是jagadmin)
Login Password写密码
并且选中下面的“Save login informantion in project”复选框
    在Libraries标签页中的“Checjed Libraries will be consolidated”下面选择显示的pbl的复选框
本标签的最下面“PowerBuilder Resource File”中输入与pbl同名的后缀名为pbr的文件,此文件是不    存在的,不过会被自动创建,注意,如果服务端处理的事务牵扯到DW,那么最好把pbr加上。
  在Components标签页下面的“Cpmponent Type”中选择“Standard Component”
在Standard Options框中的Transaction support选择“Requites Transaction”
    接着点击左上角的“Select Objects”(或者菜单Edit/Select Objects)
在General标签页下的“Libraries”框中选择pbl,之后会在下面的“Objects”中出现这个pbl包含的不可视类,选择不可视类,单击“OK”就可以发布了

2。现在,应用建好之后,由于我们使用向导创建的,所以工程对象不用在修改的,如果是手工创建的应用,并且手工建的工程对象和不可视类,那么必须修改这个工程对象。否则组件方法是无法被客户端的
调用的,也就无法处理客户端提交的事务
要这个不可视类能做事务处理还需要写代码!
首先要在不可视类的Instance Variables中定义一个连接
protected:
TransactionServer itr_jaguar
注意,必须是protected类型,否测运行中会出现ERROR
接下来就在不可视类的activate事件中写创建Jaguar事务对象和连接数据库的代码
代码如下
integer li_result
li_result=this.GetcontextService("TransactionServer",itr_jaguar) //创建事务对象
if li_result<>1 then
       Messagebox("系统提示","创建jaguar事务对象失败。")
       Return -1
end if
//连接数据库
SQLCA.DBMS="ODBC"
SQLCA.DATABASE="db_suit"
SQLCA.DBParm="ConnectString='DSN=datasource_suit;uid=sa;pwd=',usecontextobject='yes',cachename='conn_for_suit_cache'"

Connect using SQLCA;

if SQLCA.SQLCode<>0  then
       Messagebox("系统提示","连接数据库失败。")
       Return -1
end if
为了节省资源,在是用完事物之后必须释放连接在deactivate事件中写如释放数据库连接代码
disconnect using sqlca;

到这一步,不可视类的事务对象已经不是问题了。但是还需要不可视类能处理事务。这就需要在不可视类里面添加函数,一个事务处理可以用一个函数也可以几个函数联合处理!
如果涉及到DW,那么在服务器端新建一个DW外,还需要这个DW可以传递数据到客户端。那么就需要定一个DS了,DS定义语句放在不可视类的Instance Variables中,
代码
datastore ds_month_salary

创建DS的语句可以放在activate中也可以放在函数中。
代码如下
if Not IsValid(ids_month_salary) then
    ds_month_salary=Create DataStore
end if
ds_month_salary.DataObject="d_month_salary"
ds_month_salary.SetTransObject(SQLCA)

提取数据并传输到客户端的代码是写在函数中的,这也算是一个事务处理!
在函数中定义一个传递参数,需要注意的是传递的”Pass By“不需选成reference,不然会不成功的
参数类型为blob,用来提取blob型的数据
代码如下
long ll_result
ds_bm.retrieve()
ll_result=ids_bm.GetFullState(ablob_data)
Return ll_result

完了之后需要Build和Deploy事务组件。
选择组件所在的应用,右击选择Full Build之后再Deploy
这样,组件就挥发布到Jaguar CTS 服务器上了。在Jaguar CTS 上查看install package中可以看到创建应用的时候定义的package,在这个package中可以看到刚才发布的组件
注意:组件里面的每一处改动都需要重新发布一次才可以被客户端使用,否则无效!

在服务器端的不可视类直接调用SQL Server的存储过程步骤
    首先是新建一个不可视类 u_proecedure_trans
    在u_proecedure_trans的Local External Functions里面定义如下语句
    function integer backup_product_ls(datetime copydate,string copyman) RPCFUNC           ALIAS FOR "dbo.backup_product_ls"
    用来代理SQL的存储过程
    接下来在包含u_proecedure_trans和n_computer_salary_server组件的pbl里面打开应用类        对象computer_salary_server
    在computer_salary_server的属性的General标签页中点击“Additional Properties”按钮    在弹出的会话框中选择“Variable Types”标签页,并修改“SQLCA”属性为“            u_procedure_trans”
    这样就可以在不可视类的组件中使用存储过程了
    在 n_computer_salary_server 组件中使用如下语句既可以调用SQL的存储过程,代码如下
    int li_result
    li_result=sqlca.backup_product_ls(adt_copydate,as_copyman)
    注意:由于backup_product_ls存储过程的返回值只有一个,所以在前面的    u_proecedure_trans地定义语句中使用integer。
如果在存储过程中需要返回多个值,这总方法就不适用了!


#############################################


EAS 客户端开发步骤

1,定义一个全局变量用来做连接
connection in_connect
如果是使用向导创建的连接,那么就需要改成向导生成的连接类的名字来定义连接
想到生成n_client_sui_connect,那么上面的语句既要变成
n_client_sui_connect in_connect
用向导生成的n_client_sui_connect的好处就是在脚本里面不用再使用代码实现连接,直接使用一个语句就可以连接JaguarCTS
代码如下写在open事件中
in_connect = Create n_client_sui_connect
如果使用第一种方法的话,我们还得使用脚本来实现连接
代码如下(写在open事件中)
lc_connect = create connection                       //创建连接对象
lc_connect.application = 'pb_eas_server_comp'        //Package Name,可以不写,具体使lc_connect.driver = 'jaguar'              //连接对象对象的驱动,对于EAServer,值为jaguar
lc_connect.userid = 'jagadmin'                    //登录帐号,这里为管理员
lc_connect.password = ''                //JaguarCTS服务器密码
lc_connect.location = 'iiop://hostname(IP):9000'          //对应服务器server1的9000端口
lc_connect.connecttoserver( )

接下来就是对客户端的操作界面的进行开发~一般都是window~
2.创建window,添加控件,布局完成之后保存。创建代理类
新建“EAServer proxy”
选择左上角的“Properties”(或者菜单Edit/Properties)
在弹出的会话中的Geneal/Deployment PBL选择或者输入需要代理的pbl,这里是客户端。一般要代理客户端。
在EAServer Host中的EAServer Host框的Host Name中写入计算机名,Port number写端口号,默认是9000
 Login框中的Login ID写jagadmin(或者用户名,默认是jagadmin)
Login Password写密码
并且选中下面的“Save login informantion in project”复选框
接着点击左上角的“Select Objects”(或者菜单Edit/Select Objects)
在弹出的会话中找到前面在服务器端发布到JaguarCTS的package,并选中复选框,代表需要代理这个组件
最后就是单击左上角“Deploy”发布。之后我们就可以在window中调用了组件方法了,不然会提示不存在这个函数的错误而不能通过编译

2.在window中,应该先在Instance Variables定义一个代理变量,用前面服务器端发布到JaguarCTS上的组件名称来定义新的连接代理。
定义局部代理连接变量
     n_customer_server  in_server_suit_customer_proxy
     n_customer_server是发到EAS Jaguar服务器上的组件

3. open()事件中写入创建组件方法
如下:
//创建组件代理
integer li_result
li_result=in_connect.Createinstance(in_server_suit_customer_proxy,"zc_customer_server_package/n_customer_server")
if li_result<>0 then
    Messagebox("系统警告","创建组件代理失败。")
    close(this)
    Return -1
else
    Return 1
end if
如果是使用多个服务端的话,也就是一个一个服务端实现一个事务,那么就必须在相应的的window的open事件添加连接JaguarCTS服务器的代码了,否测在多个窗口来打开关闭,使用的过程中会导致JaguarCTS服务器连接失败的错误!
4。所有的事务处理,都有组件来完成,一般调用组件方法来实现事务处理过程
 integer li_result
 li_result=in_server_suit_customer_proxy.of_insert_customer(ls_customer_id, ls_customer_name,ls_country,ls_province,ls_city,ls_address,ls_contact_man, ls_tel,ls_fax)
 if li_result=-1 then
    Messagebox("系统警告","插入客户主档资料失败。")
    Return
 end if
注意,如果代理选择不正确,或者是创建组件代理package选择不正确,也会出错
代理不正确会出现函数编译不通过,提示没有此函数~


###########################################
调试和部署
由于服务器端的不可使组件的调试很困难,只有发布以后在客户端运行之后在可以看出服务器端的代码错误.这样效率低下.
现在可以使用Live Editing(现场编辑)的方便调试
使用向导创建组件的时候可以选择Supports live editing来支持现场编辑.如果是已经建好的组件,可以通过手工来支持现场编辑功能
1.打开服务器端的工程对象,并且选择选择左上角的“Properties”(或者菜单Edit/Properties)
在弹出的会话中选择"Advanced"标签页,在"Path to libraries from EAServer server for live editing"下面加入
组件所在的pbl路径.如果服务端和客户端不是在一台机器上,那么路径的写法如下
//servername/sharename/Path/file
例如
//mamachine/work/pbls/xxxxx.pbl
并且,还要在host文件中加入servername和IP地址的对应关系记录
2.在组件的General属性页中"EAServer Project"中输入工程对象名称.或者点击右边按钮进行选择
现在这个组件就支持现场编辑.

Jaguar组件发布之后在硬盘中所生成的文件
存放在/Program Files/Sybase/EAServer/Repository/目录下面的
/Package  /Component /IDL 三个目录中

/Component
包含有以发布的package为名的文件夹,在此文件夹中包含一个和组件同名的文件夹以及一个和组件同名
的.props文件,这个.props文件就是组件的属性文件.
和组件同名的文件加包含了Ci(i=1,2,3,4...),发布几次组件,就会有几个文件夹,在Ci文件夹中存放的就是
组件编译后的.pbd文件.这里以最新的为准,i值越大,表示,pbd就是最新的.其余的可以删除.
.props文件的内容全都是以com.sybase.jaguar.component开头的属性行
Ci的文件夹数目就是.props文件中的com.sybase.jaguar.component.pb.cookie=X 有关.X等于几,就有几个Ci目录,也就
是组件被发布了几次~


/IDL
包含有以发布的package为名的文件夹,此文件夹中有一个.idl文件,此文件的代码就是组件函数.
例如

#ifndef __zc_suit_server_n_suit_server__
#define __zc_suit_server_n_suit_server__
#include <CTS/PBUserException.idl>
module zc_suit_server
{
 /**
    ** <!-- crc 1110792762031 -->
     **/
   interface n_suit_server      //组件名
 {
  string of_select_kl         //函数名
      (
            inout string as_czyid //函数参数
        )
    raises (::CTS::PBUserException);
   };
};
#endif


/Package

很简单的文件夹,此文件夹包含的都是.props文件.文件命和发布的组件是同名的.
不过其中的组件属性比较少
例如
#Sybase EAServer 5.0 Properties
com.sybase.jaguar.description=
com.sybase.jaguar.package.files=
com.sybase.jaguar.package.name=zc_suit_server
com.sybase.jaguar.package.roles=

部署Jaguar 组件

需要设置Jaguar的jagadmin的口令,如果开发的组件也是用jagadmin那么二者的口名必须一样.
如果开发的组件使用了数据缓存,在实施对象机器上也必须建立一个数据缓存.
前面已经看出Jaguar组件发布之后存放的文件位置,在部署Jaguar组件的时候最简单的方法就是/Package  /Component /IDL这三个
文件夹复制到实际使用的aguar安装目录下面就可以了。

还以一种比较正规的方法。如下
1.进入开发环境Jaguar Manager控制台,展开Servers/Jaguar/Installed Packages
右击其中一个发布好的package,在在弹出的快捷菜单中选择"Export"->"EAServer Jar"
在弹出的会话中选择"Export as EAServer Package JAR file "并且在Specify the jar file path
下面输入导出的文件夹,如果文件夹不存在会自动创建
把jar文件copy到实施的Jaguar机器上
2.在实施的环境中,打开Jaguar Manager控制台,在Packages上面右击(注意,不是Jaguar下面的InstalledPackages)
在弹出的快捷菜单中选择"Deploy"->"EAServer Jar"会弹出一个会话"Specify jar file"
在这个会话中选择"Deploy from EAServer Package Jar file"并且在Jar file 下面输入在开发环境Export的jar文件的路径,或者是在
右边的按钮中选择.之后单击OK
3.在实施的环境中,展开Servers/Jaguar/Installed Packages,右击Installed Packages,
选择"Install Package..."弹出会话后再选择"Install an Existing Package",
在"Choose Package to Install"中选择刚才在开发环境中Export的组件,单击OK

客户端部署很简单,和C/S模式一样.唯一一点不同的就是需要更改连接函数的IP地址.
如果使用机器名称连接JaguarCTS服务器,那还得在host文件中加入机器名和IP地址的对应关系!

原创粉丝点击