2012-12-19 2 views
0

진행 버전 10c.교차 애플리케이션 서버 호출에서의 트랜잭션

두 개의 서로 다른 응용 프로그램이 있다고 가정 해 보겠습니다. 하나의 X와 다른 Y를 각각 다른 DB 인스턴스로 지정합니다.

X에서 .p 프로세스가 실행 중이고 X.db에서 일부 레코드를 사용 중이고 그 중간에 Y.db의 레코드를 조작하기 위해 응용 프로그램 Y에서 프로세스를 호출합니다. .. 실패 할 경우 올바른 "동작"을 얻습니까?

e.e.

  • Y 과정은 X 프로세스는 자체에 롤백 (검색 할 수 있습니다 또는 코드 자체를 강제로.
  • X 프로세스가 성공적으로 호출 Y 프로세스를 가지고, Y는 변경 사항을 롤백 후 실패, 실패합니다. Y가 최선을 다하고 후
  • X 커밋 : 모두 모든 잠금

이 작품, 내가 대해 조심해야 특정주의 사항이있는 경우에도 무엇 performanc에 대한 그들의 각각의 데이터를 업데이트 발표했다 이자형?

답변

0

두 프로세스간에 트랜잭션 상태가 자동으로 연결되지 않습니다. 앱 서버는 또 다른 세션이며 다른 사용자와 다를 바 없습니다. 두 세션은 그 사이의 통신 채널을 가지고 있지만 TRX 상태 조정은 없습니다.

시나리오 1에서 응용 프로그램 서버 호출이 실패하면 오류 코드가 반환 될 수 있습니다. 부모 프로세스는 코드를 통해 원하는 것을 결정할 수 있습니다. 그러나 모든 TRX 실패가 호출자에게 돌아 가지는 것은 아닙니다 ("kill -9"라고 생각하십시오 ...) 그리고 응용 프로그램 기반 오류 논리에 버그가있을 수 있습니다.

시나리오 2에서 Y는 X와 독립적으로 커밋됩니다. 롤백이 발생하지 않습니다.

시나리오 3이 시나리오 2와 다르다는 것을 알지 못합니다. 이러한 비동기 호출 중 하나가 여전히 중요하지 않은 경우, 트랜잭션은 여전히 ​​서로 다릅니다.

+0

감사합니다. Progress 스택에 이런 종류의 서비스를 제공 할 수있는 것이 있습니까 (라이센스상의 이유로 Sonic 위에 구축 된 것을 제외하고)? –

+0

프로세스 경계를 ​​넘어서는 트랜잭션을 요구하고 있습니까? –

+0

* DB *는 JTA 분산 트랜잭션을 지원합니다. 그러나 4GL은이를 지원하지 않습니다. –

관련 문제