C++와 Java 간의 Oracle 트랜잭션 전파
우리는 기존의 C++ 애플리케이션을 가지고 있으며 점차 새로운 자바 기반 시스템으로 교체할 예정입니다.Java에서 모든 것을 완전히 다시 구현하기 전까지는 C++와 Java가 서로 통신해야 할 것으로 예상됩니다(RMI, SOAP, 메시징 등 - 아직 결정하지 않았습니다).
매니저는 동일한 Oracle DB 트랜잭션에 참여하려면 Java 및 C++ 측이 필요하다고 생각합니다.이는 DB 및 메시지 큐와 같은 단일 프로세스가 2개의 트랜잭션 리소스를 조정하는 일반적인 분산 트랜잭션 문제와 관련이 있지만 다릅니다.
프로세스 전반에 걸쳐 트랜잭션을 전파하는 것은 성능 및 안정성 측면에서 볼 때 끔찍한 아이디어라고 생각하지만, 여전히 해결책을 요구받을 것입니다.
저는 XA 트랜잭션을 잘 알고 있고 JBoss 트랜잭션 관리자와 몇 가지 작업을 해봤지만, 구글링을 통해 두 프로세스 간의 XA 트랜잭션을 전파하는 데 좋은 결과가 나타나지 않았습니다.
우리는 Java측에서 Spring을 사용하고 있으며 그들의 문서에는 트랜잭션 전파에 어떠한 도움도 제공하지 않는다고 명시되어 있습니다.
전파를 지원할 수 있는 기존 Java EE 서버(예: IBM Webspec)를 사용할 계획은 없습니다(확정적인 문서를 찾을 수 없음).
해결책에 대한 어떤 도움이나 조언이라도 대단히 감사드립니다.
Laurent Schneider의 블로그에는 Oracle 내부의 DBMS_XA 패키지를 사용하여 여러 세션이 동일한 트랜잭션에서 작동할 수 있도록 한 예가 있습니다.따라서 별도의 코디네이터 없이 Java 및 C++ 세션이 동일한 트랜잭션에 참여할 수 있습니다.
또는 Workspace Manager를 사용할 수도 있습니다.이는 원래 장기간에 걸친 트랜잭션(즉, 제안된 개발을 위해 많은 공간 데이터를 조작하는 것)을 지원하도록 설계되었습니다.기본적으로 작업 공간을 생성할 수 있으며, 이 경우 이름이 지정된 트랜잭션과 거의 맞먹습니다.Java 및 C++ 코드 모두 별도의 세션을 통해 해당 작업 공간에 들어갈 수 있으며 둘 다 해당 작업 공간에서 데이터를 조작하고 커밋할 수 있습니다.트랜잭션이 완료되면 일반 트랜잭션에서 커밋을 수행하는 것과 동일한 작업 공간을 LIVE 작업 공간에 병합할 수 있습니다.
한편, 프로세스 간의 트랜잭션을 조정하는 것은 성능, 안정성, 단순성 및 유지보수 측면에서 좋지 않은 아이디어일 가능성이 높다는 귀사의 초기 평가에 전적으로 동의합니다.한편, C++ 코드가 폐기되는 방식에 따라(즉, 트랜잭션이 Java 또는 C++ 전용이 될 수 있는 방식으로 코드를 대체할 수 있는지 여부) 합법적인 비즈니스 요구 사항이 될 수 있습니다.
저는 이러한 우려를 해결하기 위해 Hazlecast Messaging 및 Distributed Memory Lock을 사용해 왔지만, 이러한 도구를 사용하려면 동일한 데이터를 접촉하는 부분에서 소프트웨어를 다시 설계해야 합니다.C++ 클라이언트 문서 여기 Java 클라이언트 여기
Oracle은 또한 Oracle Coherence라는 유사한 제품을 사용하여 개발 가이드에서 잠금을 참조할 수 있습니다.
또한 데이터베이스에는 Oracle Streams Advanced Queueing(트랜잭셔널 지속 큐)이라는 MQ 시스템이 포함되어 있어 상황에 따라 도움이 될 수도 있습니다.Oracle AQ는 Oracle 트리거와 잘 통합됩니다.
또한 캐시를 업데이트하거나 업데이트 프로세스를 알리는 데 도움이 되는 데이터베이스 변경 통지가 있으며, 이는 Optimistic Offline Lock 패턴과 함께 사용할 수 있습니다.
참고 항목소프트웨어 트랜잭션 메모리
Apache Zookeeper는 분산 잠금 기능도 지원합니다.
저는 JBoss Transaction Manager가 웹 서비스 콜 전반에 걸쳐 2pc tx 전파를 지원한다고 생각합니다.그런 식으로 시스템을 통합할 수는 있겠지만 성능이 좋지 않을 겁니다.
언급URL : https://stackoverflow.com/questions/44005/propagation-of-oracle-transactions-between-c-and-java
'programing' 카테고리의 다른 글
아약스를 배우기 전에 알아야 할 것은 무엇입니까? (0) | 2023.10.30 |
---|---|
웹에 쓰는 법.중간 신뢰에서 구성? (0) | 2023.10.30 |
jQuery Draggable은 페이지를 스크롤한 후 도우미를 잘못된 위치에 표시합니다. (0) | 2023.10.30 |
C에서 C# 호출 (0) | 2023.10.30 |
이진 모드에서 stdout을 쓰기 위한 가장 간단한 방법은 무엇입니까? (0) | 2023.10.25 |