레이블이 PI/PO인 게시물을 표시합니다. 모든 게시물 표시
레이블이 PI/PO인 게시물을 표시합니다. 모든 게시물 표시

2024-09-14

SAP PI/PO 관리 및 운영 관련 API


SAP PI/PO(프로세스 통합/프로세스 오케스트레이션)에는 관리 및 운영에 관한 많은 API가 존재하지만, 이러한 API들이 잘 문서화되지 않아 활용하기 어려운 부분이 많습니다. 하지만 이 API들이 더 널리 알려지고 문서화된다면, 커뮤니티에서 새로운 사용 사례가 등장할 수 있고, 훌륭한 도구들이 만들어질 가능성이 큽니다. 이에 대해 공유할 수 있는 몇 가지 SAP PI/PO 관리 API 목록과 그 사용 방법을 소개하겠습니다.

1. Directory API(s)

설명: 이 API는 통합 빌더(Integration Builder)에서 통신 채널이나 값 매핑과 같은 객체를 관리할 수 있도록 도와주는 SOAP 기반의 API입니다. 이를 통해 통합 빌더 클라이언트를 자체적으로 만들거나 자동화 도구를 개발할 수 있습니다.
  • API 상태: 공식 문서화됨
  • 기술: SOAP/XML
  • 인증: HTTP 헤더를 통한 기본 인증(Basic Authentication)
  • 사용 방법: Webservice Navigator(웹서비스 내비게이터)를 통해 API 목록을 확인할 수 있습니다. URL: http(s)://<호스트>:<포트>/wsnavigator에서 시작하여 제공된 WSDL을 가져와 SoapUI로 테스트할 수 있습니다.
  • 추가 읽기 자료SAP Directory API 문서.

2. Simple Query

설명: HTTP/HTML 기반의 단순 API로, 엔터프라이즈 서비스 리포지토리(ESR)와 통합 빌더(Integration Builder) 객체에 대한 읽기 전용 액세스를 제공합니다. 메시지 매핑 및 기타 ESR 객체에 대한 정보를 추출하는 데 유용합니다.

Out of memory Error occurred in mapping runtime... 에러원인 및 해결방안 내용 정리

아래와 같은 에러가 발생될때에는 거의 인터페이스의 배치나 사이즈 그리고 타겟쪽 처리상태 등에 따라 발생되었던것 같음
failed to execute: MappingException: Out Of Memory Error occurred in mapping runtime, OutOfMemoryError: Java heap space(failed to allocate XXXXXXXX bytes) (max heap: XXXXMB)

AI로 정리해보았음

현상/원인

  • 한번에 처리할수 있는 메시지 수가 300개(처리스레드 100개 * 노드3개)
  • 300개는 단순히 스레드 수, 실제로 모든 메시지를 무조건 300개씩 처리할수 있는게 아님
  • 메시지 하나를 처리할수 있는데 필요 리소스에 따라 처리할수있는 양이 달라짐
  • OOM에러가 발생되었다는건 메모리가 부족하여 메시지를 처리할수 없다는 의미
  • 큰 메시지 사이즈는 시스템메모리를 더 많이 소모하게 만듬
  • 사용중인 스레드는 독립적으로 메시지를 처리할때 일정한 메모리를 사용하는데 동시에 처리되는 상황이라면 큰 메모리가 소모하게 됨
  • 매핑작업이 복잡할 경우 더 큰 메모리를 소모
  • 처리할수 있는 스레드 수와 상관없는 메모리 부족문제

해결책

  • Java heap메모리 크기를 증설
  • heap메모리는 Java System Properties에 Memory VM Parameters에서 확인 가능
  • 페이로드 크기를 줄이는것
  • 짧은 배치타임을 늘리거나 처리량을 분산
  • 최대 동시스레드 수를 줄여 메모리 소모를 제어

2024-09-13

SAP PO에서 SAP Integration Suite로 전환하는 마이그레이션 평가 도구 활용 가이드


SAP Integration Suite는 SAP와 비SAP 시스템 간 통합을 단순화하기 위한 최신 솔루션으로, 클라우드 및 온프레미스 애플리케이션, 데이터 소스 및 API를 통합할 수 있습니다. SAP는 기존의 SAP Process Orchestration(PO) 고객들이 SAP Integration Suite로 원활하게 전환할 수 있도록 마이그레이션 평가 도구를 제공하고 있습니다. 이번 글에서는 이 도구를 활용해 SAP PO에서 SAP Integration Suite로 전환하는 방법을 단계별로 설명합니다.


SAP Integration Suite의 마이그레이션 평가 도구란?

마이그레이션 평가 도구는 SAP PO에서 Integration Suite로 전환하는 과정을 보다 체계적으로 분석하고 준비하는 데 도움을 줍니다. 이 도구는 SAP PO의 기존 통합 시나리오를 분석하고, 각 시나리오의 마이그레이션 복잡성을 평가해, 전환 계획을 세우는 데 필요한 정보를 제공합니다.


필수 사전 준비

  1. Integration Suite 구독: SAP BTP 하위 계정에서 Integration Suite에 대한 구독이 활성화되어 있어야 합니다.
  2. SAP 클라우드 커넥터 설정: 온프레미스 SAP PO와 클라우드 기반 SAP Integration Suite 간의 연결을 위해 SAP 클라우드 커넥터를 설치하고 설정해야 합니다.

PO to IS 마이그레이션 관련 내용 요약

 PI나 PO(Process Orchestration)에서 JDBC 연계방식의 인터페이스를 CPI나 IS(Integration Suite)로 전환할때 처리속도가 느려진다고 들었는데 전환시 고려해야 할 부분에 대해 AI로 관련내용을 요약해 보았음


Migrating interfaces from SAP PO to SAP CPI - INTEGRTR 사이트 내용을 보면


SAP Integration Suite란?

SAP Integration Suite는 SAP와 타사 통합 시나리오를 간편하게 가속화할 수 있도록 제공되는 다중 클라우드 SAAS 솔루션입니다. Cloud IntegrationAPI ManagementOpen ConnectorsIntegration Advisor 등의 기능을 제공합니다.

SAP Cloud Platform Integration이란?

SAP CPI는 클라우드 기반 미들웨어로, 데이터 처리와 변환을 위해 Apache Camel 프레임워크에서 구축되었습니다. 클라우드 네이티브 아키텍처, 다양한 어댑터, 복잡한 매핑 및 변환 기능을 제공하며, 클라우드 또는 온프레미스 환경에 있는 애플리케이션을 원활하게 연결할 수 있는 플랫폼입니다.

SAP PO와 SAP CPI의 차이점

  • SAP PO는 온프레미스 통합 플랫폼으로, 인프라를 직접 관리해야 하므로 비용과 노력이 많이 듭니다.

2024-09-08

JDBC custom DataSource의 접속정보를 외부에서 확인하는 방법이 없을까?

자바프록시나 커스템 로직을 추가할때 DB컨넥션으로 NWA > Configuration > Application Resources > JDBC custom DataSource에 JDBC드라이버 추가 후 컨넥션을 생성함
생성된 DS는 이름과 함께 아래와 같이 확인 되는경우가 있는데
sap.com/JDBCConnector_DS_*.xml
너무 많이 생성된 DS는 관리나 유지보수가 어렵기때문에 위 파일명이나 PO테이블에서 찾아보려고해도 알수가 없음
예를들어 자바프로젝트에 하나의 DB를 연결할때 하나의 최소한 개발/품질/운영 3개 이하의 DS로 연결한다고 했을때 PO같은경우는 인터페이스 별로 생성될수도 있어서 개수가 많을수록 관리가 어려울수 있음
만약 많은 DS를 생성해야한다고하면 일괄적으로 접속정보를 관리할수 있는 방법을 고려하고 생성하는게 좋을것 같음

DataSource란

  • DS방식은 여러가지가 있음 → HikariCP, JDBC DriverManager
  • 컨넥션 얻어오는 방법을 추상화 한것 → DB와 연결을 관리하는 객체
  • DS를 통해 컨넥션 풀을 활용 및 관리 가능 → 드라이버연결,컨넥션 객체 관리
  • 컨넥션 풀이란 JDBC API를 사용하여 DB와 연결하기 위한 컨넥션 객체 생성하는 작업
  • JDBC는 자바에서 데이터베이스와 통신하기 위한 API
  • 간단하게 비유하자면, 마치 공용 자전거 대여 시스템과 비슷함 
    • 일반 JDBC 방식은 자전거가 필요할 때마다 매번 새 자전거를 사는 것과 같음 
    • 그때그때 자전거를 사면 시간이 걸리고 비용도 많이 들음
    • JDBC DataSource 방식은 이미 준비된 자전거들이 대여소에 있고, 필요할 때 대여해서 사용한 후 다시 반납하는 것과 같음 
    • 필요한 순간에 바로 자전거를 사용할 수 있어 시간과 비용을 절약할 수 있음
    • 이처럼 DataSource는 미리 준비된 커넥션을 가져다 쓰는 방식

PO의 JDBC DataSource란

  • 생성된 DS는 NWA > Configuration > Infrastructure > Application Resources에서 확인할수 있음 → 핑테스트도 가능
  • 생성된 많은 DataSource 정보를 다운로드 받는 기능은 없음 → 현재로서는 하나씩 찾아서 접속정보를 확인
  • 접속정보를 확인할수 있는 PO의 시스템테이블을 알수 없음
  • DataSource 정보를 확인할수 있는 Direct API 웹서비스도 모르겠음

“결과적으로 많이 생성된 DataSource를 관리하는 방법을 찾을수 없음”

2024-08-26

오라클에서 NVARCHAR타입에 &(Ampeersand) 데이터만 전송하면 왜 에러날까?

AI와 인터넷을 통해 해당 현상과 해결방법에 대해 정리하였음
  • Insert와 Update 시 예를들어 ‘John & Done’ 데이터가 변수로 인식될수 있음
  • &외에도 :(Colon), %(Percent), #(Hash), !(Exclamation), /(Slash)가 변수로 인식될수 있다고 함
  • NVARCHAR는 기본문자세트인 VARCHAR2와 다르게 인코딩된 문자열을 저장하여 처리될때 특수문자 해석이 다를수가 있다고 함
  • &은 SQL쿼리에서 매개변수로 사용될수 있는 예약된문자 → 이스케이프 처리필요
  • &데이터 같은 특수문자가 변수로 인식되면 처리못해 에러가 발생될수 있음
  • 해당 필드에 hasQuot=YES처리하여 문제값을 ‘와 “로 감싸서 데이터로 인식시킴
  • set define off를 사용 → 특수문자 인서트 시 문자열로 인식시킴
  • MySQL에서는 @, PostgreSQL는 $1, SQLServer는 @와 #, SQLLite에서는 :와 $가 변수로 인식될수 있다고 함

2024-08-24

JDBC Sender채널 대용량 사이즈 조회 시 메모리 상태나 처리방법 정리

스탠다드나 커스텀 JDBC어댑터에서 대용량 사이즈의 데이터를 조회할때 사이즈나 건수가 어느정도일때 메모리에 부하가 메커니즘이나 부하를 방지를 하기위한 방법을 정리해보려고 함

JDBC어댑터에서 대용량사이즈 조회 시 현상

  • 폴링되는 어댑터에서 대량 데이터로 인해 메모리 부족 오류가 발생될수 있음 → OutOfMemory발생
  • 많은 JAVA메모리를 사용하고 다운될수 있다고 함
  • 샌더 JDBC에서 큰 사이즈 수행 시 다음 실행하려는 프로세스나 연결풀링에 영향을 주는듯함 → 병목현상 및 트랜잭션 격리 수준에 따라 다른처리
  • Sender채널 폴링 시 lock을 생성하는데 실행중인 채널작업이 끝나면 unlock을 하고 그다음 폴링(스레드)를 실행되는것 같음 → 정확한건 아님 그래서 대용량 사이즈의 데이터를 조회 시 오랫동안 락을 잡고 있으면 좋지 않은 현상이 발생될수 있을것 같음

대용량 사이즈 해결을 위한 방법들

  • 서버 장비나 노드, 메모리 등에 따라 처리할수 있는 사이즈가 늘어날수 있는듯
    • 자바 힙 크기를 늘리는건 임시방편이라고 함 → 가비지 성능에 영향을 줄수 있다고 함
  • 타겟 프로시저를 통해 minRows, maxRows 같은 건수를 조절하여 리턴
  • 오라클은 ROWNUM, MSSQL은 TOP 구문으로 조회건수를 조절할수 있음
  • 어댑터가 잠기는 상태 대응으로 tasktimeout 변수 언급 → Send 큐 잠금에 영향이 없다고 하는데 정상적인 기능인지 모름
  • 조회테이블에 플래그를 지정하여 일부 레코드를 읽는 방법 → 플래그 등 조건이 없고 배치시간이 짧으면 부하를 줄수 있음
  • 조회 쿼리도 select * from table에서 *가 아닌 컬럼을 지정하여 조회
  • 대용량사이즈 처리가 아닌 방지를 위해 어댑터모듈 등 특정 큰 사이즈 채널에 유입시 강제 에러를 발생시킬수 있음
  • 최대메시지 크기로 설정 1296819 - Configuring Maximum Message Size Limits for OOM Error와 1253826 - Configuring Maximum Message Size Limits

전에 작성한 관련 글

2024-07-24

PO유저별 권한 줄수 있는 방법

오래전에는 PO ESR,ID 툴이나 모니터링 기능에 유저별 역할과 권한에 제한을 주기위해 PO에 기본적으로 생성한 시스템 유저와 동일한 권한 비슷하게 사용자 유저를 생성했던적 있음
예를들어 레거시에서 SOAP으로 호출시 PO의 유저/패스워드가 필요한데 이 유저는 PO개발이나 모니터링이 필요없는 유저인 경우

이부분을 잘 관리하는 고객사같은경우 개발자/컨설턴트 등 별로 권한이 따로 부여되었지만 아닌경우는 구분없이 무조건 ALL권한을 주는 경우를 보았음

유저별 권한은 어떻게

  • 필요한 유저 생성시 정확한 역할 지정 필요
  • 필요한 역할/권한만 부여해야함
  • 역할별 필요한 권한정보에 대해서는 출처사이트 참고
  • 권한은 NWA > Identity Management에서 부여할수 있고 이메뉴에서 계정생성/계정잠금 등 작업을 할수 있음

PO와 IS 비교와 IS가격 정보

아래 사이트의 내용에 대해 AI가 정리 한 글

SAP Process Orchestration (SAP PO)와 SAP Integration Suite (SAP IS) (Business Technology Platform, BTP)의 선택 시 고려할 사항은 다음과 같음

SAP PO와 SI

SAP Process Orchestration (SAP PO)
  • 20년 이상 사용된 안정적인 온프레미스 미들웨어
  • 클라우드와 온프레미스 애플리케이션 모두에 대한 통합 지원
  • 풍부한 어댑터 세트, 사용자 친화적인 GUI, 강력한 모니터링 및 오류 재처리 도구
  • 동기 및 비동기 애플리케이션 간 통합에 최적
  • 선택적 애드온을 통한 강력한 B2B 솔루션
SAP Integration Suite (SAP IS)
  • 클라우드 기반 통합 플랫폼 서비스 (iPaaS)
  • 클라우드-클라우드 및 클라우드-온프레미스 통합에 이상적.
  • S/4HANA, Success Factors, Ariba 등 SAP 클라우드 솔루션과 원활한 통합
  • SAP 오픈 커넥터, API 관리, 통합 어드바이저를 포함
  • 강력한 통합 기능을 위한 Apache Camel 프레임워크 사용

Acknowledgement not possible for synchronous message 에러내용 정리

로그뷰어에서 아래의 에러내용들이 눈에 들어옴
Acknowledgement handling failed for type SystemAck. Reason: com.sap.engine.interfaces.messaging.api.exception.MessagingException: Acknowledgement not possible for synchronous message

로그뷰어의 위 내용으로 발생된 시간과 메시지모니터링에 생성된 로그의 시간과 노드를 비교하여 확인해보면

JDBC 2 JDBC-동기 패턴인데 JDBC Sender 채널에 Quality of Service = Exactly Once를 선택하고 모듈에 비동기-동기 브릿지 처리를 위해 AF_Modules/RequestResponseBean과 AF_Modules/ResponseOnewayBean를 사용한 패턴들에서 발생되는것 같음

비동기 방식에서는 ACK를 응답받지만 동기방식에서는 응답값이 존재하기 때문에 ACK가 필요없다고 하며 위와 같은 에러내용이 발생되도 인터페이스 수행에는 문제가 없어보임

다만 이런 모듈을 사용한 패턴을 사용한 인터페이스가 많다면? 많은 에러로그들로 인해 모니터링과 로그파일 삭제 주기 등 이런부분들을 고려할 필요성을 느낌

비동기-동기 브릿지 패턴들에 대한 ack메시지를 비활성화 하는 방법에 대해서도 찾아봐야 될것 같음

2024-06-27

XPI 인스펙터 화면과 메뉴 정리

인스펙터 기능은 PO에서 지원하는 모니터링에서 보기힘든 부분들을 리포팅해주어 어떤 이슈나 원인모를 문제에 대해 분석하기 쉬운 화면과 파일을 제공해주는데 SAP Note 1514898에서 최신버전을 다운로드 받을수 있다고 하며 지원목적으로 SAP에서 개발되었다고 함

화면 접속은 http://<po url>:<po port>/xpi_inspector/index.jsp로 할수 있음 사용방법은 원하는 트레이스,어댑터 등을 선택 후 스타트 문제,현상을 재연하면 된다고 함 그이후에 인스펙터를 꼭 중지해야한다고 함

인스펙터 화면,메뉴

History: 인스펙터 결과들은 SAP System Global Directory of the Central Instance에 암호화 되어 보관된다고 하는데 공간을 많이 차지한다고 하면 삭제 가능함

Option: Default Traces, SQL Traces, Stating Inspection메뉴가 존재하며 트레이스 활성화 선택, SQL파일 처리, 인스펙터 시작타임을 선택과 더불어 인스턴스 노드별로도 실행가능함

Example(필수선택): 1 (CPA Cache), 2 (Alerting)처럼 Authenication, SSL & PP와 RWB, Mapping Runtime, XI Adapter, XI Message, XI Channel, Performance Problem, Authorization & Session Management, JEE Service, JEE Application, Default Trace, Custom 카테고리가 존재하는데 앞에 숫가 뭘 뜻하는지는 모르겠고 각 카테고리 선택 시 화면이 달라짐

수집항목(선택가능)

Messaging System: XI어댑터가 사용 중인 전송 프로토콜과 독립적으로 메시지를 주고 받을수 있는 XML기반 메시징 프레임워크

XI Module Processor:J2EE Enterprise JavaBean 애플리케이션 수준에서 메시징 서비스와 JCA어댑터 간의 메시지 흐름을 제어

2024-05-18

왜 채널 접속정보가 변경이 안되는 걸까요?

현상정리

  • 채널(어댑터) 접속정보 변경 후 변경된 정보가 아닌 이전 정보로 처리됨
  • 정상적으로 변경되는 채널도 있고 일부분 반영이 안된 채널들도 존재
  • Cache Monitor: Adapter Engine 메뉴에서는 문제의 채널의 오브젝트 아이디로 조회시 변경된 정보로 확인 → 정상으로 보임
  • CPA Cache History의 캐시상태도 정상으로 보임

원인은 찾지 못했지만 어느정도 해결방안은 생각되는 듯
아래는 해당 현상으로 인해 확인해본 사이트

캐시관련사이트

  • 채널의 매개변수 변경 시 수정된 내용이 즉시 작동하지 않을때도 있다고 하고 채널을 중지 후 다시 시작해 보라고함

  • 채널의 고급탭에서 비활성화/활성화하고 전체 캐시를 새로고침해보라고 함

  • 메일 연계시에 수정사항이 반영안되는 문제가 있다고 함 → 풀캐시 언급

PO-SFTP연계 'Algorithm negotiation fail' 에러 관련 노츠정리

에러내용

Message could not be forwarded to the JCA adapter. Reason: com.jcraft.jsch.JSchException: Algorithm negotiation fail

관련노츠

  • 2337525-Jsch library upgrade to version Jsch 0.1.53


  • 3335633-Jsch library replaced with nwiede jsch 0.2.8 versioned/qaq-p/527356
    • 1692819-FAQ: PI SFTP Adapter

  • java.security > crypto.policy의 암호화 정책파일에 대한 limited|unlimited에 대한 내용
  • 자바가 설치된 로컬에서 확인했을때 crypto.policy=unlimited가 주석처리되어있음
  • unlimited는 정책파일에 대한 암호화 제한 없다고 하며 limited는 제한된 암호화가 포함되어있다고 함
  • JSchException: Algorithm negotiation fail-stackoverflow 사이트참고
  • Java 8 릴리즈 주요 기능 사이트 참고
  • AWS GovCloud(US) 리전은 미국 국제 무기거래규정(ITAR)를 준수 참고

non-central Advanced Adapter Engine Extended(AEX)에 대한 정리

non-central AEX도 설치해서 사용할일이 생기는것 같아 정리해보았음
흐름을 보면 Advanced Adapter Engine Extended(AAE) → BS(Business System)호출하는 구성과 다르게 non-Central AAE통해 BS와 연계
구성된 그림을 보면 오래전 dual stack과 single stack 구성과 비슷한데 ABAP엔진의 IE(Integration Engine)를 경유하냐 안하냐에 따라 차이가 있었음

non-central AAE란

  • Non-Central Advanced Adapter Engine = PI-AF
  • de-central Adapter engine = 탈중앙어댑터엔진
  • 채널의 Adapter Engine에 Central Adapter Engine만 선택되는것을 볼수 있는데 non-central aex를 설치하면 다른 선택항목이 보일듯
  • 메시지모니터링에 컴포넌트 등에 카테고리에 메뉴가 하나 추가되는듯
  • SAP_XIAF와 MESSAGING 컴퍼넌트가 보이면 Non-central이라고 함
  • RELEASE나 SP 업데이트 해야 사용할수 있는 어댑터를 사용하는 방법? → sap note 2032345,1997103
    • WS adapter is supported as of 7.31 SP13 / 7.4 SP8
    • REST adapter is supported as of 7.31 SP14 / 7.4 SP9
  • 메시지 트래픽을 줄이는데 사용되는 또다른 자바엔진을 의미

왜 사용하는 걸까

  • central AAE와 분리하여 데이터와 DMZ같은 외부망 시스템과의 연계에서 중앙 어댑터 엔진의 접근을 제어할수 있음 - AI답변
  • SAP NOTE 3457909의 컨커 연계시 오류해결방안으로 non-central aae내용이 있음

출처

2024-05-02

SAP PO SOAP Adapter, WS_AAE 내용정리

레거시 → PO SOAP Sender방식으로 호출시 /WSAdapter/MessageServlet와 /XISOAPAdapter/MessageServlet URL 차이를 알기 위해 정리함

SOAP Adapter

  • SOAP = Simple object access protocol는 W3C(World Wide Web Consortium)에서 관리하는 공식 프로토콜
  • XML데이터 포맷을 사용함
  • Receiver어댑터에서는 SMTP프로토콜을 사용하여 SOAP메시지 보낼수 있다고 함
  • BODY에 보안설정(Signing,Verifying)을 사용할수 있다고 함
  • WS-security,WS-ReliableMessaging,WS-addressing,WSD 등 기술들이 존재
    • WS-addressing은 네트워크 라우팅 정보 유지관리 아닌 SOAP 헤더 내 메타데이터로 해당 정보를 패키징 하는 웹서비스 주소지정하는것으로 이해
  • WS_Security는 보안계층이 하나 더 추가되어 SOAP통신이 더 안전해진다고 함 → 그외 클라우드나 API방식 같은경우 토큰을 사용한 보안강화를 위한 인증 등 방식이 존재하는것으로 알고 있음
    • WS-Security는 토큰같은 고유식별자 통하나 메시지 보호,전송방식을 표준화하는 웹서비스 보안기술
  • 어싸인된 어댑터의 샌더 Agreements는 서비스 레지스트리에 게시할수 있다고 함
  • Axis프레임워크를 사용할수 있는 옵션이 있다고 함
  • Attachments가 필요한경우 SOAP이나 AXIS어댑터를 사용할수 있다고 함

WS_AAE 타입

  • 어댑터 타입은 WS_AAE = Web Service Adaper for Advanced Adapter Engine
  • WS_AAE어댑터는 Attachments를 지원하지 않는다고 함 → 그외 지원 기능에 대해서는 Note 1957663 확인필요
  • 7.31 SP13/7.4 SP8부터 WS 어댑터 지원 → 업데이트 없이 추가는 SAP Note 1916146

2024-04-19

REST Receiver의 Broken pipe(Write failed),remote host unknown 에러내용 정리

PROXY to REST 시나리오의 인터페이스에서 아래와 같은 에러가 간혈적으로 발생되었음

메시지 Audit로그는

java.net.SocketException: Broken pipe (Write failed) (local port... remote host unknown)
REST채널 핑 테스트 결과는
Not ok Testing HTTP OPTIONS... 417: Unkown

Error 32 - Broken pipe (Write failed) in Rest Receiver Adapter-SAP Community 사이트를 보면

  • XPI_Inspector의 오류내용을 보여줌
  • 2604240-TLS handshake failure due to missing SNI extension 노츠 적용해도 효과없는듯 → 이노츠통해 해결된 사람도 있음
    • 핸드셰이크는 통신에서 연결을 설정하기 위한 과정 
  • 바이너리 파일의 큰사이즈의 JSON을 보내는 듯
  • 자바에서 클라이언트-서버 간 연결이 예기치 않게 종료될때 발생 → 서버에서 소켓읽기를 중지
    • 일반적으로 서버충돌,네트워크 문제 등으로 인한 연결을 닫아 통신할수 없어 발생
  • 클라이언트 타임아웃 시간으로인한 소켓시간 초과되어 연결종료될수도 있다고 함 → 만약 에러가 바로 발생 시에는 타임아웃을 늘리는건 무의미할수도 있을듯
  • 많은 연결의 처리 시 부하가 발생시에도 통신을 닫는경우 있는것 같음
  • 서버에서 처리가능한 임계값과 권장 사이즈 확인 후 소스에서의 대용량 사이즈에 대한 분할 전송이 필요

그외

  • 대상 서버의 인증서로 인한 문제일수도 있는듯? → xpi_inspector에서 확인 시

SAP PO매핑에서 ALTER SESSION SET CURSOR_SHARING=FORCE를 왜 사용하면 안되는걸까?

표준방식이 아니라서 ALTER SESSION...을 사용하면 안된다는데 이유가 궁금해서 정리함
me.sap.com/servicessupport 관련 노츠를 검색해도 잘 안나오는듯

cursor_sharing 파라메터 재정리

  • 목발같은 파라메터인듯 다리가 나을때까지 임시적으로 사용하기 좋은 도구
  • SAP PO에서는 채널에 BindMode로 하는게 좋을것 같음?
  • 일시적인 바인드변수에 대한 하드파싱 문제 해결할수 있지만.. 완전한 해결책은 아님
    • 하드파싱은 SQL 처음 실행 시 Shared Pool,Library Cache에 없어 완전히 전부 새로 파싱을 한다는 의미라고 함
    • 리터널 sql문을 많이 사용하면 하드파싱 빈도를 높이게 된다고 함
    • 파스과정 완료 후 sql문자과 실행계획이 공유풀 한 영역의 라이브러리 캐시에 저장 → 성능개선
    • 파스(Parse)과정: sql실행 → 하드파싱 → sql오류확인 → sql테이블,컬럼,권한 확인 → 효율적인sql문장변환 → 어떤방식으로 실행할지 선택
  • 라이브러리 캐시 경합을 일시적으로 해결하기 위한 파라메터 → 고려할수있는부분
  • 오라클 9i의 성능향상 내용에서의 Optimizer개선 내용
    • 옵티마이저는 최적화 Optimization은 손실함수 Loss Function의 결과값을 최소화하는 모델 파라미터(강중치)를 찾는 것을 의미한다고 함
  • 오라클 8.1.6에서 새로 추가된 기능 → EXACT,FORCE값 사용
  • ALTER SYSTEM SET cursor_sharing = FORCE로도 사용가능
  • 오라클 9I에서는 CURSOR_SHARING=SIMLAR로 지정 가능
    • FORCE사용 시 바람직하지 않은 실해 계획을 선택하는 단점 개선
  • 바인딩 사용안하는 SQL을 많이 사용하는 경우 컴파일 과정의 오버헤드를 줄일수 있다고 함
  • 실행계획공유,재활용 수준 개선 → 효과는 제한적
  • SQL Injection 공격방지 효과를 기대할수 없다고 함
  • ALTER SESSION은 현 세션에만 영향 → 영구적인 부분은 DBA에 요청필요
  • auto binder라고 하며 올바른 방향이지만 최종 해결책이나 장기적으로 사용하는건 주의필요 → 커서공유로 인해 발생하는 부작용도 있는듯

PO7.5-오라클 OJDBC8과 14 .jar파일을 둘다 사용할수 있을까?

지인분이 PO 7.5에서 JVM 1.8+OJDBC14와 오라글 19c 연계할때 ojdbc 8를 사용하려고 디폴로이 후 JDBC Adapter 채널에서 테스트를 하는데 8은 안붙고 14로 연결이 된다고 함

확인된 내용으로는  .JAR파일을 열었을때 JDBC 드라이버 패키지와 클래스명이 동일하여 PO내 JDBC클래스를 불러올때 14로 설정되어있어서 8을 못불러오는게 아닌지 생각됨

다시 정리를 하자면

7.5버젼에 호환되는 자바 버젼은 8이며 class format version major number는 52로 확인됨

ojdbc14.jar나 ojdbc8.jar 파일의 뒤 숫자는 설치된 jdk버전과 관계가 있다고 하는데 노츠에서는 14=jdk/jre 1.4, 8=jdk/jre 1.8 또는 8로 확인됨

Oracle JDBC FAQ 사이트를 보면 19.x 버전을 지원하는 최소 JDBC,JDK 버전으로는 ojdbc8.jar+JDK8에서 사용 가능한것으로 확인
하지만 ojdbc14.jar버젼같은 경우 이 사이트에서 확인할수 없지만 PO 7.5에서는 사용을 지양해야될것 같아 보이며 다른 사이트에서 jdbc14.jar+Oracle10g+java 1.5에서 사용되었던것으로 확인

만약 ojdbc8와 14를 둘다 사용해야된다면

 SAP PO+JDK 1.8에서 OJDBC14로 연계되었던 오라클 DB라면 지금은 인터페이스 수행이 잘된다고 해도 나중을 위해서는 14를 제거하고 연계하는 오라클 DB버전과 모두 호환되는 OJDBC8.JAR로 사용해야 될것으로 보임
JDBC Adapater에서 위 ojdbc14,8 버전을 모두 사용해야한다면 왠지 막고 싶다는 생각이 듬

SAP PO에 JDBC드라이버는 어떻게
SAP PO 신규 JDBC 드라이버 배포방법_SAP PO New JDBC Driver Deploy Guide-감귤은탱귤 20240117 에 내용이 정리가 되어있는데 sdaMakerTool.jar+sdaMakerTool를 사용하여 sda파

자바 HttpURLConnection으로 PI/PO Directory API 웹서비스(SOAP) 호출하는 방법

다이나믹웹프로젝트(JAVA EE)+톰켓을 사용한 이클립스 환경에서의 WSDL파일을 제너레이션해서 웹서비스 호출을 위한 개발은 진행했으나 순수 자바프로젝트에서 동일한 방식으로 진행하려니 웹서비스 프레임워크나 톰켓 버젼에서 문제 발생되어 원인 찾아 셋팅하는것만으로도 시간을 많이 소비될것 같은 생각이 듬

알고 있는 웹서비스 프레임워크는 AXIS(Deprecated),AXIS2,CXF이고 WSDL파일을 제너레이션 하게되면 생되는 자바파일도 늘어나고 그래서 REST로 PI/PO의 Directory API를 웹서비스 호출하려고 함

웹서비스 호출 정보 확인

호출하려는 PI/PO 웹서비스 정보는 NWA > Configuration > Connectivity > Single Service Administration 메뉴클릭 후 서비스명을 검색 후 확인되는 웹서비스정보를 확인하면 됨

만약 해당 메뉴 접근을 못하는 경우 PO담당자한테 WSDL+호출URL정보를 제공받아 SOAP UI에 임포트하거나 WSDL URL로 웹서비스 정보를 확인할수 있음

위 경로를 통해 자바에서 REST로 호출하는 SOAP구조와 URL로 확인하고 웹서비스 프로그램으로 미리 호출테스트를 해보는것도 좋을것 같음

개인적으로 PO메뉴보다 SOAP UI에서 확인되는 요청데이터가 불필요한 태그가 없어서 좋은데 보통 SOAP방식으로 호출되는 XML데이터는 아래와 같은데 SAP PO에서 제공하는 웹서비스마다 XML구조가 다름
⁠<soapenv:Envelope xmlIns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlIns:bas="http://sap.com/xi/BASIS">
 <soapenv:Header/>
 <soapenv:Body>
  <bas:BusinessSystemQueryRequest>
  </bas:BusinessSystemQueryRequest>
 </soapenv:Body>
</soapenv:Envelope>

2024-04-05

SOAP UI에서 호출시 is not a valid SOAP version 에러

현상정리

  • SOAP UI호출시 PO 메시지 모니터링 로그 상태는 Log version으로 확인되거나 로그가 안보이고 로그뷰어에서만 호출이력이 보이는 경우
  • 보통 Log version상태는 전송되는 데이터타입과 PO의 데이터타입 메시지 구조가 상이할때도 발생되는데 → 확인 후 다른 원인으로 발생되는 현상이였음

에러내용

SOAP UI에서 에러발생 시 전송했던 데이터 호출시 아래와 같은 오류가 확인되어었음
⁠<soap:Value xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/">ns1:VersionMismatch</soap:Value>
⁠<soap:Text xml:lang="en">"[XML Namespace], the namespace on the "[Message Type명]" element, is not a valid SOAP version.</soap:Text>

원인&해결

  • Log  version과 SOAP version 현상은 ICO오브젝트를 다시 저장 후 엑티브하고 해결
  • is not a valid SOAP version 오류같은 경우 내 자리에서만 ⁠SOAP UI에서 기본적으로 생성되는 요청구조의 ⁠<soapenv:Envelope><soapenv:Header><soapenv:Body>⁠를 제거 하면 동일한 오류가 재현됨

"하나 의문인건 SOAP UI에서 발생된 오류가 SOAP구조로 전송 안되어 발생된 에러라면? 왜 갑자기 이런 오류가 PO에서 발생되었고 상대방 클라이언트에서는 PO의 ICO를 다시 저장한것만으로 해결이 되었는데 내 자리에서 SOAP UI호출 시 SOAP구조로 안보내는경우 is not a valid SOAP version이 발생되는건지 의문임"

"왜 SOAP UI 버젼은 다를지라도 상대방과 난 같은 SOAP UI를 사용하는데 왜 내 SOAP UI에서만 오류가 발생되는건지 모르겠음"