C/C++ / CGI / Sieć Novell / PHP / Java / SQL / Oracle / WebSphere MQ / WebSphere Message Broker / JavaScript / Humor / IT Quiz

Exity

Exity są to specjalne aplikacje powiązane z kanałami MQ uruchamiane przez proces MCA. W zależności od tego jakiego typu są to exity i z jakim typem kanału są one związane, mogą mieć różne zastosowanie. Pozwalają one np. na weryfikacje strony klienckiej przy próbie połączenie i pozwolić lub nie na nawiązanie połączenia. Mogą służyć do manipulacji komunikatami zanim zostaną one odczytane przez aplikacje.

Typy exitów

Rozróżniamy następujące typy exitów:

Message exit
Ten typ exita jest wywoływany przy każdej obsłudze komunikatu. Tego typu exit jest wywoływany zaraz po wywołaniu metody MQGET przez proces MCA po stronie wysyłającej, przed wywołaniem metody MQPUT przez proces MCA po stronie odbierającej, oraz przy inicjacji i kończeniu pracy procesu MCA. Możemy np. za pomocą tego exita przed wysłaniem go po sieci treść komunikatu zakodować po stronie sender, a następnie odkodować po stronie reciever. Możemy tu również zmieniać dowolne pola nagłówka MQMD.

Message-retry exit
Tego typu exit jest wywoływany, kiedy nie udało się otworzyć docelową kolejkę. Możemy tu np. ustawiać jak często i z jaką częstotliwością ponawiać próbę umieszczenia komunikatu w kolejce.

Receive exit
Tego typu exit jest wywoływany zaraz po pojawieniu się transmisji po sieci oraz przy inicjacji i kończeniu pracy procesu MCA.

Security exit
Jest to chyba najczęściej spotykany typ exita. Tego typu exit jest wywoływany zaraz po zakończeniu procesu negocjacji przy starcie kanału po obu stronach oraz przy inicjacji i kończeniu pracy procesu MCA. Pozwala on na autentykację drugiej strony komunikacji. Za pomocą tego exita możemy po stronie odbierającej kanału oczekiwać na wysłanie przez drugą stronę hasła pozwalającego na komunikację. W takim przypadku po drugiej stronie kanału potrzebne jest zastosowanie innego security exita, który wysłałby takie hasło.

Send exit
Tego typu exit jest wywoływany przed transmisją po sieci oraz przy inicjacji i kończeniu pracy procesu MCA.

Auto-definition exit
Tego typu exit jest wywoływany, kiedy staramy się wystartować konał typu auto-definition. Możemy tu np. zmieniać definicję tworzonego kanału.

Tryby wywołań exita

Rozróżniamy następujące tryby wywołań exita:

MQXR_INIT
Ten tryb oznacza, że exit jest wywoływany po raz pierwszy. W tym miejscu możemy zainicjować zewnętrzne zasoby, oraz ogólnie zainicjować jego pracę.

MQXR_TERM
Ten tryb jest przeciwieństwem poprzedniego. Oznacza on, że exit jest w ostatniej fazie procesowania i to jest najlepsze miejsce do zwolnienia wszystkich zainicjowanych zasobów wcześniej podczas trybu MQXR_INIT .

MQXR_MSG
Ten tryb oznacza, że exit jest w trakcie procesowanie komunikatu. Tryb ten jest związany tylko i wyłącznie z exitami typu message.

MQXR_XMIT
Ten tryb oznacza, że exit jest w trakcie transmisji danych. Tryb ten jest związany tylko i wyłącznie z exitami typu send i receive.

MQXR_SEC_MSG
Ten tryb oznacza, że exit jest w trakcie procesowania danych security. Tryb ten jest związany tylko i wyłącznie z exitami typu security.

MQXR_INIT_SEC
Ten tryb występuje zaraz po pojawieniu się trybu MQXR_INIT w przypadku security exita po stronie reciever. Jeśli teraz zostanie zwrócona odpowiedź MQXCC_OK , to po stronie security exita typu sender zostanie wygenerowany tryb MQXR_INIT_SEC . Jeśli teraz zostanie zwrócona odpowiedź MQXCC_SEND_SEC_MSG lub MQXCC_SEND_AND_REQUEST_SEC_MSG , to po stronie security exita typu sender nie zostanie wygenerowany nigdy tryb MQXR_INIT_SEC tylko MQXR_SEC_MSG . Tryb ten jest związany tylko i wyłącznie z exitami typu security.

MQXR_RETRY
Ten tryb jest wywoływany w przypadku ponownej próby umieszczenia komunikatu w kolejce po pojawieniu się błędu. Tryb ten jest związany tylko i wyłącznie z exitami typu message-retry.

MQXR_AUTO_CLUSSDR
Ten tryb jest wywoływany w przypadku automatycznego utworzenia kanału typu cluster-sender. Tryb ten jest związany tylko i wyłącznie z exitami typu auto-definition.

MQXR_AUTO_RECEIVER
Ten tryb jest wywoływany w przypadku automatycznego utworzenia kanału typu receiver. Tryb ten jest związany tylko i wyłącznie z exitami typu auto-definition.

MQXR_AUTO_SVRCONN
Ten tryb jest wywoływany w przypadku automatycznego utworzenia kanału typu server-connection. Tryb ten jest związany tylko i wyłącznie z exitami typu auto-definition.

MQXR_AUTO_CLUSRCVR
Ten tryb jest wywoływany w przypadku automatycznego utworzenia kanału typu cluster-receiver. Tryb ten jest związany tylko i wyłącznie z exitami typu auto-definition.

MQXR_SEC_PARMS
Ten tryb jest wywoływany w celu poinformowania iż struktura MQCSP została przesłana do exita.

Typy odpowiedzi exita

Rozróżniamy następujące typy odpowiedzi exita:

MQXCC_OK
Ten typ oznacza, że procesowanie w exicie zakończyło się sukcesem.

MQXCC_SUPPRESS_FUNCTION
Ten typ oznacza, że kanał powinien zostać przerwany.

MQXCC_SEND_SEC_MSG
Ten typ oznacza, że exit drugiej stronie przekazuje dane. Tryb ten jest związany tylko i wyłącznie z exitami typu security.

MQXCC_SEND_AND_REQUEST_SEC_MSG
Ten typ oznacza, że exit drugiej stronie przekazuje dane oraz dodatkowa, że oczekuje na odpowiedź. Tryb ten jest związany tylko i wyłącznie z exitami typu security.

MQXCC_SUPPRESS_EXIT
MQXCC_CLOSE_CHANNEL
Ten typ oznacza, że MCA powinien zamknąć kanał. Tryb ten jest związany ze wszystkimi typami exitów za wyjątkiem exitów typu auto-definition.

Poniższa tabelka ukazuje możliwe exity i rodzaje kanałów do których mogą być one podpięte.

Exit Możliwe kanały
Message exit Sender channel, Server channel, Cluster- sender channel, Receiver channel, Requester channel, Cluster- receiver channel
Message- retry exit Receiver channel, Requester channel, Cluster- receiver channel
Receive exit Sender channel, Server channel, Cluster- sender channel, Receiver channel, Requester channel, Cluster- receiver channel, Client- connection channel, Server- connection
Security exit Sender channel, Server channel, Cluster- sender channel, Receiver channel, Requester channel, Cluster- receiver channel, Client- connection channel, Server- connection
Send exit Sender channel, Server channel, Cluster- sender channel, Receiver channel, Requester channel, Cluster- receiver channel, Client- connection channel, Server- connection
Auto- definition exit Cluster- sender channel, Receiver channel, Requester channel, Cluster- receiver channel, Server- connection
{%1}
Wywoływana funkcja i struktury exita

Wywoływana funkcja

void MQENTRY Exit( PMQCXP pChannelExitParms,
                         PMQCD pChannelDefinition,
                         PMQLONG pDataLength,
                         PMQLONG pAgentBufferLength,
                         PMQCHAR pAgentBuffer,
                         PMQLONG pExitBufferLength,
                         PMQCHAR *pExitBufferAddr)


Struktura MQCXP

struct tagMQCXP {
   MQCHAR4   StrucId;            /* Structure identifier */
   MQLONG    Version;            /* Structure version number */
   MQLONG    ExitId;             /* Type of exit */
   MQLONG    ExitReason;         /* Reason for invoking exit */
   MQLONG    ExitResponse;       /* Response from exit */
   MQLONG    ExitResponse2;      /* Secondary response from exit */
   MQLONG    Feedback;           /* Feedback code */
   MQLONG    MaxSegmentLength;   /* Maximum segment length */
   MQBYTE16  ExitUserArea;       /* Exit user area */
   MQCHAR32  ExitData;           /* Exit data */
   MQLONG    MsgRetryCount;      /* Number of times the message has
                                    been retried */
   MQLONG    MsgRetryInterval;   /* Minimum interval in milliseconds
                                    after which the put operation
                                    should be retried */
   MQLONG    MsgRetryReason;     /* Reason code from previous attempt
                                    to put the message */
   MQLONG    HeaderLength;       /* Length of header information */
   MQCHAR48  PartnerName;        /* Partner Name */
   MQLONG    FAPLevel;           /* Negotiated Formats and Protocols
                                    level */
   MQLONG    CapabilityFlags;    /* Capability flags */
   MQLONG    ExitNumber;         /* Exit number */
   /* Ver:3 */
   /* Ver:4 */
   MQLONG    ExitSpace;          /* Number of bytes in transmission
                                    buffer reserved for exit to use */
   /* Ver:5 */
   MQCHAR12  SSLCertUserid;      /* User identifier associated
                                    with remote SSL certificate */
   MQLONG    SSLRemCertIssNameLength;    /* Length of distinguished
                                            name of issuer of remote
                                            SSL certificate */
   MQPTR     SSLRemCertIssNamePtr;       /* Address of distinguished
                                            name of issuer of remote
                                            SSL certificate */
   PMQCSP    SecurityParms;      /* Address of security parameters */
   MQLONG    CurHdrCompression;  /* Header data compression
                                    used for current message */
   MQLONG    CurMsgCompression;  /* Message data compression
                                    used for current message */
   /* Ver:6 */
};


Struktura MQCD

struct tagMQCD {
   MQCHAR    ChannelName[20];           /* Channel definition name */
   MQLONG    Version;                   /* Structure version number */
   MQLONG    ChannelType;               /* Channel type */
   MQLONG    TransportType;             /* Transport type */
   MQCHAR    Desc[64];                  /* Channel description */
   MQCHAR    QMgrName[48];              /* Queue-manager name */
   MQCHAR    XmitQName[48];             /* Transmission queue name */
   MQCHAR    ShortConnectionName[20];   /* First 20 bytes of connection
                                           name */
   MQCHAR    MCAName[20];               /* Reserved */
   MQCHAR    ModeName[8];               /* LU 6.2 Mode name */
   MQCHAR    TpName[64];                /* LU 6.2 transaction program
                                           name */
   MQLONG    BatchSize;                 /* Batch size */
   MQLONG    DiscInterval;              /* Disconnect interval */
   MQLONG    ShortRetryCount;           /* Short retry count */
   MQLONG    ShortRetryInterval;        /* Short retry wait interval */
   MQLONG    LongRetryCount;            /* Long retry count */
   MQLONG    LongRetryInterval;         /* Long retry wait interval */
   MQCHAR    SecurityExit[128];         /* Channel security exit name*/
   MQCHAR    MsgExit[128];              /* Channel message exit name */
   MQCHAR    SendExit[128];             /* Channel send exit name */
   MQCHAR    ReceiveExit[128];          /* Channel receive exit name */
   MQLONG    SeqNumberWrap;             /* Highest allowable message
                                           sequence number */
   MQLONG    MaxMsgLength;              /* Maximum message length */
   MQLONG    PutAuthority;              /* Put authority */
   MQLONG    DataConversion;            /* Data conversion */
   MQCHAR    SecurityUserData[32];      /* Channel security exit user
                                           data */
   MQCHAR    MsgUserData[32];           /* Channel message exit user
                                           data */
   MQCHAR    SendUserData[32];          /* Channel send exit user
                                           data */
   MQCHAR    ReceiveUserData[32];       /* Channel receive exit user
                                           data */
   /* Ver:1 */
   MQCHAR    UserIdentifier[12];        /* User identifier */
   MQCHAR    Password[12];              /* Password */
   MQCHAR    MCAUserIdentifier[12];     /* First 12 bytes of MCA user
                                           identifier */
   MQLONG    MCAType;                   /* Message channel agent type*/
   MQCHAR    ConnectionName[264];       /* Connection name */
   MQCHAR    RemoteUserIdentifier[12];  /* First 12 bytes of user
                                           identifier from partner */
   MQCHAR    RemotePassword[12];        /* Password from partner */
   /* Ver:2 */
   MQCHAR    MsgRetryExit[128];         /* Channel message retry exit
                                           name */
   MQCHAR    MsgRetryUserData[32];      /* Channel message retry exit
                                           user data */
   MQLONG    MsgRetryCount;             /* Number of times MCA will try
                                           to put the message, after
                                           first attempt has failed */
   MQLONG    MsgRetryInterval;          /* Minimum interval in
                                           milliseconds after which the
                                           open or put operation will
                                           be retried */
   /* Ver:3 */
   MQLONG    HeartbeatInterval;         /* Time in seconds between
                                           heartbeat flows */
   MQLONG    BatchInterval;             /* Batch duration */
   MQLONG    NonPersistentMsgSpeed;     /* Speed at which nonpersistent
                                           messages are sent */
   MQLONG    StrucLength;               /* Length of MQCD structure */
   MQLONG    ExitNameLength;            /* Length of exit name */
   MQLONG    ExitDataLength;            /* Length of exit user data */
   MQLONG    MsgExitsDefined;           /* Number of message exits
                                           defined */
   MQLONG    SendExitsDefined;          /* Number of send exits
                                           defined */
   MQLONG    ReceiveExitsDefined;       /* Number of receive exits
                                           defined */
   MQPTR     MsgExitPtr;                /* Address of first MsgExit
                                           field */
   MQPTR     MsgUserDataPtr;            /* Address of first MsgUserData
                                           field */
   MQPTR     SendExitPtr;               /* Address of first SendExit
                                           field */
   MQPTR     SendUserDataPtr;           /* Address of first
                                           SendUserData field */
   MQPTR     ReceiveExitPtr;            /* Address of first ReceiveExit
                                           field */
   MQPTR     ReceiveUserDataPtr;        /* Address of first
                                           ReceiveUserData field */
   /* Ver:4 */
   MQPTR     ClusterPtr;                /* Address of a list of cluster
                                           names */
   MQLONG    ClustersDefined;           /* Number of clusters to which
                                           the channel belongs */
   MQLONG    NetworkPriority;           /* Network priority */
   /* Ver:5 */
   MQLONG    LongMCAUserIdLength;       /* Length of long MCA user
                                           identifier */
   MQLONG    LongRemoteUserIdLength;    /* Length of long remote user
                                           identifier */
   MQPTR     LongMCAUserIdPtr;          /* Address of long MCA user
                                           identifier */
   MQPTR     LongRemoteUserIdPtr;       /* Address of long remote user
                                           identifier */
   MQBYTE40  MCASecurityId;             /* MCA security identifier */
   MQBYTE40  RemoteSecurityId;          /* Remote security identifier*/
   /* Ver:6 */
   MQCHAR    SSLCipherSpec[32];         /* SSL CipherSpec */
   MQPTR     SSLPeerNamePtr;            /* Address of SSL peer name */
   MQLONG    SSLPeerNameLength;         /* Length of SSL peer name */
   MQLONG    SSLClientAuth;             /* Whether SSL client
                                          authentication is required */
   MQLONG    KeepAliveInterval;         /* Keepalive interval */
   MQCHAR    LocalAddress[48];          /* Local communications
                                           address */
   MQLONG    BatchHeartbeat;            /* Batch heartbeat interval */
   /* Ver:7 */
   MQLONG    HdrCompList[2];            /* Header data
                                           compression list */
   MQLONG    MsgCompList[16];           /* Message data
                                           compression list */
   MQLONG    CLWLChannelRank;           /* Channel rank */
   MQLONG    CLWLChannelPriority;       /* Channel priority */
   MQLONG    CLWLChannelWeight;         /* Channel weight */
   MQLONG    ChannelMonitoring;         /* Channel monitoring */
   MQLONG    ChannelStatistics;         /* Channel statistics */
   /* Ver:8 */
};


Powrót


  Autorem serwisu jest Marcin Kasiński
Wszelkie prawa zastrzeżone. All rights reserved.
powered by technology... linux eclipse java php