SAP R3和JAVA交换数据之JCO

本文详细介绍了SAP Java中间件的JCO组件,包括其显著特征、连接过程及性能优化注意事项。重点阐述了如何通过合理配置连接池、避免重复使用function对象等手段来提升系统性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sap的java中间件,使用它可以使sap的客户和合作伙伴使用java语言轻松地建立可以和sap系统通信的兼容的组件和应用程序下面是jco一些显著的特征:

1.支持双向调用(abap调用java和java调用abap)

2.支持unicode和非unicode编码的系统

3.为程序员封装了一些难以理解和处理的部分,比如代码页,数据类型转换和连接池等等

4.屏蔽了rfc和ddic的一些细节,这样可以让程序员专注于业务逻辑的处理,而不必去理会过于底层的东西

5.容易学习和使用的api和java类的设计

6.动态查找和缓存元数据

java应用程序使用jco的api进行连接,rfc中间件使用rfc库通过jni来连接sap的r/3系统,如下图所示:

连接过程:

1.创建一个连接池 addclientpool()

2.创建一个bor,它包含运行时环境所有function模块的元数据 createrepository()

3.创建function template getfunctiontemplate()

4.创建function getfunction()

5.从连接池中取出一个连接的实例 getclient()

6.设置传递给function模块的输入参数 getimportparameterlist()

7.执行这个function excute()

8.得到function执行后得到的输出参数 getexportparameterlist()

9.销毁连接池 removeclientpool()

性能优化注意事项

1.因为连接池中的连接是可重用和可保持的,所以可以降低系统开销,最大并发连接数量的限制避免过多地占用sap系统的资源,尽管如此,也不要使用过小的最大并发连接数从而造成应用系统的性能瓶颈,为了容纳由应用系统造成的额外负载,sap系统要经过一些配置。

2.使用一个新的function对象时,为了提高性能而重用已有的function对象,不仅是多于的,而且还很危险,因为jco的repository为每个function模块缓存了元数据,如果重用一个含有表参数的function,而这个function中的表中的行数据没有被清除,那么更多的行数据会添加到这个表上,从而会造成错误的结果,这是使用一个新的function对象时要注意的。

3.只需使用一个repository对象,因为repository对象可以动态重新得到sap function模块中的元数据并重新缓存,所以使用一个就够了,如果使用过多的repository对象,会降低应用系统和sap系统的性能

4.应用系统只使用了function中的一小部分参数,为了提高性能,可以使用setactive()方法将那些应用程序不使用的参数设置为非活动状态,包括table parameter、parameterlist以及jco.request对象

5.添加多行数据到jco的table对象中时,使用appendrows(int num_rows)方法代替appendrow()方法,这样可以提高性能

同步问题

为了提高性能,jco只在访问连接池和repository对象时采取同步,其他的操作都是异步的,在多线程的环境下,不同线程之间共享对象(比如table对象)是值得警惕的,并且一个连接对象是不能共享访问的,这样导致发生异常exception


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值