jboss forge整合 hibersap

最近项目中使用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拿出来。
    jboss forge整合 hibersap_第1张图片
    全部放在另一个目录下面,你可以自行选择,我放在E:下面
    jboss forge整合 hibersap_第2张图片
    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]
  

你可能感兴趣的:(forge,hibersap)