Blue Prism でオブジェクトを共有したときの挙動
注意:マニア向けのコンテンツです。
(まるで今までがそうでないと言わんばかり)
オブジェクトを共有したときに起きること(開発時)
かなり昔(一年前)の記事で、
オブジェクトの共有について触れました。
我ながらよく書けている記事だと思いますが、
(さすがオレちゃん☆)
これは開発時の挙動で、
実行時はまた、ちょっと違った話があります。
オブジェクトを共有したときに起きること(実行時)
オブジェクトを共有すると、
実行時の動きも変わります。
マニュアルの該当記事はこちら。
うっわ、クッソわかりにくい。
大変、詳細な記述だと思います。
少しだけ、実機の動きを
補足していきましょう☆
実際にやってみた① ひとつのプロセスでオブジェクトを呼び出す
ひとつのプロセスでオブジェクトを
呼び出すとき、オブジェクトのインスタンス化
が行われます。
「インスタンス化ってなんやねん」
…という方は、ぜひ、👇を参照ください。
Java を例にしてますが、
考え方はだいたい、一緒です。
(ここでいうクラスは、Blue Prism
でいうプロセスやオブジェクトです)
なので、ログレベルを詳細にしておくと、
以下のようなログが出力されます。
Initialise が呼ばれ、初期化が一度、
行われていることがわかります。
実際にやってみた② ひとつのプロセスで同じオブジェクトを複数回、呼び出す
ひとつのプロセスで、同じオブジェクトを
何度も呼び出すと、初期化は何回、
行われているのか?
…答えは1回です。
ひとつのプロセスで、一度、
初期化されたオブジェクトインスタンスは、
そのプロセスが終了するまで使いまわされます。
実際に同じオブジェクトの
アクションを2回、呼んだときの
ログがこちら👇。
Initialise は一度しか起きてません。
実際にやってみた③ ひとつのプロセスで別オブジェクトを介してオブジェクトを呼び出す
ちょっとここから話がややこしくなります。
同じプロセスから同じオブジェクトの様々なアクションを呼んでも、オブジェクトインスタンスは使いまわされ、初期化は一度しか行われない
という原則ですが、例外があります。
別のオブジェクトを介した場合です。
プロセスからオブジェクトA のアクションを呼んで、
オブジェクトA をインスタンス化した後、
同じプロセスからオブジェクトB のアクションを呼び、
さらにオブジェクトB のアクションの中で
オブジェクトA のアクションを呼んでいると、
新たにオブジェクトA のインスタンスが
別で立ち上がります。
はぁ?
つまり、こういうこと??
えっ、、何これぇ・・・?
この仕様をはじめて見たとき、
私はデジャブを感じた。
そう、それはこの前、
散歩してたら
ダシの自動販売機
を見つけたときの感覚と
同じだったからである。
ログはこちら👇。
確かに、Initialise が2回、
起きているのである。
(オブジェクトB を含めると3回)
実際にやってみた④ オブジェクトを共有した場合
結論から言うと、
オブジェクトを共有した場合、
オブジェクトを介して呼んだオブジェクトでも、
インスタンスが使いまわされ、
新たに初期化されません。
こんな感じ👇。
ログはこんな感じ👇。
補足:プロセスを介した場合
ちなみに、プロセスからプロセスを呼ぶことができて、
さらにその先でオブジェクトを呼ぶことができますが、
その場合はどうなるのか?
答え:プロセスが変わると、
オブジェクトも新規に Initialise されます。
まとめ
- オブジェクトの共有を行うと、開発時だけでなく実行時にも違いが出る
- 実行時は、オブジェクトのインスタンス化にちょっとだけ違いが出る(オブジェクト⇒オブジェクトみたいな呼び出しをした場合のみ)
個人の見解ですが、
オブジェクトの共有をした場合は、
そのオブジェクトにはアクションを置かずに、
共有オブジェクト=共有アプリケーションモデラー
として扱った方がいいかもしれないです。
ま ぁ 、 あ ん ま り
気 に し な く て
い い よ う な 気 も
す る が な !