/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #pragma once namespace Apache { namespace Qpid { namespace Interop { using namespace System; using namespace System::Threading; using namespace System::Transactions; ref class XaTransaction; public ref class DtxResourceManager { private: // Receive() or WaitForMessage() AmqpSession^ dtxControlSession; String^ dataSourceName; bool consumed; DWORD rmCookie; void* xaHelperp; void* dtcComp; int doubtCount; DtxResourceManager(AmqpConnection^); XaTransaction^ InternalGetXaTransaction (AmqpSession^ session, Transaction^ transaction); bool tmDown; // The active transactions Collections::Generic::Dictionary^ transactionMap; // one resource manager per AMQP broker per process static Collections::Generic::Dictionary^ resourceManagerMap = gcnew Collections::Generic::Dictionary(); void Cleanup(); ~DtxResourceManager(); !DtxResourceManager(); internal: static XaTransaction^ GetXaTransaction (AmqpSession^ session, Transaction^ transaction); void Complete(Transaction ^tx); void TmDown(); property AmqpSession^ DtxControlSession { AmqpSession^ get () { return dtxControlSession; } } void IncrementDoubt(); void DecrementDoubt(); #ifdef QPID_RECOVERY_TEST_HOOK public: static void ForceRecovery(Transaction ^tx); #endif }; }}} // namespace Apache::Qpid::Interop