最近项目中使用sap的接口,之前项目中有案例,所以自己在现有基础上理解了如何用hibersap创建映射的实体,连接到sap的系统进行数据接口的传输.
一.需要的工具:JBoss Forge HiberSap for Forge
1.1 HiberSap下载
下载地址:
http://hibersap.org/details/ hibersap官网(下载项目通过hibersap的jar)
下面是maven的依赖配置:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany</groupId>
<artifactId>hibersap-example</artifactId>
<version>1.0.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.hibersap</groupId>
<artifactId>hibersap-core</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>org.hibersap</groupId>
<artifactId>hibersap-jco</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>org.hibersap</groupId>
<artifactId>sapjco3</artifactId>
<version>3.0.12</version>
</dependency>
</dependencies>
</project>
也可以去github下载:
https://github.com/hibersap
1.2 jboss forge下载
[url] http://forge.jboss.org/ [/url] jboss forge官网(下载forge-distribution-1.4.4.Final)
https://vimeo.com/45260307/这个网站有高手自己写了jboss forge for hibersap用来自动生成映射类。
1.3
本次教程是教大家下面的东西:
https://github.com/drbunsen-bsteam/plugin-hibersap这个是综合包
https://github.com/forge/plugin-hibersap 单独的不含forge的包
二,配置环境:下载下来的综合包中,目录如下可以加forge1.4.4的jar拿出来。
全部放在另一个目录下面,你可以自行选择,我放在E:下面
2.1 cmd命令来到E:\forge\plugin-hibersap-master_all\plugin-hibersap-master 验证下载的jar没有问题。执行mvn clean package -Dmaven.test.skip=true 前提你得安装maven环境。顺带你要修改里面pom.xml参数,因为你下的jar,人家不清楚你需要的版本是多少的。
<properties>
<jco.version>3.0.10</jco.version>
<servlet-api.version>3.0.1</servlet-api.version>
<validation-api.version>1.0.0.GA</validation-api.version>
<hibersap.version>1.2.0-Beta03</hibersap.version>
<forge.api.version>1.4.4.Final</forge.api.version>
</properties>
# 使用jaxb-impl 2.2.7版本
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.2.7</version>
</dependency>
2.2 如果你在clean的时候一直报错,说sapjco从中央仓库找不到.这个就是说你的当前的环境需要代理,去你maven环境中 更改 setting.xml的proxy的代理获取.
2.3 生成一个maven 的java项目 执行下列的代码 去另一个没有pom.xml的环境目录去执行.我去了E:
mvn archetype:generate -B -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.1 -DgroupId=com.dunkcoder -DartifactId=testHibersap -Dversion=1.0-SNAPSHOT -Dpackage=com.dunkcoder
2.4 在生成好的testHibersap做如下操作:
# pom.xml中增加sap-jco引用
<dependency>
<groupId>com.sap</groupId>
<artifactId>sap-jco</artifactId>
<version>3.0.10</version>
</dependency>
# 暂且hibersap.xml先长成这样,放在testHibersap\src\main\resources\META-INF\目录下
<?xml version="1.0" encoding="UTF-8"?>
<hibersap xmlns="urn:hibersap:hibersap-configuration:1.0">
<session-manager name="sapenvtest">
<context>org.hibersap.execution.jco.JCoContext</context>
<properties>
<property name="jco.client.client" value="jco_client" />
<property name="jco.client.user" value="jco_user" />
<property name="jco.client.passwd" value="jco_passwd" />
<property name="jco.client.lang" value="jco_lang" />
<property name="jco.client.ashost" value="jco.ashost" />
<property name="jco.client.sysnr" value="jso.sysnr" />
<property name="jco.destination.pool_capacity" value="pool_capacity" />
</properties>
<annotated-classes>
</annotated-classes>
</session-manager>
</hibersap>
2.5 forge for hibersap以及准备项目都准备好了,现在要配置forge的环境了。
去E:\forge\forge-distribution-1.4.4.Final\bin 双击forge.bat
执行如下操作
# 本地安装方式
[no project] $ forge source-plugin E:\forge\plugin-hibersap-master
# ... ... 需要多等一会,没有问题,plugin-hibersap安装成功
The following plugins have been activated: [generate-sap-entities]
# 切换到testHibersap项目
[no project] $ cd E:\testHibersap
[testHibersap] testHibersap $
# 查看命令帮助
[testHibersap] testHibersap $ help generate-sap-entities
# 在hibersap plugin的config目录下初始化
#C:\Users\zhiming.zeng\.forge\plugins\org\hibersap\forge\hibersap-plugin
\config
sap-connection.properties文件,控制台会打印出当前各个配置项及值
[testHibersap] testHibersap $ generate-sap-entities list-properties
jco.destination.pool_capacity=1
jca.connectionspec.factory=org.hibersap.execution.jca.cci.SapBapiJcaAdapterConnectionSpecFactory
session-manager.name=SM001
jco.client.lang=en
jco.client.ashost=some.sap-system.com
jco.client.user=sapuser
jco.client.sysnr=00
jco.client.passwd=password
jco.context=org.hibersap.execution.jco.JCoContext
jca.context=org.hibersap.execution.jco.JCAContext
jco.client.client=001
jca.connection.factory=java:/eis/sap/A12
# jca两个配置项用不到,删除
generate-sap-entities delete-property --key jca.connectionspec.factory
generate-sap-entities delete-property --key jca.connection.factory
# 逐个修改SAP连接配置,也可以直接修改sap-connection.properties文件
# 类似your_passwd之类比较复杂,可用双引号""包括起来
generate-sap-entities set-property --key session-manager.name --value sapenvtest
generate-sap-entities set-property --key jco.client.client --value your_client
generate-sap-entities set-property --key jco.client.user --value your_user
generate-sap-entities set-property --key jco.client.passwd --value your_passwd
generate-sap-entities set-property --key jco.client.lang --value your_lang
generate-sap-entities set-property --key jco.client.ashost --value your_ashost
generate-sap-entities set-property --key jco.client.sysnr --value your_sysnr
generate-sap-entities set-property --key jco.destination.pool_capacity --value your-pool_capacity
2.6如果你在执行help generate-sap-entities发现是出现no such commod表示
C:\Users\zhiming.zeng\.forge\plugins\org\hibersap\forge\hibersap-plugin\1.1.0-SNAPSHOT-bf728df9-53f8-49a9-89bb-e7cf28bcd739 你的路径是你的当前用户名
下面的jar可能缺失.原因是E:\forge\plugin-hibersap-master_all\plugin-hibersap-master的pom.xml可能没有在中央仓库找到jar。解决办法是在pom.xml添加你的私服
<repository>
<id>my_nexus</id>
<name>my_nexus for Maven</name>
<url>http://172.16.3.41:8081/nexus/content/groups/public/</url>
</repository>
三, 生产映射代码:还是在forge.bat里面的cmd命令窗口
3.1 ABAP程序员会告诉你应该调用哪些SAP RFC或BAPI函数,怎么传参,返回结果如何判断等。接下来是重头戏,以下面3个为例,按照向导提示逐步往下生成Java代码进行测试(*号为通配符)。按照我的步骤来,整个过程不会有什么错误(代码生成向导中选择了SessionManager:saptestenv的话会自动修改hibersap.xml配置,添加annotated-classes值项):
[testHibersap] testHibersap $ generate-sap-entities --name-pattern *STFC_CONNECTION*
[testHibersap] testHibersap $ generate-sap-entities --name-pattern *BAPI_COMPANYCODE_GETLIST*
[testHibersap] testHibersap $ generate-sap-entities --name-pattern *RFC_SYSTEM_INFO*
如果无论如何都不能正常生成代码,是SAP方RFC或BAPI的问题,本人就曾经遭遇过此种情况。
3.2 在eclipse中导入testHibersap项目,当然,自动生成的代码有些小瑕疵:BapiCompanycodeGetlist和RfcSystemInfo的无参构造函数少了大括号,手工补上。接下来写SapJCoUtil类并测试:
package com.dunkcoder.util;
import java.util.List;
import org.hibersap.configuration.AnnotationConfiguration;
import org.hibersap.session.Session;
import org.hibersap.session.SessionManager;
import com.dunkcoder.hibersap.BapiCompanycodeGetlist;
import com.dunkcoder.hibersap.CompanycodeList;
import com.dunkcoder.hibersap.RfcSystemInfo;
import com.dunkcoder.hibersap.RfcsiExport;
import com.dunkcoder.hibersap.StfcConnection;
public class SapJCoUtil {
public static String echoTextOfStfcConnection() {
AnnotationConfiguration config = new AnnotationConfiguration("sapenvtest");
SessionManager sessionManager = config.buildSessionManager();
final Session session = sessionManager.openSession();
StfcConnection conn = new StfcConnection("requtext");
session.execute(conn);
session.close();
return conn.get_echotext();
}
public static RfcsiExport getSystemInfo() {
AnnotationConfiguration config = new AnnotationConfiguration("sapenvtest");
SessionManager sessionManager = config.buildSessionManager();
final Session session = sessionManager.openSession();
RfcSystemInfo info = new RfcSystemInfo();
session.execute(info);
session.close();
return info.get_rfcsiExport();
}
public static List<CompanycodeList> getCompanyCodeList() {
AnnotationConfiguration config = new AnnotationConfiguration("sapenvtest");
SessionManager sessionManager = config.buildSessionManager();
final Session session = sessionManager.openSession();
BapiCompanycodeGetlist list = new BapiCompanycodeGetlist();
session.execute(list);
session.close();
return list.get_companycodeList();
}
public static void main(String[] args) {
echoTextOfStfcConnection();
getSystemInfo();
getCompanyCodeList();
}
}
嗯,还可以,简单清爽,省却了包装sapjcoX.jar代码的烦恼,具体项目中可将AnnotationConfiguration和SessionManager改为注入方式。
测试项目testhibersap的完整代码在这里。
LinuxX64+Tomcat环境,找不到sapjco3怎么办?
==>修改catalina.sh文件中的JAVA_OPTS,指定-Djava.library.path=/usr/sapjco3,将libsapjco3.so放到该目录。
经验来自与我领导二哥 本章只是更精细的说明
http://blog.dunkcoder.com/20141021/connect-sap-with-hibersap/
顺带一提jco原始的操作文档在如下url
[url] http://help.sap.com/saphelp_nw70/helpdata/EN/47/80f671ee6e4b41b63c0fe46bd6e4f8/frameset.htm[/url]