一.需要的工具:JBoss Forge HiberSap for Forge
1.1 HiberSap下载
下载地址:
http://hibersap.org/details/ hibersap官网(下载项目通过hibersap的jar)
下面是maven的依赖配置:
4.0.0 com.mycompany hibersap-example 1.0.0-SNAPSHOT org.hibersap hibersap-core 1.2.0 org.hibersap hibersap-jco 1.2.0 org.hibersap sapjco3 3.0.12
也可以去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,人家不清楚你需要的版本是多少的。
# 使用jaxb-impl 2.2.7版本 3.0.10 3.0.1 1.0.0.GA 1.2.0-Beta03 1.4.4.Final com.sun.xml.bind jaxb-impl 2.2.7
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引用# 暂且hibersap.xml先长成这样,放在testHibersap\src\main\resources\META-INF\目录下 com.sap sap-jco 3.0.10 org.hibersap.execution.jco.JCoContext
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添加你的私服
my_nexus my_nexus for Maven http://172.16.3.41:8081/nexus/content/groups/public/
三, 生产映射代码:还是在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 ListgetCompanyCodeList() { 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]