Tryb kontroli transakcji i przetwarzanie na poziomie synchronizacji

Wybrany tryb kontroli transakcji określa typ przetwarzania związanego z zatwierdzaniem i wykonywanego przez system IMS.

Tryb kontroli transakcji odnosi się do typu przetwarzania zatwierdzania wykonywanego przez system IMS. Klient Java określa protokół trybu kontroli transakcji, który ma zostać użyty podczas wprowadzania żądania transakcji do systemu IMS. Produkt IMS Connect i system IMS obsługują dwa typy przetwarzania trybu kontroli transakcji: tryb 0 (zatwierdź-potem-wyślij), w którym system IMS zatwierdza zmiany w bazie danych systemu IMS, a następnie wysyła do klienta dane wyjściowe, oraz tryb 1 (wyślij-potem-zatwierdź), w którym system IMS wysyła dane wyjściowe do klienta, a następnie zatwierdza zmiany w bazie danych.

Produkt IMS Connect i system IMS jako związane z protokołami trybu kontroli transakcji obsługują także trzy poziomy synchronizacji: NONE, CONFIRM i SYNCPT. Wszystkie trzy poziomy synchronizacji mogą być używane z trybem kontroli transakcji 1. Z trybem kontroli transakcji 0 może być używany jedynie poziom CONFIRM.

Podczas gdy produkt IMS Connector for Java automatycznie udostępnia poziom synchronizacji w czasie komunikowania się z produktem IMS Connect, poziom synchronizacji może zostać jawnie ustawiony przez klienta Java na NONE lub CONFIRM za pomocą metody setSyncLevel(int). Obecnie klient Java nie może jawnie ustawić poziomu synchronizacji na SYNCPT. W przypadku interakcji w trybie kontroli transakcji 1 domyślnym poziomem synchronizacji jest NONE. Jest on wystarczający tylko do ustawienia komendy interakcji na wartość SYNC_SEND_RECEIVE bez ustawiania poziomu synchronizacji. Dla interakcji w trybie kontroli transakcji 0 domyślnym poziomem synchronizacji jest CONFIRM. Jest on wystarczający tylko do ustawienia komendy interakcji na wartość SYNC_SEND_RECEIVE i trybu kontroli transakcji na 0 bez ustawiania poziomu synchronizacji. Jeśli do metody setSyncLevel(int) zostanie przekazana dowolna wartość liczbowa inna niż 0 lub 1, zostanie zgłoszony błąd.

Produkt IMS Connector for Java obsługuje następujące kombinacje:

Jeśli klient Java wysyła żądanie transakcji w trybie kontroli transakcji 1 z poziomem synchronizacji CONFIRM, produkt IMS Connector for Java przekazuje to żądanie do systemu IMS za pośrednictwem produktu IMS Connect. System IMS przetwarza tę transakcję i podejmuje próbę wysłania komunikatu wyjściowego do klienta Java za pośrednictwem produktu IMS Connector for Java. Produkt IMS Connector for Java wysyła w imieniu klienta Java potwierdzenie do systemu IMS. System IMS wyśle do produktu IMS Connector for Java kod powrotu wskazujący, czy zmiany zostały zatwierdzone. Jeśli tak, produkt IMS Connector for Java wyśle dane wyjściowe do klienta Java. Jeśli nie, klient Java odbierze wyjątek. Jeśli podczas trwania tego procesu wystąpią jakiekolwiek błędy, klient Java odbierze wyjątek.

Dostępność komunikatu wyjściowego do pobrania określa także typ wyjątku. Na przykład jeśli klient Java otrzymuje wyjątek IMSDFSMessageException, wskazujący na zatrzymanie transakcji, oznacza to, że aplikacja nie została uruchomiona. Dlatego nie będzie żadnego komunikatu wyjściowego do pobrania. Jeśli jednak transakcja jest uruchomiona, ale przed zwróceniem komunikatu wyjściowego do produktu IMS Connect przekroczona zostanie wartość właściwości executionTimeout, klient Java odbierze wyjątek EISSystemException informujący o upływie limitu czasu wykonania. W takim przypadku komunikat wyjściowy zostanie umieszczony w odpowiedniej asynchronicznej kolejce wyjściowej IMS OTMA lub potoku TPIPE do późniejszego pobrania.

Uwaga: W terminologii IMS/OTMA potok transakcji (TPIPE) to logiczne połączenie między klientem (produkt IMS Connect) i serwerem (IMS/OTMA). W przypadku interakcji w trybie kontroli transakcji 0, potok TPIPE jest identyfikowany przez wartość właściwości clientID użytą dla interakcji. Każda wartość właściwości clientID użyta dla transakcji w trybie kontroli transakcji 0 będzie miała własny potok TPIPE. W przypadku interakcji w trybie kontroli transakcji 1 potok TPIPE jest identyfikowany przez użyty dla tej interakcji numer portu produktu IMS Connect. W związku z tym każdy port będzie miał potok TPIPE, który będzie używany dla wszystkich klientów używających transakcji w trybie kontroli transakcji 1 na tym porcie.

Niezależnie od tego, czy klient Java uruchamia transakcję IMS w trybie kontroli transakcji 1 czy też 0, klient Java określa wartość właściwości interactionVerb obiektu IMSInteractionSpec. Jeśli określona została interakcja w trybie kontroli transakcji 0, istnieje możliwość, że klient Java będzie musiał udostępnić także wartość właściwości clientID obiektu IMSConnectionSpec. Właściwość clientID jest właściwością obiektu IMSConnectionSpec i identyfikuje asynchroniczną kolejkę wyjściową IMS OTMA lub potok TPIPE, gdzie umieszczane są komunikaty wyjściowe dostępne do pobrania. To, czy klient Java udostępnia właściwość clientID dla interakcji w trybie kontroli transakcji 0, zależy od typu połączenia gniazda używanego przez klienta Java.

Aby z potoku TPIPE pobrać komunikaty wyjściowe, klient Java wprowadza żądanie, za pomocą którego określa dla właściwości interactionVerb obiektu IMSInteractionSpec jedną z wartości SYNC_RECEIVE_ASYNCOUTPUT, SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT lub SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT oraz wartość właściwości clientID obiektu IMSConnectionSpec. Więcej informacji na temat obsługi asynchronicznych danych wyjściowych zawiera rozdział Chapter 9: Protocols w podręczniku IMS Connect Guide and Reference.

Ogólnie: interakcje SYNC_RECEIVE_ASYNCOUTPUT, SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT lub SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT mogą być wykorzystane do pobrania komunikatów wyjściowych umieszczonych w kolejce dla każdej wartości właściwości clientID, niezależnie od tego, w jaki sposób zostały tam umieszczone - czy w wyniku nieudanej transakcji w trybie kontroli transakcji 0, czy za pomocą aplikacji IMS, która spowodowała wstawienie ich do bloku ALTPCB (Alternate Program Communication Block - Alternatywny blok komunikacji programu). W przypadku pobierania komunikatu wyjściowego dla nieudanej transakcji w trybie kontroli transakcji 0, wartość właściwości clientID określona w obiekcie IMSConnectionSpec żądania pobrania musi być taka sama, jak wartość właściwości clientID określona dla nieudanej transakcji w trybie kontroli transakcji 0.

Jeśli dla danej wartości właściwości clientID w asynchronicznej kolejce wyjściowej OTMA nie ma żadnych danych, przekazany zostanie wyjątek przekroczenia limitu czasu wykonania. Wyjątek przekroczenia limitu czasu może oznaczać, że w kolejce nie ma żadnych komunikatów lub zbyt mała wartość limitu czasu uniemożliwiła produktowi IMS Connect pobranie komunikatu z kolejki. Dla interakcji SYNC_RECEIVE_ASYNCOUTPUT, SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT lub SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT, a także dla interakcji SYNC_SEND_RECEIVE, właściwość executionTimeout to czas, przez jaki produkt IMS Connect będzie czekać na odpowiedź z systemu IMS. Jeśli dla żądania pobrania nie zostanie podana wartość limitu czasu wykonania, użyta będzie wartość domyślna. Domyślna wartość limitu czasu to wartość elementu konfiguracyjnego TIMEOUT produktu IMS Connect. Aby zapewnić zwracanie komunikatów wyjściowych dla wszystkich typów interakcji, użytkownik będzie musiał eksperymentować z wartością limitu czasu wykonania.

Przetwarzanie trybów kontroli transakcji a połączenia gniazd

Wszystkie połączenia gniazd tworzone przez adapter zasobów IMS TM są trwałe. Innymi słowy, to samo połączenie gniazda między produktem IMS Connector for Java a produktem IMS Connect może być szeregowo wielokrotnie używane dla wielu interakcji z produktem IMS Connect. Połączenie gniazda nie będzie zamykane ani ponownie otwierane między interakcjami. Istnieją dwa rodzaje trwałych gniazd: współużytkowalne i dedykowane.

Trwałe gniazdo współużytkowalne

Trwałe gniazdo współużytkowalne może być współużytkowane (ponownie używane szeregowo) przez wiele aplikacji wykonujących interakcje w trybie kontroli transakcji 1 lub 0. Dla aplikacji wykonującej interakcję w trybie kontroli transakcji 0 na współużytkowanym trwałym gnieździe adapter zasobów IMS automatycznie generuje wartość właściwości clientID z przedrostkiem "HWS". Ta wartość właściwości clientID reprezentuje i identyfikuje połączenie gniazda oraz powiązany z nim potok TPIPE OTMA. Dla tego typu gniazda dozwolone są jedynie wartości właściwości clientID wygenerowane przez adapter zasobów IMS TM. W przypadku trwałego gniazda współużytkowalnego wartość właściwości clientID określona przez użytkownika nie jest dozwolona.

Uwaga: Ta właściwość clientID nie powinna być mylona z alternatywnym identyfikatorem klienta, właściwością obiektu IMSInteractionSpec, która odnosi się do pobierania asynchronicznych komunikatów wyjściowych z dowolnej kolejki wstrzymania OTMA (potoku TPIPE).
Uwaga: Aplikacje IMS, które wstawiają komunikaty do alternatywnego bloku PCB, nie mogą używać nazw rozpoczynających się od "HWS" dla alternatywnych bloków PCB.

Wszystkie komunikaty wyjściowe, które nie mogą być dostarczone do klienta Java wykonującego interakcję w trybie kontroli transakcji 0 na trwałym gnieździe współużytkowalnym, mogą być kolejkowane w celu ich późniejszego pobrania. Każda interakcja w trybie kontroli transakcji 1 lub 0 dla trwałego gniazda współużytkowalnego, która tworzy proces przełączania program-program wywołujący inną interakcję w trybie kontroli transakcji 0, daje w wyniku dodatkowe dane wyjściowe, które także mogą być kolejkowane w celu późniejszego pobrania. Trwałe gniazda współużytkowalne obsługują interakcje SYNC_RECEIVE_ASYNCOUTPUT, SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT i SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT. Jeśli alternatywny identyfikator klienta nie jest używany, to aby pobrać niedostarczone komunikaty wyjściowe, które zostały umieszczone w asynchronicznej kolejce wstrzymania IMS OTMA lub w potoku TPIPE, komendy interakcji muszą zostać wywołane w tej samej aplikacji klienckiej, ponieważ musi zostać użyty ten sam wygenerowany identyfikator klienta, który identyfikuje współużytkowane połączenie gniazda, oraz związany z nim potok TPIPE OTMA.

W przypadku współużytkowanych trwałych gniazd niedostarczone komunikaty wyjściowe mogą być obsłużone na więcej niż jeden sposób. Niedostarczone dane wyjściowe można pobrać, określając nazwę kolejki wstrzymania OTMA, w której są umieszczone asynchroniczne komunikaty wyjściowe, jako wartość właściwości alternatywnego identyfikatora klienta w obiekcie IMSInteractionSpec. Ewentualnie niedostarczone dane wyjściowe można wyczyścić. Aby czyścić niedostarczone komunikaty wyjściowe, należy się upewnić, że właściwość purgeAsyncOutput obiektu IMSInteractionSpec ma wartość TRUE. Ta właściwość wejściowa określa, czy produkt IMS Connect ma czyścić niedostarczone dane wyjściowe bloku PCB we/wy. Właściwość purgeAsyncOutput jest poprawna tylko z komendą interakcji SYNC_SEND_RECEIVE. Jeśli dla interakcji SYNC_SEND_RECEIVE nie zostanie określona ta właściwość, wartością domyślną jest TRUE.

Niedostarczone komunikaty wyjściowe można przekierować do innego miejsca docelowego, ustawiając właściwość reRoute obiektu IMSInteractionSpec na wartość TRUE. Ta właściwość jest poprawna tylko dla komendy interakcji SYNC_SEND_RECEIVE. Jeśli właściwość reRoute ma wartość TRUE, niedostarczony komunikat wyjściowy jest umieszczany w miejscu docelowym, którego nazwa jest określana przez aplikację kliencką we właściwości reRouteName obiektu IMSInteractionSpec. Jeśli właściwość reRoute jest ustawiona na wartość TRUE, a właściwość reRouteName nie jest podana, wartością właściwości reRouteName jest wartość określona w pliku konfiguracyjnym produktu IMS Connect. Jeśli w pliku konfiguracyjnym produktu IMS Connect nie podano żadnej wartości, użyta zostanie wartość domyślna HWS$DEF.

Współużytkowane połączenia trwałego gniazda tworzone są przez fabrykę połączeń systemu IMS z wykorzystaniem wymaganych wartości następujących właściwości niestandardowych:
  • Nazwa hosta = nazwa hosta TCP/IP komputera z uruchomionym produktem IMS Connect
  • Numer portu = powiązany numer portu
  • Nazwa składnicy danych = nazwa docelowego systemu IMS
  • CM0Dedicated = FALSE
Wartość FALSE to wartość domyślna właściwości CM0Dedicated, która zapewnia, że fabryka połączeń utworzy współużytkowane połączenia trwałego gniazda.

Trwałe gniazdo dedykowane

Trwałe gniazdo dedykowane używane jest przez aplikacje Java wykonujące jedynie interakcje w trybie kontroli transakcji 0. Może być współużytkowane (ponownie używane szeregowo) przez wiele aplikacji z tą samą wartością właściwości clientID określoną przez użytkownika. Dla tego typu gniazda dozwolone są jedynie interakcje z wartościami właściwości clientID określonymi przez użytkownika. Poprawna wartość właściwości clientID określona przez użytkownika:
  • Łańcuch znaków alfanumerycznych (A-Z, 0-9) lub znaków specjalnych (@,#,$) o długości od 1 do 8 znaków.
  • Nie może rozpoczynać się od łańcucha znaków "HWS".
  • Nie może być numerem portu produktu IMS Connect.
  • Małe litery zostaną zastąpione wielkimi literami.

Trwałe gniazdo dedykowane oznacza, że połączenie gniazda jest związane z określoną wartością właściwości clientID i pozostanie dedykowane tej wartości do momentu rozłączenia. Trwałe gniazda dedykowane obsługują interakcje SYNC_RECEIVE_ASYNCOUTPUT, SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT i SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT.

Interakcje SYNC_RECEIVE_ASYNCOUTPUT, SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT i SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT w dedykowanych trwałych gniazdach umożliwiają aplikacjom klienckim pobieranie komunikatów, które zostały umieszczone w asynchronicznej kolejce wyjściowej IMS OTMA po wykonaniu nieudanej interakcji w trybie kontroli transakcji 0, z aplikacji IMS, która wywołała wstawienie do bloku ALTPCB (Alternate Program Communication Block, Alternatywny blok komunikacji programu) lub z przekierowania wyjścia transakcji, która została wykonana na współużytkowanej fabryce połączeń. Aby pobrać komunikaty, aplikacja kliencka musi udostępnić wartość właściwości clientID, która reprezentuje potok TPIPE, asynchronicznie kolejkujący komunikaty wyjściowe. Interakcje dla trwałych gniazd dedykowanych, które mają niedostarczone komunikaty wyjściowe, nie mogą być przekierowane ani wyczyszczone.

Dedykowane połączenia trwałego gniazda są tworzone przez fabrykę połączeń systemu IMS z wartościami dla co najmniej następujących właściwości niestandardowych:
  • Nazwa hosta = nazwa hosta TCP/IP komputera z uruchomionym produktem IMS Connect
  • Numer portu = powiązany numer portu
  • Nazwa składnicy danych = nazwa docelowego systemu IMS
  • CM0Dedicated = TRUE

Wartość TRUE właściwości CM0Dedicated zapewnia, że fabryka połączeń utworzy dedykowane połączenia trwałego gniazda.

Uwaga: Jeśli do tworzenia dedykowanych trwałych gniazd w tej samej instancji produktu IMS Connect skonfigurowano więcej niż jedną fabrykę połączeń, w danym momencie tylko jedna fabryka połączeń może dedykować gniazdo dla konkretnej wartości właściwości clientID. Jeśli na przykład pierwsza fabryka połączeń pomyślnie utworzy połączenie gniazda dedykowane dla wartości CLIENT01 właściwości clientID, to jeśli druga fabryka połączeń spróbuje utworzyć połączenie gniazda dedykowane dla wartości CLIENT01, podczas gdy połączenie gniazda utworzone przez pierwsza fabrykę nadal jest połączone z produktem IMS Connect, otrzyma następujący wyjątek:
javax.resource.spi.EISSystemException: ICO0001E: Błąd
com.ibm.connector2.ims.ico.IMSTCPIPManagedConnection@23766050.processOutputOTMAMsg
(byte [], InteractionSpec,Record). IMS Connect zwrócił błąd: Kod powrotu=[8], 
Kod przyczyny=[DUPECLNT]. 
Użyto zduplikowanego identyfikatora klienta; identyfikator klienta jest obecnie używany. 

Zwalnianie trwałych gniazd

Połączenie TCP/IP między produktem IMS Connector for Java a produktem IMS Connect jest trwałe. Innymi słowy pozostaje otwarte tak długo, jak długo produkt IMS Connector for Java lub produkt IMS Connect nie przerwie tego połączenia z powodu błędu. Dotyczy to zarówno połączenia trwałego gniazda współużytkowalnego, jak i połączenia trwałego gniazda dedykowanego. Jednak w przypadku połączenia trwałego gniazda dedykowanego połączenie gniazda może być używane tylko przez interakcje, które mają taką samą wartość właściwości clientID, jak ta użyta do nawiązania połączenia. Liczba połączeń gniazda zwiększa się razem z liczbą nowych wartości właściwości clientID, używanych dla interakcji dla połączeń trwałego gniazda dedykowanego.

Jeśli właściwości maksymalnej liczby połączeń oraz limitu czasu połączenia mają wartości niezerowe, to jeśli zostanie osiągnięta maksymalna wartość właściwości MaxConnections i wszystkie połączenia będą używane, aplikacja po upłynięciu określonej dla właściwości limitu czasu połączenia liczby sekund otrzyma wyjątek ConnectionWaitTimeoutException. Jest to normalne zachowanie dla serwera aplikacji WebSphere Application Server. Wyjątek ConnectionWaitTimeoutException ma zastosowanie dla trwałych gniazd współużytkowalnych oraz dedykowanych.

Jeśli jednak osiągnięta została maksymalna liczba połączeń - określona przez właściwość MaxConnections - i jedno z połączeń trwałego gniazda nie jest używane, serwer aplikacji WebSphere Application Server rozłączy to gniazdo, aby odpowiedzieć na żądanie utworzenia nowego połączenia trwałego gniazda. Jest to normalne zachowanie dla serwera aplikacji WebSphere Application Server i ma zastosowanie dla trwałych gniazd dedykowanych i współużytkowalnych.


Opinie