CTR NEX API Reference
nn::nex::IDGenerator クラス

エンティティごとに一意なIDを生成するためのクラスです。 [詳解]

#include <NetZ/src/Core/DOCore/IDGenerator.h>

+ nn::nex::IDGenerator の継承関係図

公開メンバ関数

virtual qBool ApproveEmigration (qUnsignedInt32 uiReason)
 複製オブジェクトがマイグレーションを行うかどうかを返します。 [詳解]
 
virtual qBool ApproveFaultRecovery ()
 複製オブジェクトに障害回復機能をつけるかどうかを返します。 [詳解]
 
qBool GenerateID (ID *uiRetID, qUnsignedInt32 uiTimeout=WAIT_INFINITE_TIMEOUT)
 このIDGeneratorからすべてのステーションを通じて利用可能な一意のIDを生成します。 [詳解]
 
size_t GetNbLocalIDs () const
 ローカルプールに存在している利用可能なID数を取得します。 [詳解]
 
size_t GetRequestedRangeSize () const
 デュプリカが複製マスターに対して要求するID範囲を取得します。 [詳解]
 
virtual void OperationEnd (DOOperation *pOperation)
 複製オブジェクトシステム操作が終了されるたびに呼び出されます。 [詳解]
 
qBool SetIDRange (ID idFirst, ID idLast)
 このIDGeneratorが生成できるIDの範囲を設定します。 [詳解]
 
void SetRequestedRangeSize (qUnsignedInt32 uiRangeSize)
 デュプリカが複製マスターに対して要求するID範囲を設定します。 [詳解]
 
virtual void Trace (qUnsignedInt64 uiTraceFlags=TRACE_ALWAYS) const
 現在のID範囲複製マスターと、このローカルステーションに関する情報をトレースします。 [詳解]
 

静的公開メンバ関数

static qUnsignedInt32 GetDefaultRequestedRangeSize ()
 デュプリカが複製マスターに対して要求するID範囲の、IDGenerator生成時におけるデフォルト値を取得します。 [詳解]
 
static void SetDefaultRequestedRangeSize (qUnsignedInt32 uiRangeSize)
 デュプリカが複製マスターに対して要求するID範囲の、IDGenerator生成時におけるデフォルト値を設定します。 [詳解]
 

非公開型

typedef RefTemplate< DuplicatedObjectRef
 複製オブジェクトへの安全な参照を行うためのtypdef
 
typedef SelectionIteratorTemplate< DuplicatedObjectSelectionIterator
 複製オブジェクトを列挙するためのイテレータのtypedef
 

非公開メンバ関数

qBool AttemptEmigration (DOHandle hNewLocation)
 この複製オブジェクトを指定されたステーションに対してエミグレーションさせます。 [詳解]
 
virtual qReal ComputeDistance (DuplicatedObject *pOtherObject)
 推測航法において、距離ベースの推定エラーを計算する際の距離計算を行います。 [詳解]
 
qBool CreateDuplica (DOHandle hNewDuplicaStation)
 この複製オブジェクトのデュプリカを作成します。 [詳解]
 
qBool DeleteMainRef ()
 複製オブジェクトの主参照を削除するように指示します。 [詳解]
 
qBool Emigrate (MigrationContext *pContext, DOHandle hTargetStation)
 この複製オブジェクトを指定されたステーションに対してエミグレーションさせます。 [詳解]
 
const qCharGetClassNameString () const
 複製オブジェクトのクラス名を文字列として取得します。 [詳解]
 
const qCharGetDatasetNameString (qByte byDatasetIndex) const
 この複製オブジェクトに関連付けられているデータセットの名称を取得します。 [詳解]
 
DOClassID GetDOClassID () const
 この複製オブジェクトの複製オブジェクトクラスIDを取得します。 [詳解]
 
DOHandle GetHandle () const
 この複製オブジェクトの複製オブジェクトハンドルを取得します。 [詳解]
 
qUnsignedInt32 GetHandleValue () const
 この複製オブジェクトのインスタンスを表すqUnsignedInt32 型の値を取得します。 [詳解]
 
StationID GetMasterID () const
 この複製オブジェクトのマスターのステーションのStationIDを取得します。 [詳解]
 
DOHandle GetMasterStation () const
 この複製オブジェクトの複製マスターとなっているStation オブジェクトの複製オブジェクトハンドルを取得します。 [詳解]
 
qBool HasAuthority () const
 この複製オブジェクトが権限を持っているかどうかを取得します。 [詳解]
 
virtual void InitDO ()
 複製オブジェクトが初期化されたときにシステム側から呼び出されます。 [詳解]
 
qBool IsA (DOClassID idDOCID) const
 この複製オブジェクトインスタンスが指定された複製オブジェクトクラスのインスタンスであるかを調べます。 [詳解]
 
virtual qBool IsACoreDO () const
 この複製オブジェクトがCoreDOであるかどうかを取得します。 [詳解]
 
qBool IsADuplica () const
 この複製オブジェクトがデュプリカであるか、そうでないかを取得します。 [詳解]
 
qBool IsADuplicationMaster () const
 この複製オブジェクトが複製マスターであるか、そうでないかを取得します。 [詳解]
 
qBool IsAKindOf (DOClassID idDOCID) const
 この複製オブジェクトインスタンスが指定された複製オブジェクトクラス、またはその派生関係であるかどうかを調べます。 [詳解]
 
qBool IsAUserDO () const
 この複製オブジェクトがUserDOであるかどうかを取得します。 [詳解]
 
qBool IsAWellKnownDO () const
 この複製オブジェクトが既知オブジェクトクラスのインスタンスであるかどうかを取得します。 [詳解]
 
qBool IsGlobal () const
 このインスタンスがグローバル複製オブジェクトであるかどうかを取得します。 [詳解]
 
qBool IsPublished () const
 この関数が発行されたかどうかを取得します。 [詳解]
 
qBool MainRefIsDeleted () const
 DeleteMainRef 関数がこのオブジェクトに対して呼び出されたかどうかを取得します。 [詳解]
 
qBool MigrationInProgress () const
 この複製オブジェクトがマイグレーションを行っている最中かどうかを取得します。 [詳解]
 
virtual void OperationBegin (DOOperation *pOperation)
 複製オブジェクトシステム操作が開始されるたびに呼び出されます。 [詳解]
 
qBool Publish (qUnsignedInt32 uiTimeout=DEFAULT_PUBLISH_TIMEOUT)
 この複製オブジェクトのインスタンスをセッションにいるステーションに発行します。 [詳解]
 
qBool Refresh ()
 デュプリカのデータセットの情報をバッファから転送します。 [詳解]
 
qBool Refresh (const Time &tRefreshTime)
 デュプリカのデータセットの情報をバッファから転送します。 [詳解]
 
qBool Refresh (DataSet &refDataset)
 デュプリカのデータセットの情報をバッファから転送します。 [詳解]
 
qBool Refresh (DataSet &refDataset, const Time &tRefreshTime)
 デュプリカのデータセットの情報をバッファから転送します。 [詳解]
 
qResult Update ()
 すべてのデータセットの内容が更新されたことをセッションに存在するデュプリカに通知します。 [詳解]
 
qResult Update (const Time &tUpdateTime)
 すべてのデータセットの内容が更新されたことをセッションに存在するデュプリカに通知します。 [詳解]
 
qResult Update (DataSet &refDataset)
 指定されたデータセットの内容が更新されたことをセッションに存在するデュプリカに通知します。 [詳解]
 
qResult Update (DataSet &refDataset, const Time &tUpdateTime)
 指定されたデータセットの内容が更新されたことをセッションに存在するデュプリカに通知します。 [詳解]
 

静的非公開メンバ関数

static DuplicatedObjectCreate (qUnsignedInt32 uiTimeout==DEFAULT_CREATE_TIMEOUT)
 複製オブジェクトのローカルインスタンスを作成します。 [詳解]
 
static DuplicatedObjectCreate (DOID idUserDefinedID)
 複製オブジェクトのローカルインスタンスを作成します。 [詳解]
 
static DuplicatedObjectCreate (DOClassID idDOClass, qUnsignedInt32 uiTimeout=WAIT_INFINITE_TIMEOUT)
 複製オブジェクトのローカルインスタンスを作成します。 [詳解]
 
static DuplicatedObjectCreate (DOClassID idDOClass, DOID idUserDefinedID)
 複製オブジェクトのローカルインスタンスを作成します。 [詳解]
 
static DuplicatedObjectCreate (const DOHandle &dohHandle)
 複製オブジェクトのローカルインスタンスを作成します。 [詳解]
 
static DuplicatedObjectCreateWellKnown (WKHandle &hWK)
 指定された既知オブジェクトを作成します。 [詳解]
 
static DuplicatedObjectDynamicCast (DuplicatedObject *pDO)
 複製オブジェクトへのポインタの動的キャストを行います。 [詳解]
 
static qBool FetchDuplica (FetchContext *pContext, DOHandle hFetchedObject)
 複製オブジェクトのデュプリカを取ってきます。 [詳解]
 
static DOOperationGetCurrentOperation ()
 現在実行している最中の、複製オブジェクトに対する操作オブジェクトへのポインタを取得します。 [詳解]
 
static OperationManagerGetOperationManager ()
 OperationManager へのポインタを取得します。 [詳解]
 

静的非公開変数類

static const qUnsignedInt32 DEFAULT_CREATE_TIMEOUT = 1000
 DuplicatedObject::Create で指定されるデフォルトのタイムアウト値です。単位はミリ秒です。 [詳解]
 
static const qUnsignedInt32 DEFAULT_PUBLISH_TIMEOUT = 1000
 DuplicatedObject::Publish で指定されるデフォルトのタイムアウト値です。単位はミリ秒です。 [詳解]
 

詳解

エンティティごとに一意なIDを生成するためのクラスです。

このクラスは、アプリケーションの中のエンティティごとに一意なIDを生成するために利用されます。 このクラスのインスタンスによってIDが生成され、それは一意であることが保証されますが、 複数のIDGeneratorクラスのインスタンスは同一のIDを生成する可能性があります。

このクラスは、システムが自動的に複製オブジェクトのIDを設定するために使用されます。 しかし、このクラスが複製オブジェクトのIDを生成するために利用されるとき、 このクラスはそれぞれの複製オブジェクトクラスごとに作成される必要があります (それぞれのクラスごとに一意のIDを割り当てる必要があるため)。

すべてのIDGeneratorオブジェクトはグローバルであり、ステーションがセッションに 参加するために発見されることが保証されています。

関数詳解

qBool nn::nex::IDGenerator::GenerateID ( ID uiRetID,
qUnsignedInt32  uiTimeout = WAIT_INFINITE_TIMEOUT 
)

このIDGeneratorからすべてのステーションを通じて利用可能な一意のIDを生成します。

すべてのIDGeneratorオブジェクト(複製マスターもデュプリカも含む)は、それぞれが利用できるIDのローカルプールを持っています。 このプールが空になる前に(おおよそ25のIDが使われたとき)に新しいIDのローカルプールを複製マスターに要求します。

もしも有効なIDがローカルIDプールからすべてなくなってしまったときには、 ステーションは、新しいIDプールを複製マスターに要求する必要があります。 そのときにいくらかの時間(だいたい複製マスターとのラウンドトリップ時間と同等ぐらいの時間)この関数はブロックします。

引数
uiRetID[out] 生成に成功したときにID番号を受け取るためのポインタを指定します。
uiTimeout[in] IDを生成するためのシステムが待つための最大待ち時間をミリ秒単位で指定します(デフォルトはタイムアウトなし)。
戻り値一覧:

true 正確にIDが生成できた場合に返ります。

false 生成に失敗した場合、もしくはエラーが発生した場合に返ります。

qBool nn::nex::IDGenerator::SetIDRange ( ID  idFirst,
ID  idLast 
)

このIDGeneratorが生成できるIDの範囲を設定します。

idFirstで指定されたIDから、idLastで指定した範囲のIDを このIDGeneratorが生成するようになります。ここで指定した、最後の値に 生成されたIDが到達すると、それ以上のGenerateID 関数呼び出しは失敗します。

この関数は、IDGeneratorの複製マスターがのみが呼び出すことが出来ます。 また、いずれかのステーションがGenerateID 関数を呼ぶ前でなければなりません。

引数
idFirst[in] 生成が開始されるIDを指定します。
idLast[in] 生成が終了されるIDを指定します。
戻り値一覧:

true 正確にIDの範囲が設定できた場合に返ります。

false エラーが発生した場合に返ります。 デュプリカに対してこの関数を呼び出した場合には、SYSTEMERROR_OBJDUP_INVALID_ON_DUPLICAがシグナルされます。

参照
GenerateID, DuplicatedObject::IsADuplicationMaster
void nn::nex::IDGenerator::SetRequestedRangeSize ( qUnsignedInt32  uiRangeSize)

デュプリカが複製マスターに対して要求するID範囲を設定します。

すべてのIDGeneratorオブジェクト(複製マスターもデュプリカも含む)は、それぞれが利用できるIDのローカルプールを持っています。 このプールが空になる前に(おおよそ25のIDが使われたとき)に新しいIDのローカルプールを複製マスターに要求します。 この関数は、そのプールの大きさを設定します。 この関数はIDGeneratorの複製マスターもデュプリカも呼び出すことが出来ます。

もしも有効なIDがローカルIDプールからすべてなくなってしまったときには、 ステーションは、新しいIDプールを複製マスターに要求する必要があります。 そのときにいくらかの時間(だいたい複製マスターとのラウンドトリップ時間と同等ぐらいの時間) ID生成(GenerateID 関数)はブロックされます。 ここに設定するサイズを増やすことによって、この現象が発生する回数を最小化することが出来ます。

引数
uiRangeSize[in] ローカルIDプールの範囲を指定します。 IDGeneratorが生成されたときには、SetDefaultRequestedRangeSize で指定された値でID範囲が初期化されます。 もしもSetDefaultRequestedRangeSize が一度も呼び出されていなければ、その値は256となります。
参照
GetRequestedRangeSize, SetDefaultRequestedRangeSize
size_t nn::nex::IDGenerator::GetRequestedRangeSize ( ) const

デュプリカが複製マスターに対して要求するID範囲を取得します。

すべてのIDGeneratorオブジェクト(複製マスターもデュプリカも含む)は、それぞれが利用できるIDのローカルプールを持っています。 このプールが空になる前に(おおよそ25のIDが使われたとき)に新しいIDのローカルプールを複製マスターに要求します。 この関数は、そのプールの大きさを取得します。

戻り値
設定されたID範囲が返ります。
参照
SetRequestedRangeSize, SetDefaultRequestedRangeSize
static void nn::nex::IDGenerator::SetDefaultRequestedRangeSize ( qUnsignedInt32  uiRangeSize)
static

デュプリカが複製マスターに対して要求するID範囲の、IDGenerator生成時におけるデフォルト値を設定します。

すべてのIDGeneratorオブジェクト(複製マスターもデュプリカも含む)は、それぞれが利用できるIDのローカルプールを持っています。 このプールが空になる前に(おおよそ25のIDが使われたとき)に新しいIDのローカルプールを複製マスターに要求します。 この関数は、IDGeneratorが作成されたときに利用される、デフォルトのローカルIDプールサイズを設定します。

引数
uiRangeSize[in] デュプリカが複製マスターに対して要求するID範囲の、IDGenerator生成時におけるデフォルト値を指定します。
参照
GetDefaultRequestedRangeSize, SetRequestedRangeSize
static qUnsignedInt32 nn::nex::IDGenerator::GetDefaultRequestedRangeSize ( )
static

デュプリカが複製マスターに対して要求するID範囲の、IDGenerator生成時におけるデフォルト値を取得します。

すべてのIDGeneratorオブジェクト(複製マスターもデュプリカも含む)は、それぞれが利用できるIDのローカルプールを持っています。 このプールが空になる前に(おおよそ25のIDが使われたとき)に新しいIDのローカルプールを複製マスターに要求します。 この関数は、IDGeneratorが作成されたときに利用される、デフォルトのローカルIDプールサイズを取得します。

戻り値
デュプリカが複製マスターに対して要求するID範囲の、IDGenerator生成時におけるデフォルト値が返ります。
参照
GetDefaultRequestedRangeSize, SetRequestedRangeSize
virtual qBool nn::nex::IDGenerator::ApproveEmigration ( qUnsignedInt32  uiReason)
virtual

複製オブジェクトがマイグレーションを行うかどうかを返します。

マイグレーションとは、複製オブジェクトのコントロール権限が 別のステーションに移行することを指します。 この関数は、正常シーケンスでステーションがセッションから抜けるとき、 その直前にシステム側から呼び出され、 別のステーションにオブジェクトの権限を移行するかどうかを返します。 アプリケーションはこの関数をオーバーライドすることによって挙動を変更することが出来ます。

障害発生時(たとえば電源断などが原因でステーションが急にセッションから消えたときなど)に、 複製オブジェクトが存在し続ける機能を実装する場合は、 この関数ではなく、ApproveFaultRecovery 関数をオーバーライドします。

※この関数はアプリケーション側から呼び出すためではなく、 システム側から呼び出されるために用意されています。

引数
[in]uiReason常にMIGRATION_REASON_LEAVING_SESSIONが指定されます。
戻り値一覧:

true 複製オブジェクトのマイグレーションを行います。 セッションに存在していた複製オブジェクトはそのコントロール権限をセッションに残るステーションに移譲します。

false 複製オブジェクトのマイグレーションを行いません。 今までセッションに存在していた複製オブジェクトは破棄されます。

参照
ApproveFaultRecovery, RemoveFromStoreOperation

nn::nex::DuplicatedObjectを再実装しています。

virtual qBool nn::nex::IDGenerator::ApproveFaultRecovery ( )
virtual

複製オブジェクトに障害回復機能をつけるかどうかを返します。

電源断などの障害発生時に、この仮想関数がシステム側から呼び出され、 複製オブジェクトがセッション中に存在し続けるかどうかを返します。 複製オブジェクトのすべてのインスタンス(複製マスター、およびデュプリカ)にて呼び出されますが、 同一クラスのすべてのインスタンスすべてが同じ値を返す必要があります。

この関数をアプリケーションでオーバーライドすることによって、 複製オブジェクトクラスごとに挙動を変更することが出来ます。 デフォルトでは、このシステムコールバックは常にfalseを返す (マイグレーションが発生しない)ようになっています。

この機能は、電源断など、障害が発生したことに対してのみ有効です。 正常シーケンスでのセッション離脱においても同様に複製オブジェクトを セッションに残し続けるには、AttemptEmigration(DOHandle) をオーバーライドしてください。

※この関数はアプリケーション側から呼び出すためではなく、 システム側から呼び出されるために用意されています。


戻り値一覧:

true マイグレーションを発生させる場合に返ります。

false マイグレーションを発生させない場合に返します。

参照
ApproveEmigration, FaultRecoveryOperation

nn::nex::DuplicatedObjectを再実装しています。

virtual void nn::nex::IDGenerator::OperationEnd ( DOOperation pOperation)
virtual

複製オブジェクトシステム操作が終了されるたびに呼び出されます。

この関数は、複製オブジェクトシステム操作(DOOperation)が終わった後で その複製オブジェクトシステム操作インスタンスへのポインタとともにシステム側から呼び出されます。 Operation::GetType 関数を呼び出すことによって どの種類の操作が行われようとしているかを判定することが出来ます。

※この関数はアプリケーション側から呼び出すためではなく、 システム側から呼び出されるために用意されています。

引数
[in]pOperationこれから実行される操作オブジェクトへのポインタが渡されます。
参照
OperationEnd

nn::nex::DuplicatedObjectを再実装しています。

virtual void nn::nex::IDGenerator::Trace ( qUnsignedInt64  uiTraceFlags = TRACE_ALWAYS) const
virtual

現在のID範囲複製マスターと、このローカルステーションに関する情報をトレースします。

引数
uiTraceFlags[in] どのトレースフラグが立っているときに、内容をトレースするか指定します。

nn::nex::DuplicatedObjectを再実装しています。

size_t nn::nex::IDGenerator::GetNbLocalIDs ( ) const

ローカルプールに存在している利用可能なID数を取得します。

すべてのIDGeneratorオブジェクト(複製マスターもデュプリカも含む)は、それぞれが利用できるIDのローカルプールを持っています。 このプールが空になる前に(おおよそ25のIDが使われたとき)に新しいIDのローカルプールを複製マスターに要求します。 この関数を利用することで、今、どのぐらい利用可能なIDがローカルIDプールに存在する状態なのかを高速に取得することが出来ます。

戻り値
ローカルプールに存在している利用可能なID数が返ります。