2012-05-12 6 views
1

UODOTNET 문서는 세션 인스턴스가 여러 스레드에서 사용될 수 있다고 명시 적으로 말하지는 않지만 "UniObjects for .NET이 다중 스레드 환경에서 사용될 것으로 기대할 때 ..."라고 말합니다.UniVerse 데이터베이스 UniSession 인스턴스 - 여러 스레드에서 동시에 사용할 수 있습니까?

나는 실제로 이것이 동일한 UniSession 인스턴스에서 동시에 두 개의 SELECT를 가질 수 있음을 의미하는 확인을 원합니다.

실제로 이렇게 작동하는 경우 SELECT가 다른 선택 목록을 참조해야한다는 것을 알 수 있습니다. 그 맞습니까?

답변

0

UniObjects는 여러 세션에 동일한 세션을 사용하는 것을 지원하지 않습니다. 기본적으로 병렬 작업에 동일한 세션을 사용하는 것은 TCL에서 한 번에 두 가지 작업을 수행하는 것과 같습니다. 다른 스레드에서 두 개의 장기 실행 선택을 시도했을 때 다음 오류가 발생했습니다.

전송 연결에서 데이터를 읽을 수 없습니다 : WSACancelBlockingCall [IBM U2] [UODOTNET-UNIRPC] 호출로 차단 작업이 중단되었습니다. [ErrorCode = 81009] RPC가 실패했습니다.

UniObjects 은 다른 세션을 사용하는 병렬 스레드를 지원합니다. 세션이 다르기 때문에 저장된 목록을 사용하지 않는 한 선택 목록이 충돌하지 않습니다.

라이센싱이 걱정된다면 이러한 평행 작업을 수행하기 위해 팬텀을 활용할 수 있습니다. Phantoms를 사용하면 기본 프로그램을 비동기 적으로 실행할 수 있습니다. 유령이 특정한 경우에만 라이센스를 소비한다는 것이 내 이해입니다 (예 : HTTP 요청 수행). 단일 스레드 .NET 응용 프로그램은 매번 팬텀을 생성하여 선택을 실행하고 결과를 임의의 위치에 저장하는 기본 프로세스를 두 번 호출 할 수 있습니다.

EXECUTE "PHANTOM PHANTOM.TEST ":RECORDID 

가 나는 팬텀이 완료되었음을 확인하는 우아한 방법을 찾아야 아직 때문에 유령을 피하려고 : 우리는 팬텀에 임의의 기본 프로그램 "PHANTOM.TEST"를 실행하려면 다음 PICK 기본 코드를 사용 달리는.

팬텀 라이센스 참조 : https://u2tc.rocketsoftware.com/documentation/PDF/1177927.pdf

+0

감사합니다. 실제로 .NET의 Monitor를 사용하여 세션의 가용성을 기다리는 코드를 실제로 구현했습니다. 그것은 작동합니다. 그리고 예, 그것은 문제가되었던 라이센스입니다. 나는 지금까지 여러 개의 동시 스레드를 사용 해왔다.하지만 말했듯이, 각각은 자신의 세션을 가졌다. 나는 PHANTOM에 대해 들어 보지 못했지만, UniVerse 괴짜 동료들을 그것에 올려 놓을 것입니다. – Peter

관련 문제