
여기서 회사내 SAP서버를 이용하여 JCA 연결 테스트를 진행을 했습니다.
결론부터 말씀드리자면 SAP product(예:SAP J2EE Server, Portal등) 외부에서 JCA를 만드는 것 자체가 안되네요.
결론은 JCA 공부만 잘했다는 거지요.
JCA 구현의 내부에는 connection관련 interface를 inheritance를 통하여 구현한 후 JNDI를 통해 client side로 전달해 주게 됩니다. 하지만 JCO.Client, JCO.Connection 등의 객체가 static class 로 구현되어 있어 상속 자체가 불가능한 구조입니다.
즉 CCI(Common Client Interface) type으로 connection을 만든다 하더라도 JCO의 class type으로 변환이 불가능하기 때문에 client side에서 SAP와의 연결객체를 얻어올 수 없었던 것이 원인이었습니다.
JCA를 만들기 전에 SAP JCA의 구현사례를 모든 검색엔진을 통해서 찾아봤는 데 없었던 이유가 바로 이 때문이었습니다.
혹시나 하여 검색어를 "SAP JCO JCA can't"라는 이름으로 검색했더니 IBM의 DeveloperWork와 javaranch에 이런 문구가 작성되어 있네요.
IBM : "JCA is supposed to be the recommended way for working with backend EIS systems - but the last time we checked, SAP's JCA resource adapter can't be used outside of their products (SAP J2EE Server and Portal). "
JavaRanch : "SAP also has a JCA resource adapter but you can't use it outside of SAP's J2EE product (it's also just a wrapper to the SAP JCO)."
대안은 다음과 같이 정의할 수 있겠네요.
1. SAP JCO.Pool와 PoolManager class를 wrapping하여 공통 모듈을 만들어 사용
2. Jakarta common pool을 사용하여 JCO connection을 commons pool로 위임.
위의 두 가지 방법 모두 simple한 구조입니다. 단순히 모니터링이 필요하다면 별도의 client pull 방식의 web application을 만들어 별도로 관리하는 방법을 구사하여야 합니다.
다른 좋은 방안이 있으시면 과감히 의견주십시오.
감사합니다.





