WebSphere Message Service Clients for C/C++ and .NET, Version 1.2 作業系統: Linux, Windows

在 C++ 中指派 XMS 物件

主題說明如何將 XMS 物件指派給 C++ 中的變數。

指派運算子會在表 1 所列的每一個 XMS 類別上超載。如果物件已指派給某個變數, 且應用程式指派該變數的值給另一個同類型的變數,則超載指派運算子的精確動作, 取決於所要指派的物件類型而定。 表 1 針對每一種類型的物件分別指出超載指派運算子是對物件進行表層或深層複製。
表 1. 超載指派運算子的 XMS 類別
類別 表層複製 深層複製
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);
}

Concept topic

使用條款 | 評比此網頁

時間戳記前次更新: 25 Apr 2006
(C) Copyright IBM Corporation 2005. All Rights Reserved.
本資訊中心採用 Eclipse 技術。(http://www.eclipse.org)