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

2020-08-11

com.microsoft.sqlserver.jdbc.SQLServerException: The driver could not establish a secure connection to SQL Server by sing Secure Sockets Layer (SSL) encryption

정말.. SAP XI/PI/PO 프로젝트를 하면서 웬만한 에러를 다 접해봤다고 생각한건 오산인것 같습니다. 가끔새로운 에러를 볼때가 있는데 특히 정상수행되고 있었던 인터페이스가 갑자기 안될때.. 이런경우 난감한것 같습니다.

- 현상

JVM 버젼 업데이트후 타겟이 MSSQL인 인터페이스에 에러가 확인이 되었고 SAP PO의 Communication Channel에서 Ping 테스트를 해봤을때 실패되었습니다.

2020-07-25

sap pi/xi The cause of the error occurred

sap pi/xi The cause of the error occurred


오래전에 정리했었던  SAP XI/PI에서 발생되었던 에러내용 및 기타내용 정리한 글입니다. 버젼이 업그레이드 되서 PO 7.5에서 개발을 하고 있지만 에러내용은 동일하네요.

에러내용정리


현상: 

#15 15:58:02 [AWT-EventQueue-0] ERROR com.sap.aii.utilxi.swing.toolkit.ExceptionDialog: Throwable

Thrown:

MESSAGE ID: com.sap.aii.ib.server.oa.rb_all.CHECK_EXCEPTION

com.sap.aii.ib.core.clmgmt.ChangeListMgmtException: Internal error while checking object

 

원인: 

1) Map all the fields in the Target Structure .
2) test the mapping - are you getting any error , also check the display queue
3) Create another dummy mapping and try to activate that. If you get same error, then there may some java files problems i.e J2EE engine files .
4) Is there old version of this mapping exist ?

2020-06-27

How to analyze the cause of Full GC and OOM in SAP PO 7.5

SAP PO에서 여러 GC(Garbage Collecto)가 존재하지만 유독 Full GC에 민감한 이유는 GC가 수행되는 시간이 다른 것보다 길며 수행중인 상태에서는 Application이 멈춰질수 있는 부분이라 GC가 끝난 후에 요청데이터가 한번에 몰리게되 부하를 발생될수있습니다. 시스템 안정성과 성능에 영향을 줄수 있는 부분입니다.
가끔씩 BC분이 특정노드에서 Full GC현상이 발생된다고 얘기하는 경우가 있습니다. 그럴때면 노드별로 Full GC현상이 발생된 시간대에 노드별로 수행된 인터페이스 건수를 확인하는데.. 이것 외에 SAP PO에서 Full GC가 발생되는 현상에대해 체크하는 방법들을 알아보려고 합니다. 그 전에 Full GC에 대해 알아봐야겠죠?

2020-06-17

Polling is not possible in the JDBC sender channel of SAP PO 7.5

SAP PO 7.5의 JDBC Sender채널에서 폴링이 안되는 여러 현상에 대해 알아보고 같은 현상을 겪었던 사이트나 블로그를 참조해서 원인을 확인하고 해결하는 과정을 보여주는 내용이며 그외 스레드 처리에 대한 이해를 돕는 내용입니다.

현상

JDBC Sender채널 실행시 CC(Communication Channel)모니터링의 노드에 'Processing Started' 상태에서 다음 단계로 넘어가지 않는 현상이 발생되었으며
NWDS(SAP NetWeaver Developer Studio)의 SAP Management Console에서 특정 AP서버의 스레드SAP_AFScheduler.Worker에 'Processing' 상태로 오랫동안 남아있는 경우가 있었습니다. 그리고 직접 해당 DB에 쿼리를 실행하는 경우 타임아웃이 발생되었었습니다.

2020-04-08

How to find all mappings that use Function, Field, Value..

안녕하세요?
PO 매핑에서 UDF, Field Name, Value 등 찾을때 인터페이스 개수가 많지 않으면 수작업으로 하나씩 열어서 확인을 했던적이 있습니다. 하지만 인터페이스 개수가 많아지면 많은시간과 사람 눈으로 확인을 하는거라 제대로 확인이 안되는 경우가 많았습니다.

2019-05-11

PO/PI Memo

Get PI/Sending system SID

Get ip address from third-party system via UDF
https://answers.sap.com/questions/12488914/index.html
UDF에서 SOAP 호출시스템의 아이피를 가져올수 있으며 Sender Adapter Engine는 필수

Context and Queue in Message Mapping UDF

How to create SAP PI adapter modules in EJB 3.0

Hacking: To get error from the PI Mapping Mapping realtime.

Insert value from Request message to Response message using GetPayloadValueBean and PutPayloadValueBean
매핑과 타겟채널의 모듈 설정으로 Request Payload를 Response에서 사용가능하게 하는 기능이다.

Dynamic receiver determination through mapping
하나의 Outbound에서 N개의 Inbound로 Sync방식으로 동시전송이 안되는데 이부분을 해결해줄수 있는 기능인것 같다.

SOAP Lookup from UDF

Message Mapping : Play around with target structure

Adapter Module: ExceptionCatcherBean

want Batch mode in the Receiver JDBC adapter

Trick to export PI7.3 mappings as a .XIM File

Hidden Tools in SAP XI/PI – BATCH file to launch ESR/ID frameworks
Hidden 메뉴가 안보이는 경우에는 PI 7.1의 com.sap.xpi.ib.mt.gui.lib.jar파일을 다운로드 받는다.
(다운로드 경로 : https://app.box.com/s/jinsd5i34h1khrxm02tg)


SAP idoc 한글 가이드 ( R/3 IDOC -> XI )

Sharing data between two message mappings through Dynamic Configuration

FormatConversionBean – One Bean to rule them all!

Configure the HTTP_AAE receiver communication channel with SSL
https://blogs.sap.com/2012/09/18/configure-the-httpaae-receiver-communication-channel-with-ssl/
타겟이 HTTPS, SSL, REST 방식인경우 SAP PI 7.3에서 SOAP 채널 타입으로 가능하며 서버에서 클라이언트 인증서가 필요없는경우 서버 인증서를 업로드후 채널에서 SOAP구조 제외 인증서 디폴트 설정한다.
HTTP_AAE Receiver채널의 Use SSL옵션은 서버에서 클라이언트 인증서를 요청하는경우 사용하며 SSL 구성이 필요하다

Adding Certificates to PI

Message Staging and Logging Options in Advanced Adapter Engine of PI/PO 7.3x/7.4
https://blogs.sap.com/2012/11/06/message-staging-and-logging-options-in-advanced-adapter-engine-of-pi-73x/
PI 7.3에서 NWA의 Java Properties에서 stage, logger프로퍼티 추가/수정후 AE로그를 확인하였을때 Async로그는 출력되며 Sync로그는 존재하지 않았다.
※ 디폴트 설정인경우도 동일

Scenario specific message staging and logging in PI 7.31 AAE
https://blogs.sap.com/2012/07/26/scenario-specific-message-staging-and-logging-in-pi-731/
AAE 사용시 Input Payload만 확인 가능하며 AAE에서 개별로 로그설정이 가능하나 PI 7.3 서비스패키지 7에서는 로그탭이 나오지 않는다.

Adding Audit Log in PI Mapping UDF in PI Single Stack

2018-06-02

[PO 7.5] How to use Directory API

Directory API의 사용방법에 대한 주관적인 내용을 담았습니다.

Directory API는 PO에서 제공하는 웹서비스를 사용하여 외부프로그램에서 PO 오브젝트를 조회/수정을 할수 있는 기능이며 외부에서 호출을 하기때문에 PO에 영향을 줄수있는 부분을 유의하여 사용을 해야될것 같다.

PO오브젝트에 접근하기 위해 사용해본 웹서비스는 아래와 같다.
AdapterMessageMonitoringVi
BusinessSystemServiceVi
IChannelAdmin
CommunicationChannelServiceVi

Prerequisites(전제조건)
Single Java Stack
NWDS(Netweaver Developer Studio)
CXF 3.2.1
Tomcat 7.0

How to use(사용방법)
이 웹서비스들은 NWA > Configuration > Connectivity > Single Service Admination에서 확인이 가능하며 웹서비스 테스트를 하여 호출결과를 확인이 가능하다.

1. PO에서 제공하는 웹서비스의 WSDL를 다운로드를 받는다.

2. 다운로드 받은 WSDL에 URL과 sevice, port 추가후 binding 설정을 한다.

3. Java EE Project를 생성하여 다운로드받은 WSDL를 오른쪽 클릭 > Web Services > Generate Client해서 웹서비스 관련 자바파일을 생성해준다.
* 톰켓 7.0에서 ASIX로 WSDL를 Generate하고 호출하는 경우 알수없는 에러로 인하여 CXF로 변경해서 호출하니 정상적으로 되었다.

Reference(참조)

2018-06-01

[PO 7.5] How to create adapter module


AdapterModule 생성에 대한 주관적인 내용을 담았습니다.

AdapterModule은 JavaProxy 생성과 동일하며 XML의 추가적인 구성이 들어간다. AdapterModule은 스프링의 인터셉터처럼 사용해도 괜찮을것 같다.
타겟의 다양한 통신방식의 ReceiverAdapter에 공통적인 로직이 필요한경우 괜찮을것 같다.


Prerequisites(전제조건)
Single Java Stack
EJB 3.0
NWDS(Netweaver Developer Studio)

Procedure(순서)
1. EJB Project 생성시 EJB버젼과 EAR Project 명을 넣고 Next 한다. EJB Module Setting에서 두개의 체크박스를 해제하고 완료한다.

2. Build Path > Add Library... 에서 XPI Library 선택후 AdapterModule 관련 라이브러리를 추가한다.

3. EJB Project 오른쪽 버튼 클릭 > Session Bean (EJB 3.x) 클릭 후 AdapterModule의 비지니스 로직을 구현할 자바파일을 생성한다.

4. 생성된 자바파일 상단에 아래와 같이 어노테이션을 추가한다.
@Stateless(name=”TestBean”)
@Local(value={ModuleLocal.class})
@Remote(value={ModuleRemote.class})
@LocalHome(value=ModuleLocalHome.class)
@RemoteHome(value=ModuleHome.class)
* TestBean 값은 ejb-j2ee-engine.xml의 ejb-name과 동일하게 설정한다.

5. EJB Project의 ejb-j2ee-engine.xml과 EAR Project의 application-j2ee-engine.xml을 구성한다.
* ejb-j2ee-engine.xml의 jndi-name은 ReceiverAdapter의 Module Name과 동일하게 설정한다. 그 위 XML구성은 참조된 사이트를  보기 바란다.

Reference(참조)

2018-05-24

[PO 7.5] Configuration User-Defined Search


PO 기능 중 User-Defined Search의 주관적인 내용을 담았습니다. 유용한 기능이지만 실제로는 잘 사용하지 않는것 같다. 하지만 하나의 필드명이 여러인터페이스에 사용된다고 한다면 그 필드명의 데이터를 통합으로 검색하기 괜찮을것같다.
* User-Defined Search 필터구성시 네임스페이스 항목이 전체조건이 안되기때문에 이부분은 고려가 되어야할것 같다.

Prerequisites(전제조건)
Single Java Stack

Procedure(순서)
1. Configuration and Monitoring Home 클릭 후 Configuration and Administration > Adapter Engine > User-Defined Message Search Configuration 클릭한다.
2. List of filters의 New버튼 클릭 후 검색가능한 범위를 설정해준다.
3. Details for filters > Sear Criteria 선택 후 New 버튼 클릭 후 XPath를 설정한다. 그외에 Dynamic Header이나 Custom Dynamic Header가 있다.
4. Prefixes 선택 후 New 버튼 클릭 후 root 태그의 Prefix를 설정한다. User-Defined Search 구성 시 XPath나 네임스페이스의 Prefix는 중요한 비중을 차지 할것 같다.
5. Test Search Criteria 클릭 후 검색하려는 Message Id를 넣고 실행했을때 필드 값이 정상적으로 나오면 User-Defined Search 구성은 완료한것이다.

How to use(사용방법)
Measage Monitor > Advanced 클릭 > User-Defined Search Criteria의 Add Predefined 클릭 후 검색할 값을  넣고 실행한다.

Troubleshooting(문제해결)
For searching with user-defined attributes, the performance is optimal when searching a short time period
Message Monitoring에서 User-Defined Search 시 발생했던 메시지이다. Indexing options을 클릭 > Start Indexing에서 검색하는 기간을 조정 > Start indexing 버튼 클릭 > Indexing status 클릭 후 정상작동 확인한다.

Index job canceled due to another job running at the monent
Start indexing 버튼 클릭 시 발생되었던 메시지 이며 Job ID나 Dates를 Reset 후 Inactive 후 시간이 좀 지난 후 다시 해보면 되는것 같다.

There are no message available for the current filter criteria
User-Defined Search 사용시 발생되었던 메시지였으며 필터 조건이나 XPath, Prifix를 확인해보면 좋을것 같다.

Reference(참조)
https://blogs.sap.com/2013/12/24/step-by-step-guide-for-configuring-user-defined-search-in-pi/

2018-05-18

[PO 7.5] Inbound ABAP Proxy Tuning

ERP에 ABAP Proxy 방식으로 호출되는 인터페이스에서 발생되는 현상이나 개선방법에 대해 주관적인 생각을 담고 있습니다.

Symptom(징후)
PO에서 Inbound Proxy 호출 시 ERP에서 DB_ENTRY_QUEUING이나 PLSRV_CALL_INBOUND_PROXY에서 처리시간이 오래걸리는 일시적인 현상을 볼수 있었다.

Reason(원인)
PO에서 ERP로 전송되는 트랙잭션이 일시적으로 많아져서 ERP에서 설정된 병렬처리 개수로는 윈활하게 처리 되지 않는것 같다.

Solution(해결)
EO_INBOUND_PARALELEL의 인바운드 개수를 늘려서 ERP에 유입되는 메시지를 분산시켜준다. 이 방법이 해결책이라고 볼 수 없지만 위 현상에 대해 성능이 향상이 될것 같다고 생각한다.

※ EO_INBOUND_PARALELEL 개수를 늘리기 위해서는 CPU개수를 고려한 Work Process를 고려하여 설정되어야 하는것 같다.

Reference(참조)
https://help.sap.com/saphelp_nw73ehp1/helpdata/en/48/b2dfe86b156ff4e10000000a42189b/frameset.htm

2018-05-10

[PI 7.3] How to use CTS+

PI 7.3 Dual Stack 환경에서 CTS+ 사용법을 설명한다. Single Stack 환경에서도 Enterprise Services Repository, Integration Directory > Tools > Open CTS Transport Organizer을 클릭한다. CTS+ 설치 되어있지 않은경우 Disable 되어 있다.

필자 경우 CTS+를 사용하는 경우는 드물었고 보통 File Export/Import를 사용했었다.

Procedure(순서)
1. DEV Enterprise Services Repository > Export 클릭 > Transport Using CTS 선택 > Request Order 확인한다.

2. DEV SAP GUI > 티코드 SE09나 SE01 실행 > Display 클릭 > 해당 Request Order 더블클릭 > Description과 Rule를 적용 후 저장 > Release한다.

3. QAS SAP GUI > 티코드 STMS 실행 > Import Overview 클릭 > Request Order Import 클릭 후 완료한다.

Integration Directory 에서는 Request Order Import 완료 후 Integration Directory > Change Lists 탭 > 유저 nwdi_ctsadm에서 조회되는 Impor된 오브젝트를 확인 가능하다.

Reference(참조)
https://archive.sap.com/kmuuid2/20ccd0ec-2839-2b10-0097-828fcd8ed809/How%20to%20Configure%20Enhanced%20CTS%20for%20SAP%20NetWeaver%20Process%20Integration%207.1%20SP06.pdf

2018-04-27

[PO 7.5] Transaction Isolation Level in JDBC Channel

PO/PI의 JDBC Sender/Receiver Channel에는 Transaction Isolation Level이 존재한다. 각 각의 레벨은 Dirty Reads, Non-repeatable, Phantom Reads의 허용차이가 있으며 병렬처리에 유리한 순서는
Read_uncommitted > Read_committed > Repeatabl_read > Serializable이다.
아래의 T1은 트랜잭션1이고 T2는 트랜잭션2이다.

Dirty Reads
1. T1에서 SELECT col1 FROM tab1 WHERE col2 = 1; 쿼리의 결과는 10건이 조회가 된다.
2. T2에서 UPDATE tab1 SET col1 = 10 WHERE col2 = 1; 쿼리 수행후 커밋되지 않은 상태이다.
3. T1에서 SELECT col1 FROM tab1 WHERE col2 = 1; 쿼리의 결과는 11건이 조회가 된다.

Non-repeatable
1. T1에서 SELECT col1 FROM tab1 WHERE col2 = 1; 쿼리의 결과는 10건이 조회가 된다.
2. T2에서 UPDATE tab1 SET col1 = 10 WHERE col2 = 1; 쿼리 수행 후 커밋한다.
3. SELECT col1 FROM tab1 WHERE col2 = 1; 쿼리의 결과는 11건이 조회가 된다.

Phantom Reads
1. SELECT COUNT(*) FROM tab1 WHERE col1 BETWEEN 1 AND 10; 쿼리 결과는 5건이 조회가 된다.
2. INSERT INTO tab1(col1, col2) VALUES (1, 20); 쿼리수행 후 커밋한다.
3. SELECT COUNT(*) FROM tab1 WHERE col1 BETWEEN 1 AND 10; 쿼리 결과는 6건이 조회된다.

Default
DB에 설정된 트랜잭션 레벨을 사용한다.

None
트랜잭션 레벨을 지원하지 않은 DB에 사용된다.

Read_uncommitted
Dirty Reads, Non-repeatable, Phantom Reads를 허용한다.
병렬처리에 적합하며 무결성 보장이 안될 수있다. T2에서 업데이트 후 커밋되지 않은데이터도 조회가 가능하다.

Read_committed
Non-repeatable, Phantom Reads를 허용한다. 커밋한 데이터만 조회가 되고 T1이 조회를 하는중에 T2에서 업데이트나 인서트가 되는경우 결과가 달라질수 있다.

Repeatabl_read
Phantom Reads를 허용한다. T1이 범위조건에 맞는 데이터를 조회하는 경우 T2에서 T1에서 조회 범위안에 존재하는 데이터의 업데이트는 불가능하다. 범위외에서는 인서트가 가능하다.

Serializable
Dirty Reads, Non-repeatable, Phantom Reads 허용하지 않는다.
속도는 느리지만 직렬처리에 적합하다. T1이 조회하는 중에는 T2에서는 업데이트나 인서트가 불가능하다.

Reference(참조)
SQL TRANSACTION ISOLATION LEVELS EXPLAINED
Isolation level
blog.inspien.co.kr/54

2015-01-27

[PI] JDBC Lookup Service

Channel channel = null;
DataBaseAccessor accessor = null;

DataBaseResult resultSet = null;

String query = "select A, B, C from dual";


MappingTrace trace = container.getTrace();


try{

 channel = LookupService.getChannel("[Business System]", "JDBC Channel");

 accessor = LookupService.getDataBaseAccessor(channel);

 resultSet = accessor.excute(query);


 trace.addInfo(query);


 for (Iterator rows = resultSet.getRow() ; rows.hasNext();){

  Map rowMap = (Map) rows.next();

  A.addValue(rowMap.get("A"));

  B.addValue(rowMap.get("B"));

  C.addValue(rowMap.get("C"));

 }

}catch(Exception e){

 trace.addInfo(e.getMessage());

}finally{

 accessor.close()

}

2015-01-14

[PI] Sync/Async Bridge

DB to RFC 방식인 경우 DB에서 조회한 데이터를 RFC에 Sync로 전송 후 별도의 Async 처리를 할수 있다.

Prerequisites(전제조건)
1. Sync방식 처리 후 Async로 처리 될 DataType을 정의한다.
2. Sender Channel 생성한다.

Procedure(순서)

1. Processing Sequence 적용방법
  • CallSapAdapter(순서 2)
  • AF_Modules/RequestResponseBean(순서 1)
  • AF_Modules/ResponseOnewayBean(순서 3)
2. Module Configuration 적용방법
  • passThrough= true
  • adapterNamespace
  • adapterType
  • receiverChannel(Aync로 처리될 채널 명으로 설정한다.)
  • receiverService
※ Sender 비즈니스명과 동일한경우 passThrough,receiverChannel만 사용할수 있다.

2015-01-03

[PI] Publish to Service Registry from PI

Procedure(순서)
1. Inbound Service Interface를 Publish 한다.
2. Service Registry 실행한다.
3. Inbound Service Interface 조회 후 Publish 클릭한다.
4. Binding URL 정보 설정한다.

최근글

2026년 8월 14일 데일리 뉴스요약