リリースアップと出口プログラム (マネージメント・セントラル プロダクト機能)

プロダクトのリリースアップの仕方を見てみましょう。

... と言ってもリリースアップする内容があるはずもないので、前回紹介を端折った出口プログラムも使ってみたいと思います。
つまり出口プログラムのセットをしたものを新しいリリースとして定義してみよう、ということです。

ということで今回はリリースアップと出口プログラムについての紹介です。


リリースアップの定義

前回のプロダクト定義をほとんどそのまま使いますので、その定義を選択しての右クリックメニューで「選択に基づいて新規」を実行します。

「コピー」して「貼り付け」しても同じ結果になるようです。

「選択に基づいて新規」を実行すると、プロダクト定義のプロパティの画面と同じもので「リリース」のところが空欄になったものが出てきます。
適当なリリースを入れてください。
(「名前」も「〜のコピー」になってますので、これも適当に変更します)

「内容」タブで変更した(今回では出口プログラムを加えたい)オプションである「基本」を選択して、右側の「編集」ボタンを押します。

「編集」ボタンを実行して出てきた画面で「出口プログラム」ボタンを押して

出口プログラムの指定を行います。
今回は内容についてはこの後に述べますが、簡単に言うと導入後のライブラリーの所有者を QSECOFR に変更しておく、というだけのもので、導入が完了した後でしか実行できません。それで「事後」の出口プログラムとして指定しています。

後はそのまま全部「OK」で保管してください。

出口プログラム

今回の出口プログラムの内容です。

必ず ILE CL プログラムとして、つまり CRTBNDCL コマンドを使用して作成してください。

このプログラムは後述するように QUSRWRK サブシステムの QZSCSRVS ジョブの中で実行されます。
プログラムがエラーで異常終了すると、上記ジョブがエラーを起こします。うまくいかない時の問題判別が大変になりますので充分注意してプログラムを作成してください。
この例ではどういう事象がおきるかを含めたテストのためにわざとエラー処理を入れていませんが、必ず行うようにしてください。自分のためです。

出口プログラムでは、呼び出される時にどういうイベントによって呼び出されているかが通知されます。
この通知を受け取るために入力パラメーターとして 10 桁の文字タイプのフィールドを定義します。

1桁目から 10桁分を取り出し、呼び出されたコンテクストを判断して、それに対応した処理をプログラムします。
今回は 復元され終わった後に、オブジェクトの所有者を変更し、権限を与えるという処理です。復元後の処理であるため、イベントが *RSTCODE であることを判断して対応する処理を行っています。

ここで判断できるコードには以下のようなものがあります。

*RSTCODE (restore code) RSTLICPGM コマンドでプログラムオブジェクトの復元を実行時
*SAVCODE (save code) SAVLICPGM コマンドでプログラムオブジェクトの保管を実行時
*DLTCODE (delete code) DLTLICPGM コマンドでプログラムオブジェクトの削除を実行時
*CHKCODE (check code) CHKPRDOPT コマンドでプログラムオブジェクトのチェックを実行時
*RSTLNG (restore language) RSTLICPGM コマンドで言語オブジェクトの復元を実行時
*SAVLNG (save language) SAVLICPGM コマンドで言語オブジェクトの保管を実行時
*DLTLNG (delete language) DLTLICPGM コマンドで言語オブジェクトの削除を実行時
*CHKLNG (check language) CHKPRDOPT コマンドで言語オブジェクトのチェックを実行時

他に出口プログラムが上記イベントの前に呼び出されているか/後に呼び出されているかの判断など、いろいろな情報を得ることができます。
詳しくは Information Center の該当ページを参照してください。

後のジョブログを見るとわかりますが、「プロダクトのインストール」処理では 最初に SAVLICPGM でパッケージされ、その後で RSTLICPGM が行われます。
この出口プログラムはこのライブラリーが関係した処理が行われる後 (事前出口プログラムを指定した場合はその処理の前にも) には必ず行われますので、保管時と復元時の 2回呼ばれています。

プロダクトが複数ライブラリーでできている場合は、ライブラリー毎の前後で出口プログラムの処理が行われます。
(先程述べたように前後はプログラムの中で引数を使用して判断することが可能です。詳しくは Information Center の該当ページを参照してください)

プログラムが呼び出されるタイミング、呼び出される回数をよく考慮してプログラムを作成してください。

リリースアップの実行

通常のプロダクト定義の時と同様に一回「インストール」を行ってプロダクトを生成します。

定義の生成

新しい定義を選択して右クリックメニューから「インストール」を実行します。

ウィザードはほとんど同じです。

上書きをするかどうかの指定です。

インストール先の指定です。

「完了」を押すとインストールが始まります。

サーバー上での状況

最初に QSYSWRK サブシステムで QYPSPRC ジョブが起動されます。

その QYPSPRC ジョブからの指令を受けて QUSRWRK サブシステムで QZRCSRVS ジョブが実際の処理を行います。(QZRCSRVS が何をするジョブなのかはこちらです)

その QZRCSRVS ジョブのジョブログです。
出口プログラムが実行されているのがわかりますね。

ちょっと中略して、最後の方ではこんなかんじになります。

で、インストールが終わると「状況」が「インストール済み」になります。

確認

念のためインベントリーの収集を行って最新の状況にしてから「ソフトウェア・インベントリー」の「インストール済みプロダクト」を見てみましょう。

一番上にリストされていますが、リリースが上がっているのが確認できますね。

出口プログラムの考慮点

上の例のプログラムを CRTCLPGM でコンパイルしただけで、「インストール」は成功しなくなります。
簡単なことなのですが、メッセージがわかりにくいので気をつけてください。

こちらがその失敗例ですが、

問題となっているのは「渡されたパラメーターの合計が必要な数と一致しない。」というメッセージです。
詳細のメッセージとしては以下のようになります。

こちらはまた別の例からとったのですが、上のプログラムをただ CRTCLPGM でコンパイルして指定すると、以下のメッセージで「0 の最小値または 0 の最大値のパラメータ」の 0 が 1 に変わっただけの同じメッセージが表示されます。

リリースアップの送信

それでは今度は他システムに送信してみましょう。

前回紹介した普通の送信およびインストールの手順とほとんど同じです。
定義を選択して右クリックメニューから「送信およびインストール」を実行します。

ウィザードはほとんど同じです。

送信先を指定します。

導入先の確認です。

送信および正常インストール後に実行したいコマンドが指定できます。

「完了」を押すと「送信およびインストール」が始まります。

前回紹介した普通の送信およびインストールの手順とまったく一緒なのでこの間の出来事は省略しますが、
結果は以下のように「タスク・アクティビティー」-「パッケージおよび製品」で確認できます。正常に実行が終わると「状況」が「完了」になります。

ソフトウェア・インベントリーでもリリースが上がっているのが確認できますね。

[Top Pageに戻る]

Ads by TOK2