프로젝트 할 때 SAP 과 연동 작업이 필요해서 이와 관련된 환경을 셋팅했다.

다음에 또 같은 환경을 쓸 때 참고하려고 sap jco 연동 방법 정리해 둔다~~


1. SAP Jco란?


   - Java에서 SAP을 연동하여 시스템을 구축할 때 사용되는 SAP JAVA Connector.

   - Java에서 SAP의 데이터를 가져오기 위해 SAP Jco 사용



2. 필요 파일


   - sapjco.jar

   - sapjco.dll



3. 환경 셋팅


    ** 주의: sapjco 관련 파일은 사용자의 OS 환경에 맞게 다운받아 설치해야 한다. 32bit 환경인데 64bit용 jco 파일을 설치하면 당연히 에러 ^^


   (1) sapjco.dll 파일을 C 드라이브 > Windows > System32 아래로 넣어준다. 




   (2) sapjco.jar 파일은 maven 사용 시, pom 파일에 추가해주고 

       maven 사용하지 않는 경우,  프로젝트 우클릭 > properties > Java build path > libraries > add external jars 해서 추가해주면 된다.

       (아래 사진 systemPath 태그에는 로컬 파일 경로를 명시해주었다)



      --> maven 사용 시 중앙 리파지토리에 sapjco3.jar 파일을 등록하여 받아 쓰는 것도 가능하지만,

           그렇게 설정하면 sapjco3.jar 파일에 버전정보가 붙은채로 땡겨오게 되고, 버전정보가 붙으면 maven build 시 jar 파일을

           정상적으로 인식하지 못하는 에러가 발생했다. 그래서 우선 maven build 시 로컬 경로로부터 jar파일을 가져다 쓸 수 있도록

           설정하여 사용했다.



 (3) SAP 연결 정보 설정


     - 내가 한 프로젝트의 경우 연결할 SAP 서버 정보를 properties 파일에서 관리했다.

       properties 파일에는 아래와 같은 정보가 필요하다.


 sap.client =

 sap.host = 

 sap.language = ko

 sap.systemnumber =

 sap.user =                ....접속 계정 정보

 sap.password =           ....접속 계정 정보


 #connection pool 설정

 sap.pool.capacity =        ....허용 pool 갯수

 sap.pool.limit =           ....최대 허용 pool 갯수



    - context-common.xml 파일 내 위에 설정한 properties 파일에 대한 설정을 해주었다.

<util:properties id="globalProperties"

location="classpath:/property/global_test.properties" />              // global_test.properties 라는 파일에 sap 연결정보를 설정


<!-- Properties 초기화 -->

<bean class="groupdId.artifactId.cmm.sapjco.JcoConnection">                // 위의 globalProperties 파일을 참고하여 JcoConnection class 초기화

<constructor-arg>

<ref bean="globalProperties" />

</constructor-arg>

</bean> 


 



(4) SAP 연결 정보 및 connection 얻기


     - Properties 클래스는 HashTable<Object, Object> class 를 확장하고 있는 클래스로, key, value 형태의 properties 값들을 받는 역할을 한다.

     - properties 파일에 정의해 놓았던 sap 연결 정보들을 key, value 형태로 Properties 클래스에 셋팅해준다.

     - 앞에서 초기화 했던 JcoConnection class에서 globalProperties 파일을 통해 sap 연결정보 get!


 public JcoConnection(Properties jcoProperties)

    {

    try

    {

    Properties connectProperties = new Properties();

   

    connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, jcoProperties.getProperty("sap.host"));

    connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR, jcoProperties.getProperty("sap.systemnumber"));

    connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, jcoProperties.getProperty("sap.client"));

    connectProperties.setProperty(DestinationDataProvider.JCO_USER, jcoProperties.getProperty("sap.user"));

    connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, jcoProperties.getProperty("sap.password"));

    connectProperties.setProperty(DestinationDataProvider.JCO_LANG, jcoProperties.getProperty("sap.language"));

    connectProperties.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, jcoProperties.getProperty("sap.pool.capacity"));

    connectProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT, jcoProperties.getProperty("sap.pool.limit"));

   

    File destCfg = new File(jcoProperties.getProperty("sap.host")+".jcoDestination");


    FileOutputStream fos = new FileOutputStream(destCfg, false);

    connectProperties.store(fos, "for tests only !");

    fos.close();

   

    destination = JCoDestinationManager.getDestination(jcoProperties.getProperty("sap.host"));

                repository = destination.getRepository();

            

    }catch (Exception e)

    {

    // 

    }

    } 



       

(5) RFC Function 얻기

     - SAP으로부터 필요한 데이터를 주고받기 위해 SAP에서 제공하는 함수를 가져온다.


 public JCoFunction getFunction(String functionStr) {

JCoFunction function = null;

try {

function = repository.getFunction(functionStr);

} catch (Exception e) {

throw new RuntimeException("Problem retrieving JCO.Function object.");

}

if (function == null) {

throw new RuntimeException("Not possible to receive function. ");

}


return function;

}

    



(6) RFC Function 실행


public void execute(JCoFunction function) {

try {

JCoContext.begin(destination);

function.execute(destination);

} catch (JCoException e) {

//

} finally {

            try {

                JCoContext.end(destination);

            } catch (JCoException e) {

               //

            }

        }




(7) 서버 기동 시 SAP 연동 


    + 연동 관련 로그 정보 추후 추가 예정




__________________________________________________________________________________________________________________________________________________________

** 본 포스팅에 대해 수정해야할 부분이나 추가 의견 등이 있으신 분들은 댓글 달아주세요. 언제나 환영입니다 :) 

** 본 포스팅을 reference 자료로 참고하실 분들은 출처를 꼭 밝혀주시기 바랍니다.



'JAVA' 카테고리의 다른 글

예외처리 관련 참고문서  (0) 2017.06.11
로깅(Logging) 참고문서  (0) 2017.06.11
JAVA - 향상된 for 문 (from Java1.5)  (0) 2017.02.26
system32와 systemWOW64  (0) 2017.02.26
JAVA_리팩토링  (1) 2017.01.08

+ Recent posts