本主題說明如何將 XMS 物件指派給 C++ 中的變數。
類別 | 表層複製 | 深層複製 |
---|---|---|
BytesMessage | 是 | |
Connection | 是 | |
ConnectionFactory | 是 | |
ConnectionMetaData | 是 | |
Destination | 是 | |
Exception | 是 | |
IllegalStateException | 是 | |
InitialContext | 是 | |
InvalidClientIDException | 是 | |
InvalidDestinationException | 是 | |
InvalidSelectorException | 是 | |
Iterator | 是 | |
MapMessage | 是 | |
Message | 是 | |
MessageConsumer | 是 | |
MessageEOFException | 是 | |
MessageFormatException | 是 | |
MessageNotReadableException | 是 | |
MessageNotWritableException | 是 | |
MessageProducer | 是 | |
ObjectMessage | 是 | |
Property | 是 | |
QueueBrowser | 是 | |
Requestor | 是 | |
ResourceAllocationException | 是 | |
SecurityException | 是 | |
Session | 是 | |
StreamMessage | 是 | |
String | 是 | |
TextMessage | 是 | |
TransactionInProgressException | 是 | |
TransactionRolledBackException | 是 |
當進行物件的表層複製時,只有在參照該物件的所有變數全超出範圍時, 才會刪除該物件。如果在參照物件的變數超出範圍前,應用程式便關閉或刪除該物件, 則應用程式即無法再經由任何變數存取物件。
#include <xms.hpp> using namespace std; int main(int argc, char *argv[]) { xms::ConnectionFactory cf; xms::Connection conn; xms::Session sess; xms::Session sess2; cf.setIntProperty(XMSC_CONNECTION_TYPE, XMSC_CT_RTT); cf.setIntProperty(XMSC_RTT_CONNECTION_PROTOCOL, XMSC_RTT_CP_TCP); cf.setStringProperty(XMSC_RTT_HOST_NAME, "localhost"); cf.setIntProperty(XMSC_RTT_PORT, 1506); conn = cf.createConnection(); sess = conn.createSession(); // 進行 Session 物件的表層複製。 sess2 = sess; // 使用 sess2 變數在 Session 物件中設定一個內容。 sess2.setStringProperty("property", "test"); // 進行 Session 物件的另一項表層複製。 if (sess2.isNull() != xmsTRUE) { xms::Session sess3 = sess2; // 在 Session 物件中設定另一個內容,此時是使用 // sess3 變數。 sess3.setStringProperty("another property", "test"); } // 如今 sess3 變數超出範圍,但第二個內容 // 仍設定在 Session 物件中。 // 關閉 Session 物件。 sess.close(); // 如今,Session 物件已關閉,而無法再經由 // sess2 變數來存取。因此如下的陳述式 // 會導致將 "invalid session" (無效的階段作業)寫入標準輸出 // 串流中。 if (sess2.isNull() == xmsTRUE) { cout << "invalid session" << endl; } return(0); }