(一)通过JAVA连接SAP (sapjco3.jar在Windows和MacOS上的配置)
(一)通过JAVA连接SAP调用接口 (sapjco3.jar在Windows和MacOS上的配置)
一、sapjoc3.jar获取
由于sap官网提供的链接需要合作公司提供账号密码,如果商用请索要正确的用户名密码下载,如果只是想做测试使用,可以使用我这里提供的链接,资源失效请及时提醒我,谢谢
点击这里下载windows版 密码:1u0t
点击这里下载linux版 密码:7zuv
点击这里下载macOS版 密码:lafl
二、测试项目环境准备
新建项目
这个就不多谈了,直接上图,我这里新建了一个空的测试项目,新建lib文件夹,准备把需要用到的jar包丢进来windows和macOS环境配置
- windows
直接把 sapjco3.jar sapjco3.dll sapjco3.pdb 拷贝至lib下,然后add library把他们都添加进去 - macOS
把 sapjco3.jar 和 libsapjco3.jnilib 拷贝至lib下,同样add libray添加进去,这里只需要add sapjco3.jar 即可。
- windows
WARNING: 这里很多博客讲到需要添加classpath在变量里面,这是参照了官方提供的安装方式,这里的话我们只需要将上述文件拷贝至lib文件夹下即可。
三、源码编写及测试
首先编写用来放置sap连接信息的SapConn实体类
SapConn
/**
* Created by gang.xu01@hand-china.com on 2018/12/6
*/
public class SapConn { // SAP服务器
private String JCO_ASHOST;
// SAP系统编号
private String JCO_SYSNR;
// SAP集团
private String JCO_CLIENT;
// SAP用户名
private String JCO_USER;
// SAP密码
private String JCO_PASSWD;
// SAP登录语言
private String JCO_LANG;
// 最大连接数
private String JCO_POOL_CAPACITY;
// 最大连接线程
private String JCO_PEAK_LIMIT;
// SAP ROUTER
private String JCO_SAPROUTER; public SapConn(String JCO_ASHOST, String JCO_SYSNR, String JCO_CLIENT, String JCO_USER,
String JCO_PASSWD, String JCO_LANG, String JCO_POOL_CAPACITY, String JCO_PEAK_LIMIT,
String JCO_SAPROUTER) {
this.JCO_ASHOST = JCO_ASHOST;
this.JCO_SYSNR = JCO_SYSNR;
this.JCO_CLIENT = JCO_CLIENT;
this.JCO_USER = JCO_USER;
this.JCO_PASSWD = JCO_PASSWD;
this.JCO_LANG = JCO_LANG;
this.JCO_POOL_CAPACITY = JCO_POOL_CAPACITY;
this.JCO_PEAK_LIMIT = JCO_PEAK_LIMIT;
this.JCO_SAPROUTER = JCO_SAPROUTER;
} public SapConn() {} public String getJCO_ASHOST() {
return JCO_ASHOST;
} public void setJCO_ASHOST(String JCO_ASHOST) {
this.JCO_ASHOST = JCO_ASHOST;
} public String getJCO_SYSNR() {
return JCO_SYSNR;
} public void setJCO_SYSNR(String JCO_SYSNR) {
this.JCO_SYSNR = JCO_SYSNR;
} public String getJCO_CLIENT() {
return JCO_CLIENT;
} public void setJCO_CLIENT(String JCO_CLIENT) {
this.JCO_CLIENT = JCO_CLIENT;
} public String getJCO_USER() {
return JCO_USER;
} public void setJCO_USER(String JCO_USER) {
this.JCO_USER = JCO_USER;
} public String getJCO_PASSWD() {
return JCO_PASSWD;
} public void setJCO_PASSWD(String JCO_PASSWD) {
this.JCO_PASSWD = JCO_PASSWD;
} public String getJCO_LANG() {
return JCO_LANG;
} public void setJCO_LANG(String JCO_LANG) {
this.JCO_LANG = JCO_LANG;
} public String getJCO_POOL_CAPACITY() {
return JCO_POOL_CAPACITY;
} public void setJCO_POOL_CAPACITY(String JCO_POOL_CAPACITY) {
this.JCO_POOL_CAPACITY = JCO_POOL_CAPACITY;
} public String getJCO_PEAK_LIMIT() {
return JCO_PEAK_LIMIT;
} public void setJCO_PEAK_LIMIT(String JCO_PEAK_LIMIT) {
this.JCO_PEAK_LIMIT = JCO_PEAK_LIMIT;
} public String getJCO_SAPROUTER() {
return JCO_SAPROUTER;
} public void setJCO_SAPROUTER(String JCO_SAPROUTER) {
this.JCO_SAPROUTER = JCO_SAPROUTER;
} @Override
public String toString() {
return "SapConn{" +
"JCO_ASHOST='" + JCO_ASHOST + '\'' +
", JCO_SYSNR='" + JCO_SYSNR + '\'' +
", JCO_CLIENT='" + JCO_CLIENT + '\'' +
", JCO_USER='" + JCO_USER + '\'' +
", JCO_PASSWD='" + JCO_PASSWD + '\'' +
", JCO_LANG='" + JCO_LANG + '\'' +
", JCO_POOL_CAPACITY='" + JCO_POOL_CAPACITY + '\'' +
", JCO_PEAK_LIMIT='" + JCO_PEAK_LIMIT + '\'' +
", JCO_SAPROUTER='" + JCO_SAPROUTER + '\'' +
'}';
}
}
然后编写用来建立sap连接的SapConn作为连接类
编写连接类SAPConnUtils 下面是源码
/**
* Created by gang.xu01@hand-china.com on 2018/12/4
*/
public class SAPConnUtils { private static final String ABAP_AS_POOLED = "ABAP_AS_WITH_POOL"; /**
* 创建SAP接口属性文件。
* @param name ABAP管道名称
* @param suffix 属性文件后缀
* @param properties 属性文件内容
*/
private static void createDataFile(String name, String suffix, Properties properties){
File cfg = new File(name+"."+suffix);
if(cfg.exists()){
cfg.deleteOnExit();
}
try{
FileOutputStream fos = new FileOutputStream(cfg, false);
properties.store(fos, "for tests only !");
fos.close();
}catch (Exception e){
System.out.println("Create Data file fault, error msg: " + e.toString());
throw new RuntimeException("Unable to create the destination file " + cfg.getName(), e);
}
} /**
* 初始化SAP连接
*/
private static void initProperties(SapConn sapConn) {
Properties connectProperties = new Properties();
// SAP服务器
connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, sapConn.getJCO_ASHOST());
// SAP系统编号
connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR, sapConn.getJCO_SYSNR());
// SAP集团
connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, sapConn.getJCO_CLIENT());
// SAP用户名
connectProperties.setProperty(DestinationDataProvider.JCO_USER, sapConn.getJCO_USER());
// SAP密码
connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, sapConn.getJCO_PASSWD());
// SAP登录语言
connectProperties.setProperty(DestinationDataProvider.JCO_LANG, sapConn.getJCO_LANG());
// 最大连接数
connectProperties.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, sapConn.getJCO_POOL_CAPACITY());
// 最大连接线程
connectProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT, sapConn.getJCO_PEAK_LIMIT());
// SAP ROUTER
connectProperties.setProperty(DestinationDataProvider.JCO_SAPROUTER, sapConn.getJCO_SAPROUTER()); createDataFile(ABAP_AS_POOLED, "jcoDestination", connectProperties);
} /**
* 获取SAP连接
* @return SAP连接对象
*/
public static JCoDestination connect(SapConn sapConn){
System.out.println("正在连接至SAP...");
JCoDestination destination = null;
initProperties(sapConn);
try {
destination = JCoDestinationManager.getDestination(ABAP_AS_POOLED);
destination.ping();
System.out.println("已成功建立sap的连接");
} catch (JCoException e) {
System.out.println("Connect SAP fault, error msg: " + e.toString());
}
return destination;
} }
接下来编写一个简单的测试类test
/**
* Created by gang.xu01@hand-china.com on 2018/12/9
*/
public class testCon { public static void main(String[] args) { SapConn con = new SapConn(
"127.0.0.1",
"123",
"456",
"abc",
"abc",
"abc",
"123",
"321",
"123456"
); // 测试连接
SAPConnUtils.connect(con);
}
}
如果出现如下结果表明连接失败,请检查连接类。
此时如果调用结果如下则表明建立连接成功。
四、常见报错
- 缺少build path
这个错误是因为缺少了上述提到的文件,请按照文中提到的顺序将其加入项目中即可。
(一)通过JAVA连接SAP (sapjco3.jar在Windows和MacOS上的配置)的更多相关文章
- JAVA连接SAP
1.首先需要在SAP事务码SE37中新建一个可以被远程调用的RFC 事务码:SE37 新建一个函数组:输入事务码SE37回车后,来到函数构建器屏幕,到上面一排菜单栏:转到 -> 函数组 -> ...
- Java连接Sap系统调并调用RFC函数
参考博客:https://blog.csdn.net/qq_36026747/article/details/81287462 https://www.cnblog ...
- 官网下载Java连接MySql驱动jar包
官网地址:http://dev.mysql.com/downloads/connector/ 1.选择下载驱动 2.选择下载 3.可以不登录直接下载 4.下载下来的是zip压缩包,解压之后,文件夹中有 ...
- java连接OPC之——Windows7 With SP1 网络OPC的DCOM配置
由于 OPC(OLE for Process Control)建立在 Microsoft 的 COM(COmponent Model)基础 上,并且 OPC 的远程通讯依赖 Microsoft 的 D ...
- (二)通过JAVA调用SAP接口 (增加一二级参数)
(二)通过JAVA调用SAP接口 (增加一二级参数) 一.建立sap连接 请参考我的上一篇博客 JAVA连接SAP 二.测试项目环境准备 在上一篇操作下已经建好的环境后,在上面的基础上新增类即可 三. ...
- centos7中配置java + mysql +jdk +使用jar部署项目
centos7中配置java + mysql +jdk +使用jar部署项目 思维导图 1. 配置JDK環境 1.1下载jdk安装包 Java Downloads | Oracle 1.2 将下载j ...
- java call sap
1.下载需要的jar,windows用dll,linux用so win下载地址 linux下载地址 win下载地址new 2.环境: windows -> sapjco3.dll放到wi ...
- 最新.net和Java调用SAP RFC中间件下载
还记得2012年初我发布的全网络第一个关于.net 连接SAP RFC的NCO3原创博文,用的就是SAP出的最新的.Net Connector 3.0的版本,在那个时候都是普遍用其他蹩脚的方式或Web ...
- 使用 SSL 加密的 JDBC 连接 SAP HANA 数据库
近期客户为满足安全要求,提了让业务应用使用 SSL 方式连接 SAP HANA 数据库的需求.本人查询 SAP官方文档 发现数据库支持 SSL 连接,有参数直接加到 JDBC 的 URL 后边就行了, ...
随机推荐
- 前置控制器一DispatcherServlet
org.springframework.web.servlet.DispatcherServlet 前言 DispatcherServlet是SpringMVC的核心控制器,就像是SpringMVC的 ...
- jQuery 事件 click() 方法,dblclick() 方法
click() 方法 当点击元素时,会发生 click 事件. 当鼠标指针停留在元素上方,然后按下并松开鼠标左键时,就会发生一次 click. click() 方法触发 click 事件,或规定当发生 ...
- 线性dp——hdu6578经典dp
多校第一场第一题,这种类型的dp之前做过两题,状态转移一般是从当前状态往后推的 很经典的dp,不过很卡时间 /* 定义 dp[t][i][j][k]代表填完前 t 个位置后,{0, 1, 2, 3} ...
- 线性dp(记忆化搜索)——cf953C(经典好题dag和dp结合)
非常好的题!和spoj 的 Mobile Service有点相似,用记忆化搜索很容易解决 看了网上的题解,也是减掉一维,刚好可以开下数组 https://blog.lucien.ink/archive ...
- 48 git使用
0 引言 git/github是当前最好的代码版本管理和协同工作工具.最近我终于用上了这一先进工具,撒花撒花! # 先把大神廖雪峰的链接献上https://www.liaoxuefeng.com/wi ...
- CSS:CSS 实例
ylbtech-CSS:CSS 实例 1.返回顶部 1. CSS 实例 CSS背景 设置页面的背景颜色 设置不同元素的背景颜色 设置一个图像作为页面的背景 错误的背景图片 如何在水平方向重复背景图像 ...
- iOS开发UIResponder之NSUndoManager
1.简介 UIResponder有个属性:NSUndoManager @property(nullable, nonatomic,readonly) NSUndoManager *undoManage ...
- TCP之1460MSS和1448负载
TCP和1448 1448字节是实际场景下,单个TCP包的实际运载能力.也就是说,实际场景下,上层调用send(1000KB),下层会把这1000KB封装成多个TCP包进行发送.单个TCP包每次打包1 ...
- tensorflow TypeError: Can not convert a float32 into a Tensor or Operation
遇到这种情况可能是你的程序中有和你定义的tensor 变量重名的其他变量名字,jishi在for循环中使用了这个名字的作为临时变量也不行.tenor 变量很娇气.坑了我一晚上的时间. 比如:x = t ...
- mysql保存当前时间精确到秒
用mybatis在mysql中保存字段精确到秒须要两个步骤. 1.如今mysql中将时间字段改为datetime 比如:alter table tablename add pay_date da ...