SAP接口编程 之 JCo3.0 系列 (01):JCoDestination
JCo3.0 是 Java 语言与 ABAP 语言双向通信的中间件。与之前版本 1.0/2.0 相比,是重新设计的产品。API 和架构设计与 NCo3.0 比较类似。前面也说过,NCo3.0 的设计参考了 JCo3.0。从本篇开始,系统性介绍 JCo3.0 程序编写的技术要点。
JCo3.0 安装
从 https://service.sap.com/connectors 下载 JCo3.0,注意下载的时候根据操作系统和 JVM 版本(32 位还是 64位)选择不同的版本。安装就是解压,将文件解压到目标文件夹。以 Windows 系统为例,主要的文件包括:
- sapjco3.dll
- sapjco3.jar
SAP 强烈推荐将这两个文件放在同一文件夹下。测试安装是否成功,可以在命令窗口下,进入安装文件夹,运行下面的命令:
java -jar sapjco3.jar
安装成功java会提示一个SAP的页面出来
JCoDestination
对象介绍
JCoDestination
代表后端 SAP 系统,开发人员不必关心与 SAP 的连接,JCo3.0 运行时环境负责连接的管理,包括连接和释放连接。我们先看一个简单的例子,了解 JCo3.0 JCoDestination
类的一些要点。
我使用的编程环境是 Eclipse,环境准备如下:
- 新建一个 Java 项目,项目名为
JCo3Demo
。 - 将 sapjco3.jar 加入到项目的 Build Path 中。sapjco3.jar 和 sapjco3.dll 要放在同一个文件夹下。
- 在 Eclipse 项目文件夹下,新建一个文本文件,文件名命名为
ECC.jocdestination
,在这个文件中设置 SAP 系统连接的的相关参数。
文件的内容如下:
#notes:更多配置项@see com.sap.conn.jco.ext.DestinationDataProvider
#客户端编号
jco.client.client=300
#用户名
jco.client.user=MM001
#密码
jco.client.passwd=12342234
#语言
jco.client.lang=ZH
#IP
jco.client.ashost=127.0.0.1
#系统编号
jco.client.sysnr=10
#最大空闲连接数
jco.destination.pool_capacity=1000
#超时
jco.destination.max_get_client_time=100
#最大活动连接数
jco.destination.peak_limit=1000
环境准备好了,先来一段最简单的代码,测试是否可以连接到 SAP 系统:
public class JCoDestinationDemo
{
public JCoDestination getDestination() throws JCoException
{
/**
* Get instance of JCoDestination from file named ECC.jcodestination
* which should be located in the installation folder of java project
*/
JCoDestination dest = JCoDestinationManager.getDestination("ECC");
return dest;
}
@Test
public void pingDestination() throws JCoException
{
JCoDestination dest = this.getDestination();
dest.ping();
}
}
代码说明:
getDestination()
方法
getDestination()
方法中,JCoDestinationManager.getDestination("ECC")
从 ECC.jcodestination
文件获取连接参数,创建 JCoDestination
对象的实例。
这里有一个重要的约定,JCoDestinationManager.getDestination("ECC")
方法,从 Eclipse 项目的根目录,查找 ECC.jcodestination 文件,文件的扩展名必须固定为 jcodestination,文件名就是 getDestination
方法的参数。如果找到文件,从文件中获取连接参数。这是 DestinationDataProvider
接口的一个默认实现,在开发和测试的时候还是很方便的,但如果在真实项目中使用,安全性和灵活性就不够。后续介绍解决方法。
当然如果愿意的话也可以写properties之类的文件,读取自己系统的路径,解析通过上面的文件连接,测试也可以。
pingDestination()
方法
pingDestination()
方法调用 JcoDestination
对象的 ping()
方法测试与 SAP 系统的连接。
JcoException https://www.jianshu.com/p/a188424c16c0
Jco会话与线程问题 https://www.jianshu.com/p/2ce28196483c