/* * 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. */ #ifndef _CMS_XID_H_ #define _CMS_XID_H_ #include #include namespace cms { /** * An interface which provides a mapping for the X/Open XID transaction * identifier structure. The Xid interface is used by the Transaction Manager * and the Resource managers. It is not typically used by application programs * directly but the application developer must define a mechanism to map the * calls and structures used by the Transaction Manager API in use into the * format used by the CMS XA interfaces. * * @since 2.3 */ class CMS_API Xid { private: Xid(const Xid&); Xid& operator=(const Xid&); public: /** * The maximum number of bytes which will be copied into the array passed to * getGlobaltransactionId(). */ static const int MAXGTRIDSIZE; /** * The maximum number of bytes which will be copied into the array that is passed * to getBranchQualifier(). */ static const int MAXBQUALSIZE; public: Xid(); virtual ~Xid(); /** * Creates a Copy of this Xid instance that contains the same id values. * * @returns a new Xid instance that is equal to this one when compared. */ virtual Xid* clone() const = 0; /** * Compares this Xid to another and returns true if they are the same. * * @returns true if both Xid's represent that same id value. */ virtual bool equals(const Xid* other) const = 0; /** * Gets the transaction branch qualifier component of the XID. The value of this * Xid's branch qualifier is copied into the buffer provided. If the size of the * provided buffer is not large enough to accommodate the branch qualifier then * no copy is performed and the method returns -1. * * @param buffer * The location in memory to copy the qualifier bytes to. * @param size * The size of the buffer provided. * * @return the number of bytes copied into the buffer, or -1 if the buffer * provided was not large enough. * * @throws XAException if the size parameter is less than zero or buffer is NULL. */ virtual int getBranchQualifier(unsigned char* buffer, int size) const = 0; /** * Gets the format identifier component of the XID. * * @return an integer containing the format identifier. 0 means the OSI CCR * format. */ virtual int getFormatId() const = 0; /** * Gets the global transaction id component of the XID. The value of this * Xid's transaction id is copied into the buffer provided. If the size of the * provided buffer is not large enough to accommodate the transaction id then * no copy is performed and the method returns -1. * * @param buffer * The location in memory to copy the transaction id bytes to. * @param size * The size of the buffer provided. * * @return the number of bytes copied into the buffer, or -1 if the buffer * provided was not large enough. * * @throws XAException if the size parameter is less than zero or buffer is NULL. */ virtual int getGlobalTransactionId(unsigned char* buffer, int size) const = 0; }; } #endif /* _CMS_XID_H_ */