프로젝트 할 때 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

1. AJAX 통신이란?


   - Asynchronous Javascript And XML

   - 비동기로 서버와 데이터를 주고 받는 javascript 기술!

   - XMLHttpRequest 객체가 핵심. XMLHttpRequest는 서버측 javascript와 통신하기 위한 ajax의 핵심 기술이며 '비동기' 통신을 가능케 한다.

     즉,  ajax 통신을 사용하게 되면 페이지를 새로 리로딩 하지 않아도 데이터가 슉슉 바뀌는 것!!


   - ajax가 적용된 페이지는 전체 HTML이 아닌, XML이나 JSON 형식으로 구성된 새로운 데이터만을 XMLHttpRequest 객체를 통해 받아오기

     때문에, 사용자에게 페이지 이동없이 새로운 내용을 제공할 수 있다.


  


  Q. 비동기 통신을 사용하기 전, 기존 통신의 문제점은?


  웹 페이지에는 요청/응답의 관계가 성립된다. 기존 웹페이지 통신 방식에서는 응답 시, 페이지 redirect 처리가 필수였다. 

  때문에 사용자 입장에서는 모든 처리마다 페이지 리로딩이 발생했다. 조그만한 변경사항을 보여주기 위해, 전체 HTML 코드를

  재전송해야하는 비효율적인 처리 방식이다. --> 과도한 트래픽 발생, 서버 유지비용 증가..




2. $.ajax() 함수


    - ajax() 함수에 웹 서버로 보내기 위한 요청 설정 정보와 통신이 성공했을 경우 실행 될 함수,  통신에 실패했을 경우 실행 될 함수를 설정한다.

        

 $.ajax({

    "url": "접속할 페이지 주소",

    "dataType": "전송 데이터 type(ex: json)",

    "type": "get/post",

    "data": "전송할 data",

    "success": function(data) {

                  .... // 통신 성공시 실행 함수

                 }

    });  




__________________________________________________________________________________________________________________________________________________________

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

** 본 포스팅은 아래의 reference 들을 참고하여 내용을 덧붙인 글입니다. 혹시, 문제가 되는 경우 알려주시면 조치하도록 하겠습니다.

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


  - 책: [Javascript, jQuery, Ajax 완벽가이드], 저자: 주영아 이광호, 출판사: Interpress


  

'UX' 카테고리의 다른 글

[WebSquare5] 웹스퀘어5 연동  (0) 2017.04.29
jQuery 기초  (0) 2017.02.26
Javascript 기초2  (0) 2017.02.26
Javascript 기초  (0) 2017.02.26
[Error] maven 프로젝트 checkout 후 JSP 파일 에러  (0) 2017.01.29

1. jQuery 란?


   - Javascript Library 중 하나

   - 브라우저 호환성 o

   - ajax 통신처리 용이

   - 참고: http://www.jquery.com 



2. jQuery 사용 이점


   - 크로스 브라우징: 한번의 코딩으로 모든 브라우저에 적용됨

   - 다양한 플러그인: jquery 기반 플러그인들이 무료로 배포되고 있음.



3. jQuery 사용 선언


   - jQuery를 사용하기 위해 다운로드 받은 js 파일을 HTML 내에서 참조해야 한다.

  

  <!-- JQUERY -->

    <script type="text/javascript" src="${pageContext.request.contextPath}/resources/js/jquery/jquery-1.11.1.min.js"></script>

  <script type="text/javascript" src="${pageContext.request.contextPath}/resources/js/jquery/jquery.session.js"></script>

<script type='text/javascript' src='${pageContext.request.contextPath}/resources/js/jquery/jquery.cookie.js'></script>

<script type='text/javascript' src='${pageContext.request.contextPath}/resources/js/jquery/jquery.hoverIntent.minified.js'></script>

<script type='text/javascript' src='${pageContext.request.contextPath}/resources/js/jquery/jquery.dcjqaccordion.2.9.js'></script>

<script type='text/javascript' src='${pageContext.request.contextPath}/resources/js/jquery/jquery.form.min.js'></script>

<script type='text/javascript' src='${pageContext.request.contextPath}/resources/js/jquery/jquery.validate.js'></script> 


   - 위와 같은 방법 외에 src="http://code.jquery.com/jquery-1.11.0.min.js" 라고 설정하여 받아올 수도 있지만 이는 원격지 파일을 참조하는 

     것이기 때문에 인터넷이 가능한 환경에서만 정상 수행된다.



4. 최상위 객체 '$'


    - $ 객체는 jQuery의 모든 기능을 담고 있는 최상위 객체다. 



5. 셀렉터 (Selector)


   셀렉터 때문에 개발 처음 할 때 고생을 좀 했다. 정리해 보면 쉽게 구별해 쓸 수 있었다. 셀렉터는 좀 알아둬야 할 것같다.


    * class 셀렉터: (".class명")

    * id 셀렉터: ("#id명")

    * 태그 셀렉터: ("태그명")

    

    - 셀렉터 조합 


       * 여러 셀렉터에 접근:  콤마로 구분

                           (".class명 , #id명")


       * 계층관계 셀렉터 접근: 연속으로 명시 (공백 없이)

                                       (".class명#id명")


       * 셀렉터 내 특정 값을 가진 요소에 접근:  [요소=값]

 

 $(this).find("input[type=text]").each(function(j,field) {

   ......

  }      --> input type이 text인 요소들 각각 을 선택하는 셀렉터




__________________________________________________________________________________________________________________________________________________________

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

** 본 포스팅은 아래의 reference 들을 참고하여 내용을 덧붙인 글입니다. 혹시, 문제가 되는 경우 알려주시면 조치하도록 하겠습니다.

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





'UX' 카테고리의 다른 글

[WebSquare5] 웹스퀘어5 연동  (0) 2017.04.29
AJAX 통신 기초  (0) 2017.02.26
Javascript 기초2  (0) 2017.02.26
Javascript 기초  (0) 2017.02.26
[Error] maven 프로젝트 checkout 후 JSP 파일 에러  (0) 2017.01.29

+ Recent posts