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
转载至 http://blog.csdn.net/w5q7c3/article/details/8988982
来源: http://www.bubuko.com/infodetail-2441379.html