Centos 部署 java sap 环境 sapjco2.1.8

来源:互联网 发布:搜索优化 编辑:程序博客网 时间:2024/06/11 01:33

最先进项目需要跟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了。

1 0