これは InterSystems FAQ サイトの記事です。
インストール時に選択できる初期セキュリティ設定のレベルには以下の3つがあります。
※バージョンにより、表記(日本語/英語)が違う場合があります。
- 最小 (Minimal)
- 通常 (Normal)
- ロック・ダウン (Locked Down)
各レベルの違いの詳細は以下の資料をご確認ください。
これは InterSystems FAQ サイトの記事です。
インストール時に選択できる初期セキュリティ設定のレベルには以下の3つがあります。
※バージョンにより、表記(日本語/英語)が違う場合があります。
各レベルの違いの詳細は以下の資料をご確認ください。
IRIS側の処理は、IRISでREST APIを実装する方法を理解していれば、簡単です。
前回のログイン処理でユーザー認証をIRIS側でどのように実装されているか確認して見ましょう。
まずはディスパッチクラスの定義です。
Shop.Brokerというクラスの中で定義されています。
checkpasswordというメソッドが最後に定義されていて、最終的にShop.Rest.Customer:checkPasswordという(クラス)メソッドが呼ばれているのがわかると思います。
ここで定義しているパラメータは、とりあえずおまじない的に含めておくことをお勧めします。
(説明し出すと少し長くなるので)
ClassExtends%CSP.REST1Shop.Rest.CustomerクラスのcheckPasswordメソッドの中は以下のような感じです。
IRISがわかっている人ならば中身の説明は不要ですよね。
大体こんな感じです。
結構色々なことを理解しないとなかなか前に進めませんが、やはり理解するには自分で何か作ってみるのが一番です。
それでは、今回はより具体的にReact開発方法について解説します。
ショップデモのリポジトリの配下にreactというディレクトリがあります。
この下にReactのコードがあります。
ここのreact-setup.mdに記載されている通り、前準備としてreactのテンプレートを作ります。
npx create-react-app shopdemo --template typescriptあとはこのReactプロジェクトを動かすためのライブラリのインストールを行います。
詳細は、react-setup.mdに書いてあります。
まず3つのディレクトリがあって、これは絶対こうしなければならないというものでもないのですが、基本的なお作法として用意するのが一般的なようです。
ここでは、まずログインをするためのユーザー認証を行うコンポーネントの処理について説明します。
Login.
CSPを使って作成したアプリケーションをReactを使用して書き換える2回目の記事です。
前回の記事で紹介したショップデモの書き換えについてもう少し詳しく説明します。
まずReactについて、インターネット上に様々な情報が提供されていますので、それらを利用しながら学習するということも可能だとは思いますが、一方で学習時間を短縮するには、やはりReactについて説明した本を一通り読む方が速いのではないかと思います。
実際Reactに関する本はたくさんあるので、その中から自分に合いそうなものを選ぶのが良いかと思います。
ちなみに参考までに私が学習に使ったものは、以下です。
詳細は、本を読んでいただくとして、ここでは私の経験上のReact学習のポイントについて、いくつか列挙したいと思います。
CSPは非推奨機能となり、今後の新規アプリケーションの開発には使用しないことが推奨されています。
代わりに昨今のウェブアプリケーション開発に広く利用されているモダンなフレームワークの使用が推奨されています。
Webアプリケーション開発用のJava scriptフレームワークはたくさんあり、そのどれを選択するかは開発者の好みの問題です。
その中で比較的人気の高いReactを使って、CSPアプリケーションを書き換えた例について紹介します。
ちなみにCSPは機能的には2つの側面があり、今回非推奨となったのは、HTMLをサーバー側で生成するための拡張機能を使ったプログラミングに関連する部分です(.cspファイルを使用したHTMLとサーバーサイドプログラミング、Javascriptプログラミングによる開発)。
HTTP通信のインフラの部分(リクエストオブジェクトやセッション管理など)は引き続きIRISの根幹を支える機能として残ります。
実際、現在のIRISのREST関連機能は、このインフラ上で実装されています。
さて、CSPで記述されたアプリケーションをJavascriptフレームワークを使ったアプリケーションに簡単にコンバートできたらいいなと思われるでしょうが、残念ながらそんなうれしい方法はありません。
IRISでは.Net Binding機能が非推奨になったため、VisM.OCXの置き換えのために用意していたCaché版Cache Directエミュレータ(.Net Binding機能を使用していたため)の使用も非推奨となりました。
そこでIRISのNative API機能を使用して書き換えたものを作成し、OpenExchange(以下のFAQトピックを参照してください)に登録しています。
Caché版Cache Directエミュレータを使っているアプリケーションをIRISに移行するためには、IRIS用のCache Directエミュレータに置き換えて、アプリケーションのコードをいくつか書き換える必要があります。
内容は、それぞれのプロジェクトに含まれるコンソールアプリケーションサンプル(consoleApp.cs)を比較することで大体理解できると思いますが、以下にその手順について説明します。
1. IRISの.Net Native API用のdllの参照設定を追加します。
Visual Studioのプロジェクト設定から参照の追加を選び、以下のファイルを追加してください。
2.
これは InterSystems FAQ サイトの記事です。
実行ログデータなどトランザクション中にロールバックが発生しても前の状態に戻ってほしくないデータがあります。
それらのデータをロールバックされないデータベースIRISTEMPに配置することで上記の要件に対応できます。
ロールバックさせたくないテーブルの実体をこのデータベースにマッピングすることでロールバック後に情報を残すことができます。
ただし、このデータベースはIRIS再起動で内容がクリアされますので、永続的に保持したい場合には、いずれかのタイミング(ロールバック後等)で永続テーブルにコピーを行う必要があります。
また、これとは別に、トランザクション対象外としたいテーブル操作の前にプロセスのジャーナル記録を停止し、操作完了後にジャーナル記録を再開することで、その操作をトランザクション対象外にすることもできます。
ただしこの方法は、ミラーリングをお使いいただく際にはご使用いただけません。
これは InterSystems FAQ サイトの記事です。
TCP アダプタを使用するビジネスホストの [接続中を維持(StayConnected)]と[プールサイズ(PoolSize)]のデフォルト設定値は以下の通りです。
ネットワークの問題でビジネスホストへの接続が切断された場合に、プロダクション側では切断されたことを検知できないため新しい接続を受け付けません。
またこの状況の時、イベントログにも記録されません。
StayConnected が デフォルト値(-1)の場合、接続がタイムアウトしないため新しい接続を受け付けるためには、ビジネスホストを再起動する必要があります。
このような状況を回避するためには、StayConnected を 0 以上の値に設定することを推奨します。
例えば300(秒)に設定した場合、TCP ビジネスホストは 300 秒以上新たなメッセージを受信しなかった場合に、自動的に接続を切断して再接続できます。
処理量の多いシステムの場合には、通常 StayConnected の値をさらに小さな値、例えば 5(秒)に設定します。
これは InterSystems FAQ サイトの記事です。
コンソールログに任意のメッセージを書き込む方法として%SYS.System クラスの WriteToConsoleLog メソッドを使用することができます。
以下に例を示します。
%SYSwrite##class
WriteToConsoleLogメソッドに指定できるパラメータの詳細は、以下のドキュメントをご参照下さい。
これは InterSystems FAQ サイトの記事です。
残念ながら良い方法はありません。
もし処理の流れとして突然処理を中断されると不都合がある場合には、OnunloadHandler内でalertメソッドにより、Xボタンを押さないように注意を促すようなメッセージを出す方法が考えられます。
一般的には、ユーザ都合で処理中断されてもサーバ側処理内でデータの整合性等に不都合が発生しない様にアプリケーションの実装を行う必要があります。
ページのアンロード時に呼び出されるOnunloadHandler内でサーバ・メソッドを呼び出す方法は様々な問題があるため、使用することはお勧めしません。
これは InterSystems FAQ サイトの記事です。
ObjectScript言語は、Java言語等がサポートしている型キャストをサポートしていません。
ただし、メソッドのキャストはサポートしています。
詳細は以下ドキュメントページをご参照ください。
InterSystems ObjectScript言語はJava言語や.NetのC#言語のような静的型付き言語とは異なり、動的型付き言語に分類される言語になります。
従って型の解釈は実行時に行われ、宣言時に型を合わせるという必要性がないため型キャストのような仕組みを用意していません。
これは InterSystems FAQ サイトの記事です。
ミラーリングが同期の対象とするのはデータベースファイルのみです。
アプリケーションに必要なその他のファイル(CSPファイル、画像ファイル、ドキュメントファイルなど)をミラーセットを構成する二台のサーバー間で同期させるには、
などの方法が考えられます。
また、2の方法ではWindows上ではRoboCopy、Linuxの場合にはrsyncという同期ソフトを使った実例があります。
irisコマンドのqlistまたはlistを使用して出力先をファイルにして出力することができます。
qlistの結果は、^を区切り文字としたテキスト形式で出力されます。
^で区切られた3番目の部分に稼働状況のデータがあります。
$ iris qlist IRIS > iris.log
$ cat iris.log
IRIS^/Applications/iris^2022.1.0.164.0^running, since Thu Apr 7 16:37:03 2022^iris.cpf^1972^52773^0^alert^IRIS^^^/Applications/irislistの場合には、先頭にstatus:と表示された行に稼働状況のデータがあります。
Unix系のOSの場合
$ iris list IRIS > iris.log
$ cat iris.log
Configuration 'IRIS'Windowsの場合
state行が表示されません。
$ iris list IRIS > iris.log
$ typeタスク成功時・失敗時、それぞれ通知メールを送信することができます。
そのためには事前にターミナルからTASKMGRルーチン を実行して、メールサーバを登録する必要があります。
> zn"%SYS"そして、メニューから9) タスクマネージャーオプションを選んで
オプション?
次に6) メール設定定義を選びます。
オプション?
そこで以下2点を最低限設定します。
1) メールサーバ定義 (SMTPサーバ名) 例: xxxxxx.xxxxx.com
4) 送信者定義 (通知メールのFROMアドレス) 例: m123456@gmail.com
この設定後、タスクを作成、編集すると、添付画像のようにメール送信先を登録する項目が追加されますので、メールを送信した宛先メールアドレスを設定してください。
iris コマンドを使用することで実行できます。
iris コマンド(iris.exe)は、<インストールディレクトリ>\bin にインストールされています。 書式:
iris run インスタンス名 tag^routine([parameter-list]) ネームスペース名iris run インスタンス名 ##CLASS(package.class).method([parameter-list]) ネームスペース名インスタンス名は、管理ポータル(システム管理ポータル)の右上にある [インスタンス:] に表示されている文字列です。
実行する環境に応じて一部の文字 ^ や " をエスケープする必要があります。
Windowsの場合は、以下のようなエスケープが必要となります。
例: USERネームスペースで do info^test(123,"abc") を実行します。
c:\InterSystems\IRIS\bin>iris terminal IRIS info^^test(123,\"abc\") USER例: USERネームスペースで do ##class(Test.Class1).test(123,"abc") を実行します。
c:\InterSystems\IRIS\bin>iris run IRIS ##class(Test.Class1).test(123,\"abc\") USERCPU:サポート対象OSが問題なく動作するもの
以下のページをご参考ください。
ディスク容量:アプリケーションの要件を除外した場合、 IRISをインストールするためには、最低1.5GB以上の空き容量が必要です。
実際に必要となる容量は、インストーラでセットアップタイプで "カスタム(Custom)"
を選択すると、インストールコンポーネント毎にご確認いただけます。
メモリ:推奨メモリー値は、アプリケーションや物理メモリサイズによるため
一概には言えませんが、IRISの全プロセスで使用するメモリサイズは以下になります。
①プロセスパーティション * ⑤プロセス数
+
②データベースキャッシュ
+
③ルーチンキャッシュ
+
④一般ヒープメモリ
計算式でのこれらのパラメータは、業務アプリケーションの特性により異なってきます。
以前に導入実績のある業務アプリケーションの場合、既存システムでどの様に設定されたかも参考にしてください。
①プロセスパーティション(プロセスあたりの最大メモリ)
管理ポータルで設定します。既定値は 262,144(KB)です。
IRISがc:\InterSystems\IRISにインストールされているとします。
(1) a.py を C:\InterSystems\IRIS\lib\python に置きます。
a.py
deftest()'Hello World!'(2) それを IRISのクラスから実行します。
ClassMethod xx() [ Language = python ]
{
importUSER>もし、a.py を別のディレクトリ C:\temp に置きたい場合は、C:\temp\ をPythonのPATHに指定する必要があります。
以下の方法があります。
(A) 管理ポータル>システム管理>構成>追加設定>メモリ詳細>PythonPath
の値に C:\tempを設定し、a.pyをそのディレクトリに置き、IRISを再起動します。
ClassMethod xx() [ Language = python ]
{
Cachéでは、今後の新しいOSのサポート、例えばWindows 11やWindows 2022のサポートは行われないことになりました。
いよいよ新しいサーバハードウェアを導入するとCachéが使えなくなる可能性が高くなってきました。
皆さんIRISへの移行をお早目にご検討ください。
IRISへの移行の際に障害となるものの1つがVisM.OCXを利用したアプリケーションの移行です。
IRISでもこの機能は制限付きで利用可能です。
しかし、そのためには少々面倒な手続きが必要です。
(この手続きについてはインターシステムズにお問い合わせください)
しかもこの手続きも暫定処置で将来なくなる可能性もゼロではありません。
ところでなんでそんな面倒くさい手続きが必要なのと感じた人もいると思います。
その理由は、
VisM.OCXがマイクロソフトの非常に古い技術を利用していて、開発元のマイクロソフトもそれを全くサポートしていませんし、セキュリティ脆弱性への対応等も全く行われていません。
そんな技術なんで、インターシステムズも技術サポートするのが困難です。
一方で、世の中、セキュリティに関しては増々厳しい対応が求められてきています。
そのためインターシステムズもセキュリティ対策には十分注意して対応しており、セキュリティの脆弱性が見つかったらできるだけ速やかに対応しています。
これはInterSystems FAQ サイトの記事です。
※管理ポータルから、もしくはコマンドから開始できます。
do##class%Net.Remote.Servicea. コマンドで作成する場合
"C:\temp\TestDll.dll
do ##class(%Net.Remote.Gateway).%ExpressImport(dllPath, 55000, "b. スタジオで作成する場合
[ツール] - [アドイン] - [.Net ゲートウェイウィザード] ⑥ 以下のような手順でコードを実行します。
例:
Setもし現在ご使用のデータベース技術で壁に突き当たっていると感じておられるならば、是非InterSystems IRIS Data Platformへの移行をご検討ください。
(以下IRIS)
IRISに移行するに際して、現行のプログラム資産を全て書き換える必要はありません。
IRISに移行する際には、以下の手順で進めることを推奨しております。
アプリケーションコードをそのまま流用し、動作させるために、現在のデータベースからIRISへの移行を行います。
既存のRDBMSのデータ定義(DDL文で記述されたもの)をIRISに取り込むことで、リレーショナルとオブジェクトの両モデルからアクセスが可能となるため、必要に応じてオブジェクト・アクセスが妥当である処理に対しては、アプリケーションプログラムの修正など、対応策が選択できます。
さらにXMLやJSONなどのドキュメント形式のデータの取り扱いも容易ですので、RestFullなアプリケーション構築にも向いています。
また、IRISには習得が容易でデータベースエンジンと一体化したスクリプト言語「InterSystems ObjectScript」が用意されているので、処理の一部をサーバ側ロジックとしてストアドプロシージャ化することによってデータベース処理を効率化するなど、様々な対応策を検討することができます。
バージョン2021.
質問
現在使っているリレーショナルデータベースからInterSystems IRIS Data Platformに移行することは可能ですか?
答え
InterSystems IRIS Data Platform(以下IRISと表記)は、SQLをサポートしていますので、多くの場合リレーショナルデータベースで構築されたアプリケーションは、大部分のコードを変更することなくIRISに移行することができます。
ただしSQLの各実装毎にSQL標準を拡張した仕様等があり、それにIRISが全て対応していませんので、コードの書き換えが必要なケースもあります。
また各実装が独自に用意した標準でない通信系API等にも対応していませんので、その場合にはJDBC、ODBCなどの標準的な通信APIに置き換える必要があり、かなり書き換えが必要になります。
(使用されているSQL文等はそのまま流用可能な場合が多いです。)
さらにそのままコードを移行できるケースであっても動作保証はできませんので、必ず動作確認のためのテスト作業は必要になります。
以上のことから他データベースシステムからIRISシステムへの移行には相応の移行コストがかかるため、移行は必ずしも容易とは言えませんが、それでも移行を決断されたお客様はたくさんおられます。
そしてほとんどのお客様は移行したシステムの性能、開発生産性、保守性、運用の容易さ等に満足されております。
これは InterSystems FAQ サイトの記事です。
以下のコードは、https://www.intersystems.com/assets/intersystems-logo.png をダウンロードし、c:\temp\test.pngとしてファイルを保存する例になります。
以下のコードを動作させるためには、SSLTESTという名前のSSL定義を作成しておく必要があります。
ClassMethodAs%Statusこれは InterSystems FAQ サイトの記事です。
コンパイル時のフラグや修飾子の記号と意味については、以下ドキュメントをご参照ください。
なお、開発環境のスタジオやVisual Studio Codeでは、開発環境の設定画面でフラグを変更できます。
ターミナルでコンパイルを実行するときは $system.OBJ.CompileAll() などのシステムユーティリティが利用できます。
コンパイルフラグを引数に指定しない場合、デフォルトのコンパイルフラグが利用されます。デフォルトのフラグは $system.OBJ.ShowFlags() で確認できます。
これは、InterSystems FAQサイトの記事です。
データ項目の値が”#Deleted"と表示される場合、MS Accessの設定でこの問題を回避することができます(MS Access2016以降)。
MS Accessのオプションより、「大きい数値(BigInt)データ型をサポート」にチェックを入れます。
設定後、リンクテーブルを一度閉じて、リンクの更新を行います。
これは、InterSystems FAQサイトの記事です。
監査ログをプログラミングで出力するために、監査ログの一覧を取得する%SYS.Audit クラスのListクエリを利用することができます。
サンプルコードは以下のようになります。
Set##classこれは、InterSystems FAQサイトの記事です。
CSPアプリケーションでは、リクエスト処理時間がサーバー応答タイムアウト値(CSPゲートウェイ管理ページで設定、既定値60 sec)を経過すると、CSPゲートウェイからクライアントブラウザにタイムアウトを通知し、処理を続けているデータプラットフォームサーバプロセスにエラーを発生させます。
エラーが発生している処理を確認して頂き、処理遅延の改善、例えばタイムアウトが発生しないように処理内容を見直して応答時間を短くすることや必要に応じてサーバ応答タイムアウト値を大きくすることで対処可能です。
これは、InterSystems FAQサイトの記事です。
FTPサーバから、アップロード/ダウンロードする方法は以下の通りです。
1. FTPサーバにイメージファイルをアップロードする
set"c:\temp\test.jpg"2. FTPサーバからイメージファイルをダウンロードする
これは InterSystems FAQ サイトの記事です。
InterSystems製品開始時に、OSの実行ファイルやコマンド、InterSystems製品内に作成したプログラムを実行したい場合は SYSTEM^%ZSTART ルーチンに処理を記述します。
(%ZSTARTルーチンは%SYSネームスペースで作成します)
SYSTEM^%ZSTART に記述する処理は、事前にあらゆる条件下でうまく動作することを確認してください。
^%ZSTART ルーチンの記述ミスや、記述は正しくとも起動時にコマンドが応答を返さなかったり処理でエラーが起こった場合、InterSystems製品が起動できなくなることがあります。
詳しくは、以下ドキュメントをご参照ください。
これは InterSystems FAQ サイトの記事です。
設定内容によって、方法が異なります。
システム構成について
管理ポータルの [システム管理] > [構成]
以下の設定については(※1)、パラメータファイル(InterSystems IRISは iris.cpf、Caché/Ensemble/HealthShareは cache.cpf) に格納されます。
このファイルはテキストファイルとなっていますのでこのファイルの一部を他のシステムにコピーして反映させることが可能です。
ただし、ディレクトリ名など各システム固有の情報が多く含まれるため、そのままファイル全体をコピーしても設定内容を反映させることはできません。
(※1) 【Caché/Ensemble2010.2以前】 [システム管理ポータル] > [構成] (システム構成) メニュー以下の設定が対象です。
パラメータ・ファイルの各項目については、以下ドキュメントをご参照ください。
InterSystems パラメータ・ファイル・リファレンスについて【IRIS】 Caché パラメータ・ファイル・リファレンスについて
セキュリティについて
^SECURITY ユーティリティを使用してエクスポート/インポートすることが可能です。
ターミナルを起動し、%SYSネームスペースで以下のコマンドを実行してください。