最先进项目需要跟SAP进行交互,从windos 环境切到正式环境出现很多问题简单介绍下解决方法,不正确的地方还望大家指正
一、确认jar包
1、用于环境变量的jco for linux:
libsapjcorfc.so、libsapjcorfc.so、sapjco.jar(应用程序用的相同)
libstdc++-libc6.2-2.so.3(这个具体根据环境而定、其中一台机器可以另外一台机器必须要用64位的libstdc++.so.5)
2、用于应用程序的sapjco-ntintel-2.1.8:
librfc32.dll、sapjcorfc.dll、sapjco.jar(同上)
SAP依赖的环境包要求很严格不管是区分系统是32位64位、区分jco的版本号,因此需要两个地方的版本保持一致:
1、系统环境变量2、程序应用的DLL
在茫茫资源中,确保这些保持统一确实很困难。(可以从我的资源中下载)
二、安装环境:
1)Centos6.5 64位
2)JDK 1.7 64位
3)TOMCAT7.0
三、java连sap步骤:
1)下载sapjco.jar
请到service.sap.com/connectors,下载sapjco.jar,本案下载的是sapjco-linuxintel-2.1.8.zip
2)将sapojco文件添加到环境变量中
解压zip文件,将其中librfccm.so、libsapjcorfc.so两个文件,拷贝复制到
JDK的安装目录中$JAVA_HOME/jre/lib/i386/server,我的是在/usr/local/java/jdk1.7.0_79/jre/lib/amd64/server
可能根据cpu或者是jdk的不同有的是i386有的是amd64
同时并将sapjco.jar复制到特定目录下,然后设置CLASSPATH变量即可。
3)在进行sap rfc连接的时候,需要libstdc++-libc6.2-2.so.3库文件,
可从csdn上下载,http://download.csdn.net/source/648150,
将libstdc++-libc6.2-2.so.3库文件复制到librfccm.so、libsapjcorfc.so文件所在的目录即可;
这个根据系统环境不同依赖的libstdc++版本不一样,同样的ibrfccm.so、libsapjcorfc.so在另外一台电脑上必须依赖
libstdc++.so.5,提示:
Co error: java.lang.ExceptionInInitializerError: JCO.classInitialize(): Could not load middleware layer 'com.sap.mw.jco.rfc.MiddlewareRFC'
JCO.nativeInit(): Could not initialize dynamic link library sapjcorfc [/usr/local/java/jdk1.7.0_79/jre/lib/amd64/server/libsapjcorfc.so: libstdc++.so.5: 无法打开共享对象文件: 没有那个文件或目录].
java.library.path [/usr/local/java/jdk1.7.0_79/jre/lib/amd64/server:/usr/local/java/jdk1.7.0_79/jre/lib/amd64:/usr/local/java/jdk1.7.0_79/jre/../lib/amd64::/usr/local/java/jdk1.7.0_79/jre/lib/amd64/server:/usr/java
一开始以为是没有安装libstdc++ 重新装了遍libstdc++.so.5还是不好使,将安装的libstdc++.so.5拷贝到libstdc++-libc6.2-2.so.3目录下提示:
JCo error: java.lang.ExceptionInInitializerError: JCO.classInitialize(): Could not load middleware layer 'com.sap.mw.jco.rfc.MiddlewareRFC'
JCO.nativeInit(): Could not initialize dynamic link library sapjcorfc [/usr/local/java/jdk1.7.0_79/jre/lib/amd64/server/libsapjcorfc.so: libstdc++.so.5: 错误 ELF 类: ELFCLASS32]. java.library.path [/usr/local/java/jdk1.7.0_79/jre/lib/amd64/server:/usr/local/java/jdk1.7.0_79/jre/lib/amd64:/usr/local/java/jdk1.7.0_79/jre/../lib/amd64::/usr/local/java/jdk1.7.0_79/jre/lib/amd64/server:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib]
at com.sap.mw.jco.JCO.<clinit>(JCO.java:871)
at com.sap.mw.jco.About.<init>(About.java:49)
at com.sap.mw.jco.About.main(About.java:110)
网上一查刚才放到目录下的libstdc++.so.5是/usr/lib/内32位版本,
到本地usr/lib64目录下 执行 ls libstdc++* 有个 6的版本比5的高,将libstdc++.so.6拷贝到目录下问题依旧
最后从别的机器上 /usr/lib64/下找了个libstdc++.so.5 64位版本,好了!!!!
四、以下是环境变量的几个设置:
vim /etc/profile
在末尾加上ibrfccm.so、libsapjcorfc.so加入到LD_LIBRARY_PATH、sapjco.jar加入到CLASSPATH中
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/java/jdk1.7.0_79/jre/lib/amd64/server
export CLASSPATH=$CLASSPATH:/usr/local/java/jdk1.7.0_79/lib/sapjco.jar
保存并发布source /etc/profile(一定要执行)
设置完成后执行:java -jar /usr/local/java/jdk1.7.0_79/lib/sapjco.jar 查看是否成功
若不报错说明成功!
最后将librfc32.dll、sapjcorfc.dll、sapjco.jar导入到部署程序的WEB-IND/lib下,
以防万一把sapjco.jar也放到tomcat 的 lib中,OK,此时在查看应用是否可以正常调用SAP了。