SAP R3和JAVA交换数据之JCO
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
SAP R3和JAVA交换数据之JCO的更多相关文章
- Java交换数据为何不起作用原因分析
一.概述 目前各类语言中向函数传递参数的类型分为三种: 按值传递 按引用传递 按指针传递 其中按值传递表示方法(函数)接收的是调用者提供的变量的拷贝,不改变参数的值:按引用传递表示方法(函数)接收的调 ...
- java线程数据交换Exchanger
两个线程都等到交换函数才能完成交换数据操作,代码如下: package threadLock; import java.util.Random; import java.util.concurrent ...
- Java多线程之~~~使用Exchanger在线程之间交换数据[这个结合多线程并行会有解决很多问题]生产者消费者模型
http://blog.csdn.net/a352193394/article/details/39503857 Java多线程之~~~使用Exchanger在线程之间交换数据[这个结合多线程并行会 ...
- Java并发工具类(四):线程间交换数据的Exchanger
简介 Exchanger(交换者)是一个用于线程间协作的工具类.Exchanger用于进行线程间的数据交换.它提供一个同步点,在这个同步点两个线程可以交换彼此的数据.这两个线程通过exchange方法 ...
- Java并发编程--6.Exchanger线程间交换数据
在两个线程之间定义同步点,当两个线程都到达同步点时,他们交换数据结构,因此第一个线程的数据结构进入到第二个线程中,第二个线程的数据结构进入到第一个线程中 在生产者-消费者情境模式中它包含了一个数缓冲区 ...
- [SAP ABAP开发技术总结]数据输入输出转换、小数位/单位/货币格式化
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- 建立、配置和使用Activity——使用Bundle在Activity之间交换数据
当一个Activity启动另一个Activity时,常常会有一些数据需要传过去——这就像Web应用从一个Servlet跳到另一个Serlvet时,Web应用习惯把需要交换的数据放入requestSco ...
- 并发工具类(四)线程间的交换数据 Exchanger
前言 JDK中为了处理线程之间的同步问题,除了提供锁机制之外,还提供了几个非常有用的并发工具类:CountDownLatch.CyclicBarrier.Semphore.Exchanger.Ph ...
- JSP Servlet之间交换数据
摘自:<轻量级Java EE企业应用实战>第三版 对于每次客户端请求而言,web服务器大致需要完成以下步骤: 1.启动单独线程 2.使用I/O流读取用户的请求参数 3.从请求数据中解析参数 ...
随机推荐
- IIS7 win7 x64 MVC部署
.net4.5已经装好,mvc4setup也装了,启动IIS后打开网页还是不能正常显示页面,404错误 最后发现把win7升级到SP1就正常了,具体是那个补丁修复的就不知道了
- ZZY的宠物(矩阵运算+快速幂)
E :ZZY的宠物 描述 ZZY领养了一对刚刚出生的不知名小宠物..巨萌巨可爱!!...小宠物的生命为5个单位时间并且不会在中间出意外翘辫子(如: 从0出生能活到5但活不到6)..小宠物经过2个单位时 ...
- 使用jQuery通过点击它删除HTML表格行-超简单
jQuery的已成为所有时刻的最常用和最喜爱的JavaScript框架之一.它不仅不会减少在JavaScript编码简单的技术开销,而且也使您的代码的跨浏览器兼容.我已经写了许多关于jQuery教程, ...
- 度量Web性能的关键指标
自网站诞生以来,响应速度/响应时间一直都是大家关心的话题,而速度慢乃是网站的一个杀手,正当大家以为四核和宽带能力的提升能够解决这些问题时,Wi-Fi和移动设备为热点移动互联网又悄然兴起. 在2006年 ...
- Hadoop中Partition深度解析
本文地址:http://www.cnblogs.com/archimedes/p/hadoop-partitioner.html,转载请注明源地址. 旧版 API 的 Partitioner 解析 P ...
- IIS6.0 开启Gzip与PHP Gzip
因为在做一个项目,项目里面服务器主要提供数据,但是数据多了文件就大了,比较浪费流量和时间,我们便用Gzip来处理.我在本机上是apache,服务器上是IIS6.0,用的是php,那么我就在这里分享一下 ...
- 转:Android应用开发性能优化完全分析
转自:http://blog.csdn.net/yanbober/article/details/48394201 1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜 ...
- ie debugger注册码
次软件是共享软件 也就是需要购买才能使用 囧rz 刚才搜了下竟然有人放出来DebugBar注册码 嘻嘻 我就分享了 对软件作者只能 -_-.say sorry! blog.sina.com.cn/se ...
- 数据库:mongodb与关系型数据库相比的优缺点zz (转)
与关系型数据库相比,MongoDB的优点:①弱一致性(最终一致),更能保证用户的访问速度:举例来说,在传统的关系型数据库中,一个COUNT类型的操作会锁定数据集,这样可以保证得到“当前”情况下的精确值 ...
- javascript - = 、==、===、!=、!==、&&、||、!
= .==.===.!=.!==.&&.||.! /* * = .==.===.!=.!==.&&.||.! */ var a = 1; var b = 1; var ...