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^)/