クリアフィルター
記事
Akio Hashimoto · 2023年10月22日
開発者の皆さんこんにちは。
これは筆者がDocker上でIRISを動かす時の、構築手順を示した備忘録です。
以前投稿した「[Dockerを利用した開発環境下でのIRISへのSSL接続方法](https://jp.community.intersystems.com/post/docker%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%9F%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83%E4%B8%8B%E3%81%A7%E3%81%AEiris%E3%81%B8%E3%81%AEssl%E6%8E%A5%E7%B6%9A%E6%96%B9%E6%B3%95)」と「[IRISサーバーのバックアップと再構築の手順](https://jp.community.intersystems.com/post/iris%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%AE%E3%83%90%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97%E3%81%A8%E5%86%8D%E6%A7%8B%E7%AF%89%E3%81%AE%E6%89%8B%E9%A0%86)」も合わせて参考にして頂けると良いと思います。
### 筆者環境
本ドキュメントは筆者の環境に合わせた内容となりますので、以下の環境下でのドキュメントとなります。
* ホストOS:macOS Sonoma 14.0
* CPU:Apple M2 Pro
* Docker:v24.0.6(Docker Desktop for Mac v4.24.2)
* IRIS:IRIS for UNIX (Ubuntu Server LTS for ARM64 Containers) 2023.2 (Build 227U)
## IRISサーバーの構築
### Dockerイメージの入手
IRISのDockerイメージファイルを入手します。
入手手順は、Developer Community サイトのメニュー「InterSystems Container Registry」を開き、左側ツリーの "InterSystems IRIS Community Edition" -> "iris-community" -> バージョン を選択。筆者の場合はarm64版のコマンドを実行します。

コマンドを実行してDockerイメージを取得します。

※ここで接続エラーになる場合、権限が無い可能性があります。トークンを発行してDockerにログインして下さい。
### Dockerファイルの作成
以下のようにDockerファイルを作成します。筆者の場合、IRISをインストールした後に管理ポータルから構成を作っていくので、ここでは最小限のコマンドで作成しています。
dockerfile
ARG IMAGE
FROM 'containers.intersystems.com/intersystems/iris-community-arm64:2023.2.0.227.0'
ENV WORKDIR=/tmp/iris
RUN iris start IRIS quietly EmergencyId=sys,sys \
| iris stop iris quietly
### Docker-composeファイルの作成
docker-composeファイルを作成します。上記のDockerファイルだけでも作成は出来ますが、後々の事を考えてDocker-Composeファイルを利用します。
docker-compose.yml
version: '3.8'
services:
iris:
build:
dockerfile: "dockerfile"
command: --check-caps false
container_name: iris_sv
ports:
- "9092:52773"
- "9091:51773"
volumes:
- /Users/xxxx/IRIS:/opt/iris
tty: true
restart: always
environment:
TZ: Asia/Tokyo
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
ポート番号は適宜変更して下さい。
ボリュームの左側値はホスト側のパスです。適宜環境に合わせて下さい。右側値はコンテナのパスです。ここにデータファイル(iris.dat)等を配置しておく事で、コンテナが削除されてもデータは残ります。
### docker-composeの実行
作成したdocker-compose.ymlファイルを実行してIRISサーバーのコンテナを起動します。
docker-compose up --build -d
既にビルド済みなら、以下のコマンドになります。
docker-compose up -d
### 動作確認
管理ポータルを開いて動作確認をします。
http://localhost:9092/csp/sys/%25CSP.Portal.Home.zen
ターミナルを起動してみます。
docker exec -it iris_sv iris terminal IRIS
ターミナルでコマンドを実行してみます。
w $zdt($h, 3, 1)
おそらく、ローカル時間と一致していないかと思います。docker-composeでタイムゾーンを指定してますが、グリニッチ時間になっていると思います。現時点では筆者はここを修正する事が出来ていません。タイムゾーンに正しく沿ったコンテナを作る方法がわかる方がいれば、コメント下さい。
以上がDockerにIRISを構築する手順です。
追記(2023-10-24):
docker-compose.yml内で、TZ: Asia/Tokyo としている箇所を TZ: JST-9 と指定する事でコンテナの時間をローカル時間に指定する事が出来ました。情報ありがとうございました。コンテナの時間をグリニッジからローカル時間に変更したい方は是非。
投稿ありがとうございます。TZ=JST-9で行けると思います。 @Serval.Cat さん
情報ありがとうございます!docker-compose.ymlのTZの値を"Asia/Tokyo"から"JST-9"に変えたところ、ローカル時間に出来ました!
記事
Mihoko Iijima · 2020年11月6日
これはInterSystems FAQ サイトの記事です。
テーブルチューニングを行った際に、フィールドに値がほとんど登録されていない(Null)場合や、特定の値がほとんどを占める場合、その値を [外れ値] として除外して選択性計算を行います。 また、外れ値が全レコードの何 % を占めているかの値は [外れ値の選択性] として記録されます。
InterSystems 製品のクエリオプティマイザは、選択性数値とエクステントサイズを使用してクエリの経路を決定しますが、クラスクエリ、埋め込み SQL に使用しているクエリに外れ値が含まれる場合は、外れ値の選択性が自動的に考慮され、インデックスの使用有無を決定しています。
ダイナミック SQL 、ODBC/JDBC 経由でのクエリについては、外れ値が Null である場合、自動的に外れ値の選択性が考慮されますが、Null 以外の特定の値が外れ値に検出される場合は、明示的に指示を与えるまで考慮しません。
詳細は、ドキュメント(異常値に対する述語条件【IRIS】/異常値に対する述語条件【Caché/Ensemble】)をご参照ください。
SAMPLES ネームスペースの Sample.Person テーブルの FavoriteColors には、好きな色が複数格納されていますが未登録(NULL)の値も多く含まれています(インストール直後の状態で 200 件中 71 件がNULL)。選択性の計算で FavoriteColors を外れ値と認識した場合、[外れ値] に NULL、[外れ値の選択性] に 35.5% (71/200×100=35.5)が表示されます。
※ IRIS/IRIS for Health でお試しいただく場合の Sample.Person 作成方法 ※
IRIS/IRIS for Health にはSAMPLESネームスペースはありませんので、任意のネームスペースに Sample.Person のサンプルをインポートします。
サンプルインポート方法詳細は、ドキュメント(InterSystems IRIS で使用するサンプルのダウンロード)、または関連記事【サンプル(Sample.Person)のクラス定義ダウンロードとサンプルデータの作成について】をご参照ください。
IRIS/IRIS for Health でお試しいただく場合、以降の説明に登場する SAMPLES ネームスペースは、Sample.Person クラスをインポートしたネームスペースに読み替えてお試しください。
管理ポータルで確認できます。1、[システムエクスプローラ] > [SQL] を開きます。
2、画面中央上部にある[変更]を押下し、ネームスペースをSAMPLESに切り替えます。
[スキーマ] のプルダウンから Sample を選択し、[テーブル] の > をクリックして階層を展開し、[Sample.Person] を選択します。
画面右側で [カタログ詳細]タブの [フィールド] のラジオボタンをクリックすると詳細表示が開きます。
外れ値を考慮したプランを確認するため、Sample.Person クラスの FavoriteColors に対するインデックスを追加し、インデックスを再構築します。
インデックス追加例は以下の通りです。
/// インデックス例 ※FavoriteColorsはリストコレクションで定義されています
Index FavoriteColorsIdx On (FavoriteColors(ELEMENTS), FavoriteColors(KEYS));
作成したインデックス再構築します。メソッドを利用する方法は以下の通りです。
do ##class(Sample.Person).%BuildIndices($LB("FavoriteColorsIdx"))
管理ポータルで再構築する方法は、以下の通りです。
管理ポータル、またはターミナルで以下のSQLを実行し、クエリプランを確認します。
select ID,Name from Sample.Person where FavoriteColors is null
プラン表示より レコード全体(Read master map)を参照したことを示しています。
where FavoriteColors is null を指定した場合、ダイナミック SQL でも外れ値:Null を考慮したプランを選択するため、インデックス:FavoriteColorsIdx が使用されていないことがわかります。
次に、条件式をNull以外に変え実行します。
select ID,Name from Sample.Person where for some %element(FavoriteColors) (%value='red')
Module:B を参照すると、FavoriteColorsIdx を使用していることがわかります。
外れ値について詳細は、ドキュメント(Selectivity と Outlier Selectivityについて【IRIS】/Selectivity と Outlier Selectivityについて【Caché/Ensemble】)もご参照ください。
※上記ドキュメント中の [異常値] や [Outlier] は [外れ値] と同義語です。
記事
Mihoko Iijima · 2020年12月3日
これまでさまざまなストレージ技術とそのパフォーマンス特性の例を紹介してきましたが、今回は新しい HPE Cloudline 3150 Gen10(AMD プロセッサベースのシングルソケットサーバーで 3.2TB の [Samsung PM1725a](https://www.samsung.com/semiconductor/global.semi.static/Samsung_PM1725a_NVMe_SSD-0.pdf) NVMe ドライブを 2 台搭載)など、内部コモディティベースのサーバーストレージの活用が増加傾向にあることを確認しました。
### ハードウェア構成と LinuxLVM のセットアップ
テストは次の構成で行われました。
* 2 x Samsung 3.2TB PM1725a NVMe ドライブ(サーバー内蔵)
* 1 x HPE Cloudline 3150 Gen10 サーバー
* Red Hat Enterprise Linux 7.5 64 ビット版
このテストでは、その他のストレージデバイスや HBA は使用していません。 両方の NVMe ディスク装置の IO 能力を最大化するため、16MB の PE サイズを使用して単一の LVM PE ストライプを作成しました。 LVM PE ストライピングのセットアップの詳細は、コミュニティ内の別の記事にあります。
### InterSystems IRIS のインストールとセットアップ
InterSystems IRIS は、単一のボリュームグループと単一の論理ボリュームにインストールされます。 今回は複数のボリュームグループと論理ボリュームを使わず、非常に単純なセットアップを行いたいと思いました。
この例では、単一の論理ボリュームとファイルシステムを作成しました(この例では、/data がファイルシステムのマウントポイントになっています)。 データベースインスタンスからのランダム読み取りのワークロードを使用し、徐々にジョブ数が増加する IO ワークロードを生成しています。 1 TBのデータベースが IO ワークロードのターゲットです。 このテストで使用された RANREAD ツールの詳細は、こちらを参照してください。
### テスト結果
わずか 10 個のジョブから開始した最初の時点では、ストレージのスループットは 100 マイクロ秒(µs)と非常に低い遅延で 1 秒間に 10 万個の 8 KB データベースブロックを読み取ることができました。
ジョブの数が増えても、サーバーが実際に CPU の能力を使い果たしてストレージをさらに激しく駆動させるまでは遅延はずっと低いままでした。 観察された中で最も大きな遅延は 300µs に過ぎず、1秒間に 850 K 以上の 8KB データベースブロックの読み取りを維持していました。
図 1 は 2 台の Samsung NVMe ディスク装置のみを使用してテストした構成で、パフォーマンスが予測可能でスループットが維持されたことを示しています。 最大値でも遅延は非常に低く、実際には NVMe ディスク装置のスループットが最大化する前にテストサーバーが実際に CPU を使い果たしたことが分かります。
図 1: 予測可能で非常に低い遅延と非常に高いスループットを維持

## まとめ
Samsung PM1725a NVMe ディスク装置は非常に低い遅延と高スループット能力を示し、非常に高性能なトランザクションシステムをサポートしています。 そのため、ストレージの待機時間とスループットが必要なインジェッション・ワークロードに最適です。
これらの Samsung NVMe ディスク装置はこのような素晴らしいパフォーマンス特性を備えながら非常に魅力的な価格で提供されており、InterSystems のデータベースミラーリングと組み合わせると同じレベルのアプリケーションの可用性を実現できます。
記事
Toshihiko Minamoto · 2022年12月20日
Global Summit 2022 で発表しました通り、Apache ベースの Web サーバ (プライベート Web サーバまたは PWS と呼ばれることが多い) の出荷、インストールを中止します。現在のところ、InterSystems IRIS 2023.1 から中止する予定です。
この新しいアプローチにより、目的に最も適した Web サーバを選択し、その設定や保守、更新を自由に実施することが可能となります。この変更による主な利点は、特にセキュリティ脆弱性において重要な修正について、インターシステムズ からのキットのアップデートを待つことなく、最新バージョンを入手できるようになることです。インターシステムズは、Apache または IIS の構成に役立つツールを提供します。(InterSystems IRIS Community Edition では、PWS を引き続きインストールすることに注意してください)。
Web サーバのインストールは一般的なプロセスであり、通常は簡単です。また、さまざまな Web サーバ・ベンダによって文書化されています。
以下は、Ubuntu、Windows、および macOS の例です。これらの例は、インターシステムズ社製品に Web サーバが含まれていない場合やインストールされていない場合に、新しい動作を確認できるよう、簡単なインストール手順を示すものです。(このコードは既存のまま提供されており、サポートされていません。また、ミッションクリティカルなアプリケーションやデータ機密性の高いアプリケーションをホストするには不十分であることに注意してください)。
また、この新しいプロセスを試すためのキットへのアクセスも可能です。FAQについては、この記事の最後にあるPDFをご覧ください。また、議論したい方は、https://jp.community.intersystems.com/node/532491 をご覧ください。
ウェブサーバーをインストールする方法には複数あることが多いため、慣れており一番うまくいく方法を選択ください。
PWSを含まない新しいインストーラを試したい方のために、新しい早期アクセスプログラム(EAP)を作りました。 このEAPに参加いただき、キットにアクセスしたい方は、nopws@InterSystems.com までメールにてご連絡ください。
ご意見、ご感想は、nopws@InterSystems.com までお願いします。
マイクロソフトWindowsの例
マイクロソフトWindowsを使用してIISをインストールします。
一度IISをインストールしますと、IRISをインストールするときにIISを設定するかどうかを聞いてきます。
Ubuntuの例
前提条件として、インストールするユーザはsudoが使え、PWSがインストールされていないこと。
apt-get コマンドを使用してUbuntuのApache公式リポジトリを利用できます。
リポジトリの更新
$ sudo apt-get update
Apacheのインストール
$ sudo apt-get install apache2
インストールの検証
$ apache2 -v
インストール後に以下の調整を行います。
$ sudo nano /etc/apache2/apache2.conf
from:
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
To:
User <マシンのユーザのユーザ名>
Group <マシンのユーザのグループ名>
Webサーバのリスタート
$ sudo apachectl -k restart
InterSystems IRISのインストール
SMPのテスト (http://localhost/iris/csp/sys/UtilHome.csp)
インストールが単にテスト目的の場合、以下のコマンドで apache2 を削除できます。
$ sudo apt-get remove apache2
macOSの例
以下のコマンドでインストールします
$ brew install apache-httpd
インストールや更新後にhttpdをリスタートします
$ brew services restart httpd
以下のコマンドで起動します
$ sudo apachectl -k start
または以下のコマンドで再起動します
$ sudo apachectl -k restart
ブラウザより以下のコマンドでテストします
http://localhost
成功すると It works と表示されます。
IRISのインストール (please observe the new installation dialog as it is new)
Web サーバのリスタート
$ sudo apachectl -k restart
SMPのテスト (http://localhost/iris/csp/sys/UtilHome.csp)
インストールが単にテスト目的の場合、以下のコマンドで apache-httpd を削除できます。
$ brew remove apache-httpd
記事
Mihoko Iijima · 2025年3月28日
開発者の皆さん、こんにちは。
先日、EM リリース新バージョン 2025.1 がリリースされました。
コンテナ版以外ですが、新規インストール時に指定する初期セキュリティオプションのデフォルトが「ロックダウン(Locked Down)」に変更となりましたので、今までとの違いについて以下ご説明します。
ドキュメント(Windows):[Windows Development Installation] > [Step 3: Choose Initial Security]
ドキュメント(UNIX、Linux、Mac):[UNIX®, Linux, and macOS Development Installation] > [Step 1: Choose Security Settings]
以前のバージョンのデフォルトは、IRIS:「最小(Minimal)」、IRIS for Health:「通常(Normal)」です。
ロックダウンオプションは、初期セキュリティの中で一番厳しいセキュリティ設定を行うオプションで、例えば、オブジェクト/SQL のアクセスが行えない、VSCode から IRIS にアクセスできない状況からスタートします。
そのため、使用したいアクセスに対してアクセス許可追加していく必要のあるセキュリティオプションです。
今までご利用いただいていたバージョンのデフォルト値と異なりますので、新規インストール時は設定値に気を付けてインストールを進めてみてください。
Windows の場合は、以下の表示となります。
※設定値の並びも以前のバージョンと変わっていますのでご注意ください。
※ 2025/3/28 現在、Windows 版 IRIS for Health のインストールキットのみ、以前と同様の「通常(Normal)」がデフォルト設定されています(将来のリリースで修正される予定です)。
Linuxでは、IRIS、IRIS for Health 共通で以下のように表示されます(最下部とご覧ください)。
Your system type is 'Ubuntu 22.04 LTS (x64)'.
Enter instance name <IRIS>: IRIS
Enter a destination directory for the new instance.
Directory: /usr/irissys
Directory '/usr/irissys' does not exist.
Do you want to create it <Yes>?
Select installation type.
1) Development - Install InterSystems IRIS server and all language bindings
2) Server only - Install InterSystems IRIS server
3) Custom
Setup type <1>? 1
How restrictive do you want the initial Security settings to be?
"Locked Down" is the most secure, "Minimal" is the least restrictive.
1) Locked Down
2) Normal
3) Minimal
Initial Security settings <1>?
もし、ロックダウンの設定でインストールしてしまった場合ですが、
1、オブジェクト/SQL を使いたい(ODBC / JDBC経由のアクセス、スタジオの利用も含まれます)
2、VSCode から IRIS に接続したい
上記アクセスを行いたい場合は、管理ポータルにログインし、セキュリティ設定を変更する必要があります。
1、オブジェクト/SQLを使いたい
サービス:%Service_Bindings を有効に変更します。
※ サービスとは、InterSystems 製品への接続経路を管理するセキュリティ設定で、対象サービスを有効とするか(接続を使うか)、無効とするか(接続を使わないか)、有効とする場合の認証はどれを使うか、などを設定します。
管理ポータルの以下メニューにアクセスします(SuperUser でログインをしてください。パスワードはインストール時に指定したパスワードを指定します)。
[システム管理] > [セキュリティ] > [サービス]
グレーの行は無効化されていることを示しています。
%Service_Bindings をクリックし、有効にチェックを入れ、[保存] ボタンをクリックします。
設定は以上です。
その他サービスの初期セキュリティオプション別、有効・無効については、ドキュメント「初期のサービス・プロパティ」をご参照ください。
2、VSCode から IRIS に接続したい
VSCode から REST 経由で IRIS に接続しています。内部的に使用しているエンドポイントのパスの設定がロックダウンでは無効化されていますので接続できません。有効化に変更するため管理ポータルで設定を変更します。
[システム管理] > [セキュリティ] > [アプリケーション] > [ウェブ・アプリケーション] > /api/atelier を選択
/api/atelier の設定画面を開いたら、[アプリケーション有効] にチェックを入れて[保存]ボタンをクリックします。
設定は以上です。
記事
Minoru Horita · 2020年6月26日
アイリスデータセットのK平均クラスタリング
みなさん、こんにちは。 今回はアイリスデータセットでk平均アルゴリズムを使用します。
注意:Ubuntu 18.04、Apache Zeppelin 0.8.0、python 3.6.5で以下を実行しました。
概要
K平均法は、クラスタリングの問題を解決する最も単純な教師なし学習アルゴリズムの1つです。 このアルゴリズムは、同じグループ内のオブジェクト(グループはクラスターです)が他のグループ内のオブジェクトよりも(意味的に)互いに類似するようにすべてのオブジェクトをグループ化します。 例えば、緑の芝生に赤いボールのある画像があるとします。 K平均法はすべてのピクセルを2つのクラスターに分割します。 1番目のクラスターにはボールのピクセルが含まれ、2番目のクラスターには芝生のピクセルが含まれます。
アイリスデータセットは、3種のアイリスの花の特徴をいくつか含むテーブルです。 種には「Iris-setosa」、「Iris-versicolor」、「Iris-virginica」があります。 それぞれの花には5つの特徴(花びらの長さ、花びらの幅、がく片の長さ、がく片の幅、種 )があります。
要件の確認
まず、すべての要件を確認しましょう。 次のように、ターミナルに「which python3」貼り付けてください。
Python 3がインストールされている場合は、最初のパスが表示されます。 空の場合(「which python42」の出力のように表示される場合)、ターミナルに以下を貼り付けてください。
sudo apt-get update
sudo apt-get -y upgrade
sudo apt install python3
sudo apt-get install -y python3-pip
次に、pysparkをインストールします。
pip3 install pyspark
Spark インタープリターの設定で、zeppelin.pyspark.python を「which python3」で出力されたパスに変更してください。
最後にSparkインタープリターで新しいメモを作成し、以下を新しい段落に貼り付けて実行してください。
%pyspark
import sys
print(sys.version)
何も問題なければ、Pythonのバージョンが表示されます。
クラスタリング
InterSystems IRISをセットアップし、ZeppelinおよびSparkと連携できるようにします。 例えば、 以前のInterSystems IRIS、Apache Zeppelin、Apache Spark接続に関する記事を参照してください。
まず、次のようにアイリスデータセットをロードします。
Speciesの内容を確認するには、以下を新しい段落に貼り付けて実行してください。
%pyspark
dataFrame.select("Species").show(150)
先に進む前に、データの内容を検討することをお勧めします。 新しい段落を追加し、以下を貼り付けて実行してください。
%pyspark
z.show(dataFrame)
以下のように、テーブルには5つの特徴であるPetalLength(花びらの長さ)、PetalWidth(花びらの幅)、SepalLength(がく片の長さ)、SepalWidth(がく片の幅)、Species(種)があります。
Scatter Chart(散布図)を選択してください。 ここでは、以下の画像でクラスターを確認できます(4次元ベクトルのため、完全な画像は確認できません)。 別の視点からクラスターを確認する場合は、xAxisおよびyAxisパラメータを変更してください。
そして、私たちの目的は特徴を使用して花の種類を予測することです。 新しい段落を追加し、そこに以下を貼り付けて実行してください。
%pyspark
from pyspark.ml.linalg import Vectors
from pyspark.ml.feature import VectorAssembler
assembler = VectorAssembler(inputCols = ["PetalLength", "PetalWidth", "SepalLength", "SepalWidth"], outputCol="features") // inputColsで指定された4つのパラメータをでベクトルを作成し、outputColで名前を指定しています。
irisFeatures = assembler.transform(dataFrame) // これはベクトルを含む outputCol 列をテーブルに追加します。
irisFeatures.show(5)
次に、以下を新しい段落に貼り付けて実行します。
%pyspark
from pyspark.ml.clustering import KMeans
(trainingData, testData) = irisFeatures.randomSplit([0.7, 0.3]) // データをランダムに2つの部分に分割します
]kmeans = KMeans().setK(3).setSeed(101010) // 3つのクラスターを持つK平均モデルです。setSeedは再現可能な結果を作成します。
model = kmeans.fit(trainingData) // KMeansモデルをトレーニングします。
transformed = model.transform(trainingData) // 予測結果を含む新しい列をテーブルに追加します。
transformed.show(150)
次のように、testDataでモデルを使用します。
%pyspark
predictions = model.transform(testData)
predictions.show(151)
そして、モデルの精度を計算します。
%pyspark
SpeciesAndPreds = predictions.select("Species", "prediction").collect()
def getCluster(specie):
if specie == "Iris-setosa":
return 0
elif specie == "Iris-versicolor":
return 1
else:
return 2
def getAccuracy(flowers):
counter = 0;
for flower in flowers:
if getCluster(flower[0]) == flower[1]:
counter += 1
return counter / len(flowers)
accuracy = getAccuracy(SpeciesAndPreds)
print("accuracy is " + str(accuracy))
// 私の結果は0.9090909090909091です
各クラスターにある花の数を確認するには、「z.show(predictions)」を使用してBar Chart(棒グラフ)を選択します。
まとめ
ここでは、InterSystems IRISでアイリスの花の種をかなり正確に予測するモデルを作成しました(0.9超の精度)。 また、「Iris-setosa」は分離可能であり、「Iris-virginica」と「Iris-versicolor」はK平均アルゴリズムでは分離できないことが分かりました。 そのため、精度を高めるためには別の方法を使用することをお勧めします。
リンク
Apache Spark + Apache Zeppelin + InterSystems IRISを起動する方法
Spark SQL、データフレームおよびデータセットガイド
機械学習ライブラリガイド
K平均法
クラスタリング(ただし、このAPIはRDD用であるため、アルゴリズムに関する関連情報を参照するだけにしてください)
アイリス花データセット
お知らせ
Toshihiko Minamoto · 2022年2月9日
インターシステムズは、2018年からInterSystems IRISで2ストリームのリリースサイクルを採用しています(開始時のお知らせをご覧ください)。
Continuous delivery (CD) リリース —このリリースは、新機能を迅速に提供し、継続的に更新され、新機能を直ちに利用するアプリケーションの開発、およびデプロイに最適です。
Extended maintenance (EM) リリース — このリリースは、CDリリースよりも頻度は低いですが、メンテナンス・リリースの安定性を提供します。新機能をいち早く利用することよりも、メンテナンスリリースでの修正が容易であることが重要な大規模エンタープライズアプリケーションに最適です。
このアプローチについては非常に好意的なフィードバックをいただいており、人々は「鈍行列車(slow train)」と「快速列車(fast train)」という言葉を使うようになりました。 EMリリースは、大規模なオンプレミスの顧客基盤をs持つお客様やパートナーに好まれる「鈍行列車」です。 CDリリースは、最新かつ最高の機能を求めるお客様やパートナーに好まれる「快速列車」です。
他の多くのソフトウェアベンダーは、この2つのアプローチを採用しており、通常、「鈍行列車」をLTS(Long Term Support)と呼んでいます。 インターシステムズのサポートに対するアプローチは、非常に顧客中心であり、お客様がどのリリースを使用しているかに関わらず、サポートを行います。 そのため、当社ではEM(Extended Maintenance)という用語を使用しています。
当社のリリースサイクルは、当社の成長とともに進化してきました。 当初、EMのリリースはキット形式で、CDのリリースはコンテナ形式でした。 2020年には、コンテナの普及に伴い、EMリリースにキットとコンテナの両方を含めるようになりました。 その結果、EMのリリースは毎年「.1」、CDのリリースは「.2」、「.3」などとなっています。
今回の2021.2のリリースでは、その流れをもう少し進化させました。
CDリリースは、コンテナだけでなく、キット形式でも提供されるようになりました。
InterSystems IRISとInterSystems IRIS for Healthに加えて、HealthShare Health Connectをこれらのリリース・トレインに追加しました
これは、お客様からの要望によるものです。 70%以上の開発者がInterSystems IRISをコンテナで使用しているにもかかわらず、MacOSやWindows上で直接開発している開発者は、快速列車へのアクセスを望んでいました。 CDリリースでのプロダクション展開も一般的になってきていますが、プロダクションでコンテナを使って実行することにあまり慣れていない顧客もいます。 Health Connectのお客様は、頻繁に出る新機能へのアクセスを望んでいました。
CDリリースの制限
CDリリースをキット形式で提供するようになったとはいえ、EMリリースとは異なります。 CDリリースは「快速列車」であり、お客様が迅速かつ容易に最新かつ最高のものに移行することを目的としています。 CDリリースにはいくつかの制限があります。
CDリリースには、メンテナンスアップデートやSVアップデートはありません。 CDリリースには、アドホック機能はありません。その代わり、次のCDリリースに移行すると、そのリリースにはすべての不具合修正とセキュリティアップデートが含まれます。
Caché または Ensemble から CD リリースへのインプレースコンバージョンはサポートされていません。 代わりに、最新の EM リリースに移行できます。当社の前世代製品であるCachéやEnsembleでアプリケーションを構築されたお客様やパートナーの皆様には、慣れ親しんだリズムに合っている「鈍行列車」をご利用いただくのがベストです。
CDリリースからのアップグレードは以下の方法に限定されています。
次のCDリリース(例:2020.2→2020.3)
次のメジャーEMリリースまたはその年のメンテナンスバージョン (2020.2→2021.1, 2020.3→2022.1, 2020.3->2021.1.1)
これらの制限は新しいものではありませんが、過去にCDリリースを使用していたお客様は単にコンテナを交換していただけでした。お客様が他のものを必要とする状況に遭遇しなかっただけです。Virtual Summit 2020でインターシステムズ社の製品ライフサイクルについてのセッションを行いましたが、2ストリームアプローチはうまく機能しており、CDリリースの制限は自然なことだというフィードバックを受けました。
今回、キット形式のCDリリースを導入したことで、CDリリースとEMリリースの仕組みを皆さんに思い出していただきたいと思います。 2021.2のキット版をお使いの方は、2022.1へのアップグレードを期待してください。 そこからは、"快速列車 "に乗り続けることも、"鈍行列車 "に乗り換えることも、余計な手間をかけずにできるでしょう。
記事
Megumi Kakechi · 2022年12月1日
これは InterSystems FAQ サイトの記事です。
複数インスタンスでライセンスを共有する場合、ライセンスを統合管理するライセンスサーバの設定が必要です。
1. ライセンスサーバの構成
1) ライセンスキーの配置
ライセンスキー(IRIS.key/cache.key)は、すべての インスタンスの <インストールディレクトリ>/mgr に配置してください。
ただし、IRIS 2021.1 以降のバージョンをお使いの場合は KeyDirectory を指定することで全てのインスタンスへのライセンスキーの配置は必要なくなります。
KeyDirectory を指定して各インスタンスにライセンスキーをロードする場合、LicenseID の設定が必要になります。各インスタンスの開始時にローカルの iris.key ファイルが検出されない場合、LicenseID を使用してライセンスサーバにライセンスキーを要求します。LicenseID は、管理ポータルの以下のメニューで設定します。
管理ポータル: [システム管理] > [構成] > [追加設定] > [開始]:LicenseID
2) ライセンスサーバの設定
ライセンスサーバの設定は、全ての構成で同一のライセンスサーバを使用するように定義します(全ての構成で設定します)。ライセンスサーバは、管理ポータルの以下のメニューで設定します。
管理ポータル: [システム管理] > [ライセンス] > [ライセンスサーバ]
既定のLOCAL を更新、または削除(+新規作成)して登録します。
【注意】リモート・ライセンス・サーバがファイアウォールで保護されている場合、UDP トラフィックのためにライセンス・サーバ・ポートが開かれている必要があります。
設定項目詳細については、ドキュメントをご参照ください。ライセンスサーバの構成について【IRIS】ライセンスサーバの構成について
3) 全ての構成の再起動
ライセンスキーの配布と、ライセンスサーバの設定が完了したら、一旦全ての構成を停止します。その後、ライセンスサーバを設定した構成から開始し、正しいライセンスサーバに接続していることを確認した後で、ライセンスサーバ以外の構成を開始します。
確認には、%SYSTEM.License クラスの ShowServer()メソッドを使用します。実行例は以下の通りです。
USER>do $system.License.ShowServer()
アクティブなライセンス・サーバアドレス = XXX.XXX.XXX.XXX ポート = XXXX
このほかにも、ライセンス・サーバが管理しているライセンスの使用状況を確認するためのユーティリティが、%SYSTEM.License クラスにあります。
詳細はクラスリファレンスか、以下ドキュメントをご参照ください。ライセンス使用状況を確認するユーティリティについて【IRIS】ライセンス使用状況を確認するユーティリティについて
また、ライセンスサーバのフェールオーバを行う目的で、複数のライセンスサーバを設定することもできます。
詳細は、添付資料をご参照ください。
2. ライセンスの監視
ライセンスサーバの設定を行ったインスタンスのうち、任意の1つインスタンスで以下のコマンドを発行します。
USER>do $system.License.DumpKeys()
License server Client data (1 key[s]) dumped to: c:\intersystems\iris\mgr\dumpkeys.txt at XXX
出力ファイル dumpservers.txt はライセンスサーバが稼働するインスタンスの mgr ディレクトリに生成されます。
内容は以下のようになります(ライセンスサーバが稼働するインスタンスで確認してください)。
USER>!type c:\intersystems\iris\mgr\dumpkeys.txt
例:
Dump of clients using the following key:
LicenseCapacity=InterSystems IRIS 2022.1, Enterprise:...
CustomerName=XXX
OrderNumber=XXX
ExpirationDate=XXX
AuthorizationKey=XXX
MachineID=
LicenseID=
:
Client LU Connections Server Instance
192.29.xx.xxx 1 2 127.0.0.1 IRIS
192.29.xx.xxx 1 5 192.29.xx.xxx IRIS
Total connections = 7, License units consumed = 2
USER>
3. ライセンスの更新
IRIS 2021.1 以降のバージョンで各インスタンスのライセンスキーを更新する場合、ライセンスサーバの KeyDirectory 内のキーファイルを置き換えて有効化したあと、ReloadKeys^%SYS.LICENSE を実行します。
%SYS>d ReloadKeys^%SYS.LICENSE
1 key file(s) uploaded to license server.
各インスタンスのライセンスモニタ (^LMFMON) が、構成されている LicenseID に対して異なるキーがあるかどうかを 30 分おきに確認し、ある場合はアップグレードを実行しようとします。アップグレードされると、message.log には以下のように記録され、ライセンスが更新されます。
11/21/22-14:46:18:721 (12928) 0 [Utility.Event] LMF Info: New license key for ID ***** downloaded and activated.11/21/22-14:46:24:745 (12928) 0 [Utility.Event] LMF Info: Connected to license server 172.18.101.2,4002
【注意】場合よっては、インスタンスの再起動が必要な時があります。その場合、ライセンスモニタは以下のようなログを記録します。再起動を行うことで、新しいラインセンスキーがロードされます。
11/21/22-13:40:30:002 (10448) 0 [Utility.Event] ライセンスアップグレードエラー:Conversion from Core Capacity to Concurrent User インスタンスの再起動が必要です。11/21/22-13:40:30:004 (10448) 1 [Utility.Event] LMF Warning: New license key for ID ***** downloaded but could not activate.
【関連】ライセンスサーバでライセンスを一元管理する方法
記事
Toshihiko Minamoto · 2023年12月28日
## はじめに {#Webinar:ImplementingIntegrationswith.NetorJava-Introduction}
InterSystems IRIS 2020.1 には、Java または .NET で記述されたコンポーネントで IRIS 相互運用性プロダクションの開発を容易にする PEX(プロダクション拡張フレームワーク)が含まれています。
この PEX により、Java または .NET の知識を備える統合開発者は、InterSystems IRIS 相互運用性フレームワークの力、スケーラビリティ、および堅牢性を利用し、すぐに生産性を高めることができます。
IRIS 相互運用性フレームワークエキスパートに対し、PEX は既存の Java 言語または .NET 言語の外部コンポーネントとの統合を簡単にリッチ化することができます。
このチュートリアルでは、PEX を詳しく見ながら、.NET 開発者による PEX のはじめての使用を説明します。 コードは、[https://github.com/es-comunidad-intersystems/webinar-PE](https://github.com/es-comunidad-intersystems/webinar-PEX) にあります。
このチュートリアルは、https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=EPEX にあるオンライン PEX ドキュメントを補足するものです。
##
## InterSystems IRIS 相互運用性のアーキテクチャ {#Webinar:ImplementarIntegracionescon.NetoJava-ArquitecturadeInteroperabilidadInterSystemsIRIS}
PEX では、任意のプログラミング言語(現時点では Java または .NET。将来的に Python も追加)を選択して、IRIS 相互運用性プロダクションを形成するコンポーネント(ビジネスサービス、ビジネスプロセス、ビジネスオペレーション、インバウンドアダプター、アウトバウンドアダプター、メッセージ)を実装できます。
IRIS 相互運用性には主に 3 つのコンポーネントがあります。
* **ビジネスサービス**: 外部から使用できるサービスを提供するコンポーネント。 ビジネスサービスの例には REST サービスや SOAP Web サービスがありますが、ディレクトリに書き込まれた新しいファイルの読み取りと処理を行うサービス、データベーステーブルの行の読み取りと処理を行うサービス、FTP 経由でファイルを読み取るサービスなどもあります。 ビジネスサービスにはインバウンドアダプターが関連付けられる場合があり、特定のプロトコルの実装情報を管理します(SQL テーブルを読み取る SQLInboundAdapter、ファイルを読み取る FileInboundAdapter など)。 ビジネスサービスは、情報の処理、IRIS 相互運用性メッセージへの情報のコピー、およびビジネスプロセスまたはビジネスオペレーションへのメッセージの送信とレスポンスがある場合はその待機などを行います。
* **ビジネスオペレーション**: IRIS 相互運用性メッセージを受け取り、外部システムで稼働するコンポーネント。プロトコル実装情報(TCP、REST、SOAP、Files、SQL など)を管理する OutboundAdapter を使用する場合があります。 ビジネスオペレーションは呼び出し元にレスポンスを返す場合とそうでない場合があります。
* **ビジネスプロセス**: IRS 相互運用性メッセージを受信する際に 1 つ以上の他のビジネスプロセスまたはオペレーションを処理して呼び出しを行い、複雑なオペレーションを実行したり、それを送信したビジネスサービスに情報を追加してメッセージ返したりするオーケストレーションプロセスです。
コンポーネント構成は、「Production」にグループ化されます。これは、IRIS が起動する際にまとめて起動するすべての統合の定義と、これらの統合の各コンポーネントの構成を含む InterSystems IRIS クラスです。 IRIS クラスとして編集するか、管理ポータルから変更できます。
##
## PEX のアーキテクチャ {#Webinar:ImplementarIntegracionescon.NetoJava-ArquitecturadePEX}
.NET または Java コードを実行するために、InterSystems IRIS は対応するオブジェクトゲートウェイを使用します。 このゲートウェイはローカルまたはリモートサーバー上にインスタンス化できます。
### Java と .NET ゲートウェイ {#Webinar:ImplementarIntegracionescon.NetoJava-LosJavay.NetGateways}
ゲートウェイは、特定の TCP/IP ポートをリッスンし、IRIS プロセスからのリクエストを受信して実行し、結果を返すネイティブの .NET または Java コンポーネントです。
.png)
### ビルド済みの PEX コンポーネント {#Webinar:ImplementarIntegracionescon.NetoJava-LosComponentesPEXpre-construidos}
IRIS プロダクションで PEX を使用するには、Java または .NET で開発されたコンポーネントごとに、ビルド済みのコンポーネントをプロダクションに追加する必要があります。 ビルド済みのコンポーネントはそれが参照する外部要素のラッパーとして機能し、そのプロパティと構成をプロダクション内で定義することができます。
対応するゲートウェイから実行している Java または .NET コンポーネントは、既存の PEX コンポーネントを継承している(サブクラス化される)必要があります。 これらの要素の概要を以下に示します。
#### IRIS コンポーネント {#Webinar:ImplementarIntegracionescon.NetoJava-ComponentesdeIRIS}
.NET と Java 用
機能
クラス
コメント
ビジネスサービス
EnsLib.PEX.BusinessService
構成されるアダプター: Ens.InboundAdapter
ビジネスプロセス
EnsLib.PEX.BusinessProcess
ビジネスオペレーション
EnsLib.PEX.BusinessOperation
インバウンドアダプター
EnsLib.PEX.InboundAdapter
アウトバウンドアダプター
EnsLib.PEX.OutboundAdapter
PEX メッセージ
EnsLib.PEX.Message
PEX コンポーネントに送信するメッセージ
IRIS メッセージ
IRIS メッセージにマッピング
IRIS コンポーネントへの PEX コンポーネントのメッセージ
Java または .NET コンポーネント
これらのコンポーネントは Java または .NET プロジェクトに追加されるライブラリに提供されています。 PEX プロジェクトで参照する最低限のライブラリは、ゲートウェイのライブラリと同じです。 また、IRISObject メッセージを使って PEX から IRIS コンポーネントを呼び出す場合、IRISClient ライブラリを参照する必要があります。
言語
ライブラリ
.NET
<installdir>\dev\dotnet\bin\v4.5\InterSystems.Data.Gateway64.exe
<installdir>\dev\dotnet\bin\v4.5\InterSystems.Data.IRISClient.dll
Java
<installdir>\dev\java\lib\JDK18\intersystems-gateway-3.1.0.jar
<installdir>\dev\java\lib\JDK18\intersystems-jdbc-3.1.0.jar
<installdir>\dev\java\lib\gson\gson-2.8.5.jar
.NET コンポーネントに使用するスーパークラス
機能
.NET クラス
ビジネスサービス
InterSystems.EnsLib.PEX.BusinessService
ビジネスプロセス
InterSystems.EnsLib.PEX.BusinessProcess
ビジネスオペレーション
InterSystems.EnsLib.PEX.BusinessOperation
インバウンドアダプター
InterSystems.EnsLib.PEX.InboundAdapter
アウトバウンドアダプター
InterSystems.EnsLib.PEX.OutboundAdapter
PEX メッセージ
InterSystems.EnsLib.PEX.Message
IRIS メッセージ
InterSystems.Data.IRISClient.ADO.IRISObject
Java コンポーネントに使用するスーパークラス
機能
Java クラス
ビジネスサービス
com.intersystems.enslib.BusinessService
ビジネスプロセス
com.intersystems.enslib.BusinessProcess
ビジネスオペレーション
com.intersystems.enslib.BusinessOperation.
インバウンドアダプター
com.intersystems.enslib.pex.InboundAdapter
アウトバウンドアダプター
com.intersystems.enslib.pex.OutboundAdapter
PEX メッセージ
com.intersystems.enslib.pex.Message
IRIS メッセージ
<...>.IRISObject
####
#### ユーティリティ関数 {#Webinar:ImplementarIntegracionescon.NetoJava-FuncionesdeUtilidades}
ObjectScript に実装されているコンポーネントでは、InterSystems IRIS は、マクロの形式で IRIS イベントログに情報を入力するためのコマンドをいくつか提供しています。 これらのメソッドは、以下のように Java と .NET で使用できます。
メソッド
説明
LOGINFO(message)
「info」ステータスのメッセージをイベントログに追加します。
LOGALERT(message)
「alert」ステータスのメッセージをイベントログに追加します。
LOGWARNING(message)
「warning」ステータスのメッセージをイベントログに追加します。
LOGERROR(message)
「error」ステータスのメッセージをイベントログに追加します。
LOGASSERT(message)
「assert」ステータスのメッセージをイベントログに追加します。
### ネイティブコンポーネントと PEX コンポーネントの相互運用性 {#Webinar:ImplementarIntegracionescon.NetoJava-InteroperabilidadentrecomponentesnativosycomponentesPEX}
InterSystems IRIS のネイティブ ObjectScript 言語のコンポーネントと Java または .NET で開発された PEX コンポーネントを組み合わせることが可能です。
* 両方のコンポーネントが BusinessService タイプと InboundAdapter または BusinessOperation と OutboundAdapter である場合、開発者は呼び出しに使用するデータ/オブジェクトのタイプを選択できます。呼び出しは IRIS と Java/.NET ゲートウェイの間で、ゲートウェイを判定するデータ変換ルールに従って行われます。
* 情報を交換する両方のコンポーネントがビジネスホスト(BS、BP、BO)である場合、メッセージ(リクエストまたはレスポンス)を受け取るコンポーネントがは、メッセージに使用するオブジェクトのタイプを強制します。
* PEX コンポーネントは常にメッセージ EnsLib.PEX.Message を受信します。
* IRIS コンポーネントはメッセージ IRISObject を受信します。
#### EnsLib.PEX.Message {#Webinar:ImplementarIntegracionescon.NetoJava-EnsLib.PEX.Message}
EnsLib.PEX.Message を使用すると、.NET または Java で定義された構造のメッセージを IRIS ObjectScript で表現できます。 IRIS は DynamicObject 関数を使用してプロパティを操作します。 内部的には、IRIS は JSON を IRIS と .NET/Java 間のトランスポート媒体として使用します。 IRIS で PEX メッセージを作成する際、メッセージを使用するためにインスタンス化される必要のある .NET/Java クラスの名前は %classname として設定される必要があります。
#### IRISObject {#Webinar:ImplementarIntegracionescon.NetoJava-IRISObject}
ビルド済みの InterSystems IRIS コンポーネントを PEX コンポーネントから呼び出すには、IRISObject タイプのメッセージが定義されている必要があります(.NET では、完全なクラスは InterSystems.Data.IRISClient.ADO.IRISObject です)。
## PEX と .NET の最初のステップ {#Webinar:ImplementarIntegracionescon.NetoJava-PrimerosPasosconPEXy.NET}
最初のステップでは、以下を行います。
* 必要な PEX ライブラリ、.NET フレームワークバージョン 4.5 を使って .NET プロジェクトを作成する
* .NET プロジェクトに BusinessOperation と単純なメッセージを追加する
* InterSystems IRIS の .NET ゲートウェイを構成する
* 相互運用性プロダクションを作成する
* ビルド済みの BO を追加する
### Visual Studio 2019 で .NET プロジェクトを作成する {#Webinar:ImplementingIntegrationswith.NetorJava-Creatinga.NETProjectwithVisualStudio2019}
Visual Studio で新しい「Class Library .Net Standard in C #」タイプのプロジェクトを作成します。 これを「PEX.Webinar.FirstDemo」とします。

PEX を操作するには、「Solution Explorer」と「Add Reference(参照を追加)」コンテキストメニューから必要な依存関係を追加します。

次に「Browse(参照)」ボタンを使って、2 つのライブラリ(.NET Framework 4.5! 対応)を追加します。これは、InterSystems IRIS インストールのサブディレクトリにあります。
<installdir>\dev\dotnet\bin\v4.5\InterSystems.Data.Gateway64.exe
<installdir>\dev\dotnet\bin\v4.5\InterSystems.Data.IRISClient.dll
ソリューション Explorer Class 1.cs から「FirstOperation.cs」に名前が変更され、クラスは BusinessOperation PEX クラス(InterSystems.EnsLib.PEX.BusinessOperation)から継承するように変更されます。 すべての 3 つの PEX.BusinessOperation メソッドは上書きされています。
メソッド
説明
OnInit
このコンポーネントがプロダクションで開始されるときに 1 回実行します。 これにより、ライブラリ、接続、および変数を起動できるようになります...
OnTearDown
このコンポーネントまたはプロダクションが停止するときに 1 回実行します。 コンポーネントのライフサイクルで使用されたリソースを解放できるようになります。
OnMessage
受信するメッセージごとに実行します。 メッセージを処理し、レスポンスを返すことができます。
この時点では、メッセージや実行するタスクは定義されていません。 そのため、LOGINFO 関数は 3 つのメソッドに追加されています。 一方で、スーパークラスメソッドが呼び出される必要がないため、基底クラス(base.OnInit ()、base.OnTearDown()、base.OnMessage)への呼び出しを除去できます。 実装を以下のようにします。
メソッド
初期デプロイ
OnInit
OnInit
public override void OnInit()
{
LOGINFO("PEX.Webinar.FirstDemo.FirstOperation:OnInit()");
}
OnTearDown
OnTearDown
public override void OnTearDown()
{
LOGINFO("PEX.Webinar.FirstDemo.FirstOperation:OnTearDown()");
}
OnMessage
OnMessage
public override object OnMessage(object request)
{
LOGINFO("PEX.Webinar.FirstDemo.FirstOperation:OnMessage()");
return request;
}
これにより、「Build Solution」(ソリューションをビルド)メニューで、最初の .NET プロジェクトバージョンをコンパイルできます。 すると IRIS は以下のファイルを生成します。これは次に使用されるファイルです。
1>------ Build started: Project: PEX.Webinar.FirstDemo, Configuration: Debug Any CPU ------
1>PEX.Webinar.FirstDemo -> C:\Dev\PEX\PEX.Webinar.FirstDemo\bin\Debug\netstandard2.0\PEX.Webinar.FirstDemo.dll
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
### InterSystems IRIS 相互運用性プロダクションの作成 {#Webinar:ImplementingIntegrationswith.NetorJava-InterSystemsIRISInteroperabilityProductionCreation}
IRIS 管理ポータルで、「Interoperability」(相互運用性)メニュー、「Ensemble」ネームスペース、および「Configure」(構成)および「Production」(プロダクション)メニューを使用できるようになりました。 「Actions」(アクション)タブと「New」(新規)ボタンを使って、新しい IRIS 統合プロダクションを定義できます。

テストサービスを有効にするには、「Settings」(設定)タブを選択し、リストの最後のセクション(「Development and Debugging」)で「Testing Enabled」を有効にし、Apply(適用)ボタンをクリックします。

#### .NET ゲートウェイをプロダクションに追加する {#Webinar:ImplementingIntegrationswith.NetorJava-Addingthe.NETGatewaytotheProducción}
PEX を操作するには、対応する Java または .NET ゲートウェイが起動している必要があります。 InterSystems では、プロダクション環境(ライブ)の System Administration(システム管理)/Configuration(構成)/Connectivity(接続)/Object Gateways(オブジェクトゲートウェイ)メニューからこれらのゲートウェイを構成して起動することを推奨しています。 この開発環境においては、コンポーネントをプロダクションに直接追加してゲートウェイを起動することができます。 このため、ワンクリックで、ゲートウェイをプロダクションとして同時に開始・停止できるようになるため、再コンパイルする際に .NET プロジェクトの .DLL へのアクセスを解放することができます(Visual Studio では .NET ゲートウェイが起動している場合に再コンパイルすることができません)。
「.NET Gateway」コンポーネントを追加するには、「Services」(サービス)の横にある「+」ボタンを使用して、プロダクションにビジネスサービスを追加します。 追加されるコンポーネントクラス名(Service クラス)は「EnsLib.DotNetGateway.Service」で、「Enable now」(今すぐ有効化)を選択してこのコンポーネントを有効にします。

追加されたコンポーネントの構成パラメーターは、それをクリックして、「Settings」(設定)タブに値を入力し、「Apply」(適用)ボタンをクリックして編集できます。
パラメーター
値
説明
Port(ポート)
44444
デフォルトのポート 55000 が別のプロセスでビジー状態である場合に、このポートに変更できます。
FilePath(ファイルパス)
<installdir>\dev\dotnet\bin\v4.5\
これは、実行可能なゲートウェイ(InterSystems.Data.Gateway64.exe)が存在する場所を示し、 <InstallDir> は IRIS インストールディレクトリです。例: C:\InterSystems\IRIS20201\dev\dotnet\bin\v4.5\
Exec64
true
64 ビットゲートウェイバージョンを選択します
.NET Version(.NET バージョン)
4.5
.NET バージョンは 4.5 である必要があります
#### .NET で作成されたビジネスオペレーションを追加する {#Webinar:ImplementingIntegrationswith.NetorJava-AddingtheBusinessOperationcreatedin.NET}
次に、前に作成された .NET コードを参照するために、「Operations」(オペレーション)の横にある「+」ボタンを使用して、PEX ビジネスオペレーションを追加します。 クラスタイプは 「EnsLib.PEX.BusinessOperation」で、(オプションの)コンポーネントは「PEX.Webinar.FirstOperation」と呼ばれます。「Enable Now」を使って有効にされます。

次に、コンポーネントを構成し(追加されたコンポーネントをクリックします)、右側の「Settings」(設定)を選択します。
パラメーター
値
説明
Remote Classname(リモートクラス名)
PEX.Webinar.FirstDemo.FirstOperation
生成される .NET クラスの名前
Gateway Port(ゲートウェイポート)
44444
.NET ゲートウェイが構成されている TCP ポート
Gateway Extra CLASSPATH(ゲートウェイ追加クラスパス)
C:\Dev\PEX\PEX.Webinar.FirstDemo\bin\Debug\ netstandard2.0\PEX.Webinar.FirstDemo.dll
含める .DLL の場所。 これは、Visual Studio ビルドが .DLL を生成した場所です。
変更を適用するために、「Apply」(適用)ボタンをクリックします。

#### プロダクションを追加してテストする {#Webinar:ImplementingIntegrationswith.NetorJava-AddingandStartingtheProduction}
「Start」(起動)ボタンによって、プロダクションとそのすべてのコンポーネントが起動します。

InterSystems IRIS では、コンポーネントの単純な隔離テストを実施できます。 「PEX.Webinar.FirstOperation」という「ビジネスオペレーション」を選択し、Actions(アクション)タブから「Test」(テスト)ボタンを選択します。

次の画面では以下のようにデータが入力されます。
パラメーター
値
説明
リクエストタイプ
EnsLib.PEX.Message
送信される IRIS メッセージのタイプ。 常に EnsLib.PEX.Message です。 Java または .NET PEX コンポーネントに値を渡す動的プロパティを使用できます。
%classname
InterSystems.EnsLib.PEX.Message
Java または .NET にコンポーネントリクエストとして定義されるメッセージのクラス名。 .NET の場合、これは InterSystems.EnsLib.PEX.Message またはサブクラスである必要があります。

「Invoke Testing Service」(テストサービスを呼び出す)をクリックすると、IRIS 相互運用性フレームワークはメッセージをコンポーネントに送信し、.NET コードが実行されます。

「Visual Trace」(ビジュアルトレース)をクリックすると、詳細を表示できます。 白いドット(#3)は、.NET に実装された「LOGINFO」トレースをひょじします。

IRIS イベントログには、OnInit() と OnTearDown() を含む生成されるすべての LOGINFO() メッセージのコンパイルが含まれます。
## PEX での次のステップ: プロダクションの完成 {#Webinar:ImplementingIntegrationswith.NetorJava-NextStepswithPEX:CompletingtheProduction}
以下のように、他のタイプのコンポーネントが .NET で作成されます。
* .NET メッセージ
* .NET ビジネスサービス
* .NET ビジネスプロセス
### データによる PEX メッセージの作成と使用 {#Webinar:ImplementingIntegrationswith.NetorJava-CreatingandUsingaPEXMessagewithData}
Ensemble から PEX コンポーネントに情報を渡すために、渡される情報のプロパティを使って、サブクラス InterSystems.EnsLib.PEX.Message として、.NET でクラスを定義します。 単純化された例をそのまま使用し、メッセージに文字列「value」プロパティを追加します。 PEX ビジネスオペレーションは、コンテンツが大文字に変換された同じタイプのメッセージになります。
#### .NET のメッセージクラス {#Webinar:ImplementarIntegracionescon.NetoJava-Clasedemensajeen.NET}
新しい「FirstMessage.cs」ファイルは、以下の定義を使って .NET プロジェクトに追加されます。
**FirstMessage**
using System;
using System.Collections.Generic;
using System.Text;
namespace PEX.Webinar.FirstDemo
{
class FirstMessage : InterSystems.EnsLib.PEX.Message
{
public string value;
}
}
#### .NET からメッセージを使用する {#Webinar:ImplementarIntegracionescon.NetoJava-Usodelmensajedesde.NET}
FirstOperation ビジネスオペレーションでは、OnMessage のデータ型はオブジェクトとして定義されます。 これを使用するには、「FirstMessage」クラスにキャストする必要があります。
**OnMessageV2**
public override object OnMessage(object request)
{
LOGINFO("PEX.Webinar.FirstDemo.FirstOperation:OnMessage()");
///レスポンスメッセージがインスタンス化
FirstMessage response = new FirstMessage();
//値がリクエストから「uppercase」でコピーされる
response.value = ((FirstMessage)request).value.ToUpper();
//レスポンスが返される
return response;
}
IRIS プロダクションを停止する(「Stop」(停止)ボタンを使用)か、少なくとも .NET ゲートウェイを無効にして(コンポーネントをダブルクリック)、.NET プロジェクトをコンパイルする必要があります。
#### InterSystems IRIS からクラスを使用する {#Webinar:ImplementarIntegracionescon.NetoJava-UsodelaclasedesdeInterSystemsIRIS}
「Test」(テスト)ボタン(テストサービス)では、EnsLib クラスの動的プロパティを filled.PEX.Message にできません。 ただし、テストサービスは IRIS ネイティブの「Ens.StringRequest」メッセージタイプとともに使用でき、(データ変換を通じて)PEX メッセージに変換することができます。 変換は、ビルド済みのルータータイプのビジネスプロセスから呼び出されます。
#### データ変換 {#Webinar:ImplementingIntegrationswith.NetorJava-DataTransformation}
データ変換は、データをネイティブ Ensemble メッセージからコピーするために作成されます。
ソース
ターゲット
コメント
クラス
EnsLib.StringRequest
EnsLib.PEX.Message
変換ソースとターゲットのクラス
%classname
該当なし
PEX.Webinar.FirstDemo.FirstMessage
PEX メッセージ(ターゲット)の場合、%classname は、使用される .NET/Java クラス名を定義します。
プロパティ
source.StringValue
target.%jsonObject.value
ターゲット PEX メッセージでは、動的プロパティは %jsonObject 内にあります。
データ変換は、管理ポータルの「Interoperability」>「ビルド」>「データ変換」にある「New」(新規)ボタンを使用して作成できます。

その後、「ソース」から「ターゲット」メッセージへの変換のパラメーターは、グラフィックツールを使用して、下に表示される 2 行のテキストを取得するように右側の「Action」(アクション)タブにテキストを入力することで、前のテーブルで説明されたとおりに定義されます。 すると、「Tools」(ツール)タブで保存、コンパイル、およびテストすることができます。

次に、「Tools」(ツール)タブを開いて、このデータ変換をテストできます。

ソースメッセージの値を指定(StringValue)して、結果を検証できるテストウィンドウが開きます。
ご覧のとおり、PEX メッセージは内部 JSON 表現を使用して、IRIS と Java または .NET 間で値を送信しています。

#### ルータータイプのビジネスプロセスを作成する {#Webinar:ImplementingIntegrationswith.NetorJava-CreatingaRoutertypeBusinessProcess}
ルータータイプのビジネスプロセスをプロダクションに追加し、作成されるデータ変換を呼び出して既存のビジネスオペレーションにメッセージを送信するルーティングルールを定義できるようになりました。
管理ポータルで、「Production Configuration」(プロダクション構成)画面(「Interoperability」/「構成」/「プロダクション」)に戻り、「Processes」(プロセス)の横にある「+」をクリックして以下のように入力し、ビジネスプロセスタイプ「EnsLib.Message.Router」を追加します。
パラメーター
値
説明
Business Process Class(ビジネスプロセスクラス)
EnsLib.MsgRouter.RoutingEngine
ルールベースのメッセージルーティングを行うビジネスプロセス
Auto-Create Rule(自動作成ルール)
TRUE
ルーティングルールのスケルトンを定義します
Business Process Name(ビジネスプロセス名)
MessageRouter
プロダクションにおけるこのコンポーネントの名前
Enable Now(今すぐ有効化)
TRUE
このコンポーネントを直ちに有効化します
Pool Size(プールサイズ)
1
スケーラビリティ。 同時に実行するアクティブプロセス数を定義できます。

このコンポーネントのルーティングルールの編集が残っています。 これを行うために、プロダクションの「MessageRouter」コンポーネントを選択し、ビジネスルール名の横にある虫眼鏡をクリックします。

ルールエディターでは、変換が適用された後に、すべての「Ens.StringRequest」メッセージを「PEX.Webinar.FirstOperation」ビジネスオペレーションに送信するようにルールを編集できます。 「+」ボタンを使用すると、ルールに要素を追加し、あらかじめ要素を選択する際には要素を編集することができます。 以下のようにルールを作成します。

デフォルトでは、このコンポーネントはレスポンスを期待しません。 コンポーネントの「Settings」(設定)タブで、ビジネスオペレーションからレスポンスを受信するように設定を変更しましょう。

#### テストサービスでルーターをテストする {#Webinar:ImplementarIntegracionescon.NetoJava-PruebadelEnrutadorconelServiciodePruebas}
プロダクションページに戻り、「Start」(起動)ボタンを使ってプロダクションを起動し、「MessageRouter」コンポーネントを選択します。「Actions」(アクション)タブで、「Test」(テスト)ボタンをクリックし、「Ens.StringRequest」タイプのメッセージを送信します。

テストレスポンスメッセージを「Test Results」(テスト結果)で確認できます。完全なメッセージログには、IRIS 相互運用性プロダクションの様々なコンポーネントに関する実行の全詳細が表示されます。
レスポンス:

### {#Webinar:ImplementarIntegracionescon.NetoJava-}
メッセージのトレース:

### .NET ビジネスサービス {#Webinar:ImplementarIntegracionescon.NetoJava-BusinessServiceen.NET}
#### .NET の実装 {#Webinar:ImplementingIntegrationswith.NetorJava-Implementationin.NET}
Visual Studio に戻り、.NET ビジネスサービスを作成します。 この最初の例では、このビジネスサービスに特定の「インバウンドアダプター」は関連付けられていません。(CallInterval 値の設定に従って)定期的に実行し、CallInterval ごとにビジネスサービスを呼び出す「EnsLib.InboundAdapter」コンポーネントを使用します。
Visual Studio で、「FirstService」クラスの新しい「FirstService.cs」ファイルが生成されます。 インバウンドアダプターが検出する各イベントの処理は、「OnProcessInput」メソッドを使って行われます。 パラメーターに設定されるオブジェクトは、InboudAdapter の実装によって異なりますが、この場合は使用されていません。
**FirstService:OnProcessInput**
public override object OnProcessInput(object messageInput)
{
//新しいリクエストオブジェクトを作成
FirstMessage myRequest = new FirstMessage();
myRequest.value = "The send time is: " + System.DateTime.Now.ToString();
//レスポンスを待たずに送信:
//SendRequestAsync("PEX.Webinar.FirstOperation", myRequest);
//送信して、20秒のタイムアウトでレスポンスを待機する:
FirstMessage myResponse=(FirstMessage) SendRequestSync("PEX.Webinar.FirstOperation", myRequest, 20);
return null;
}
**FirstService:OnProcessInput**
public override object OnProcessInput(object messageInput)
{
//新しいリクエストオブジェクトを作成
FirstMessage myRequest = new FirstMessage();
myRequest.value = "The send time is: " + System.DateTime.Now.ToString();
//レスポンスを待たずに送信:
//SendRequestAsync("PEX.Webinar.FirstOperation", myRequest);
//送信して、20秒のタイムアウトでレスポンスを待機する:
FirstMessage myResponse=(FirstMessage) SendRequestSync("PEX.Webinar.FirstOperation", myRequest, 20);
return null;
}
プロダクションのコンポーネントにコンパイルせずにメッセージを送信するために、管理ポータルで構成されたパラメーターを使用します。値は「RemoteSettings」構成パラメーター内に JSON 文字列として指定されています。
**パラメーター**
class FirstService : InterSystems.EnsLib.PEX.BusinessService
{
/// <summary>
/// ポータルから変更できるパラメーター
/// </summary>
public string TargetConfigName;
(...)
「TargetConfigName」に指定された値が null に設定されている場合、ビジネスサービスはどの宛先にもメッセージを送信しません。 この問題をできるだけ早期に検出するためには、1 つのオプションとして、コンポーネントが開始したときに、OnInit() 呼び出し内で TargetConfigName の値を検証することができます。
**FirstService:OnInit**
public override void OnInit()
{
//プロパティが正しく報告されることを検証
if (TargetConfigName==null )
{
LOGWARNING("TargetConfigName is missing; assign it a value in RemoteSettings");
}else
{
LOGINFO("TargetConfigname=" + TargetConfigName);
}
}
次に、OnProcessInput を、TargetConfigName の値を使用するように変更しましょう。
**OnProcessInput**
//送信して、20 秒のタイムアウトでレスポンスを待機:
FirstMessage myResponse=(FirstMessage) SendRequestSync(TargetConfigName, myRequest, 20);
#### InterSystems IRIS での PEX ビジネスサービス {#Webinar:ImplementarIntegracionescon.NetoJava-BusinessServicePEXenInterSystemsIRIS}
管理ポータルで「+」をクリックして、プロダクションの定義にビジネスサービスタイプのコンポーネントを追加します。

次に、(追加されたコンポーネントをクリックして)コンポーネントを構成し、右側の「Settings」(設定)タブを選択します。
パラメーター
値
説明
CallInterval
20
関連するアダプターの OnTask() の実行と OnProcessInput() への呼び出し間の時間
Remote Classname(リモートクラス名)
PEX.Webinar.FirstDemo.FirstService
生成される .NET クラスの名前
Remote Settings(リモート設定)
TargetConfigName=PEX.Webinar.FirstOperation
param=value フォーマットによるパラメーターの <newline> 区切りのリスト
Gateway Port(ゲートウェイポート)
44444
.NET ゲートウェイが構成されている TCP ポート
Gateway Extra CLASSPATH(ゲートウェイ追加クラスパス)
C:\Dev\PEX\PEX.Webinar.FirstDemo\bin\Debug\ netstandard2.0\PEX.Webinar.FirstDemo.dll
含める .DLL の場所。 これは、Visual Studio ビルドが .DLL を生成した場所です。
このビジネスサービスが有効になると、関連アダプター(Ens.InboundAdapter)のOnTask() の CallInterval が実行されます。 ここでは、OnTask は FirstService.OnProcessInput() を呼び出すだけです。 つまり、CallInterval と FirstService.OnProcessInput() ごとに、「TargetConfigName」で定義されたコンポーネントにメッセージが送信されます。 これはメッセージビューアーで確認可能です。

呼び出しの詳細が含まれます。

### .NET ビジネスプロセス {#Webinar:ImplementarIntegracionescon.NetoJava-BusinessProcess.NET}
#### .NET の実装 {#Webinar:ImplementingIntegrationswith.NetorJava-.NETImplementation}
どのビジネスホストとも同様に、ビジネスプロセスにはコールバックの OnInit() と OnTearDown() メソッドがあります。 具体的に、ビジネスプロセスのメソッドは以下のとおりです。
メソッド
説明
OnRequest(message)
ビジネスプロセスに送信されるメッセージごとに実行されます。 プロセスの最初のアクションを実装する場所であり、他のコンポーネント(プロセスまたはオペレーション)に非同期配信を行います。
OnResponse
非同期呼び出しの応答ごとに 1 回実行されます。 レスポンスをマージして結果を保存できます。
OnComplete
ビジネスプロセスの実行の最後に 1 回実行されます。 プロセスの最終レスポンスメッセージが作成されます。
ビジネスプロセスの実行時間は長期(数時間から数日、非同期レスポンスを待機)になる可能性があることに注意しておくことが重要です。 これを可能にするために、IRIS フレームワークはプロセスの実行を中断して再開することができます。 プロセス中に維持したいすべての値は、IRIS が永続的に保存するクラスのプロパティに追加しておく必要があります。 [[persistent](https://usconfluence.iscinternal.com/pages/createpage.action?spaceKey=IBS&title=persistent&linkCreation=true&fromPageId=184290207)] という表記で指示する必要があります。
この例では、最小限の実装が行われており、ビジネスプロセスは受信する PEX メッセージを宛先にルーティングします。
管理ポータルで変更可能な 2 つの変数が使用されています。
**FirstProcess**
class FirstProcess: InterSystems.EnsLib.PEX.BusinessProcess
{
//呼び出しのタイムアウト
public string Timeout = "PT10S";
public string TargetConfigName;
public override void OnInit()
{
//プロパティが正しく入力されていることを確認
if (TargetConfigName == null)
{
LOGWARNING("Missing value for TargetConfigName; It must be assigned a value in RemoteSettings");
}
else
{
LOGINFO("TargetConfigname=" + TargetConfigName);
}
}
メッセージを受信すると、TargetConfigName に非同期に送信されます。
**FirstProces:OnRequest**
public override object OnRequest(object request)
{
LOGINFO("OnRequest");
SendRequestAsync(TargetConfigName, (InterSystems.EnsLib.PEX.Message)request, true); //ResponseRequired=true
SetTimer(Timeout, "HasTimedOut");
return null;
}
OnResponse では、レスポンスをマージすることができます。
**FirstProcess:OnResponse**
public override object OnResponse(object request, object response, object callRequest, object callResponse, string completionKey)
{
LOGINFO("OnResponse, CompletionKey=" + completionKey);
if (completionKey!= "HasTimedOut")
{
response = (FirstMessage)callResponse;
}
LOGINFO("Response:" + response.ToString());
return response;
}
プロセスの最後に、レスポンスが返されます。
**FirstProcess:OnComplete**
public override object OnComplete(object request, object response)
{
LOGINFO("OnComplete");
return response;
}
#### InterSystems IRIS での PEX ビジネスプロセス {#Webinar:ImplementarIntegracionescon.NetoJava-BusinessProcessPEXenIntersystemsIRIS}
EnsLib.PEX.BusinessProcess ビジネスプロセスを追加し、必要に応じて構成し、メッセージを BO に直接送信する代わりに新しいプロセスに送信するように「PEX.Webinar.FirstProcess」ビジネスサービスの TargetCongiNmae を変更します。

コンポーネントの「Settings」(設定)は以下のように定義されます。
パラメーター
値
Remote Classname(リモートクラス名)
PEX.Webinar.FirstDemo.FirstProcess
Remote Settings(リモート設定)
Timeout=PT20STargetConfigName=PEX.Webinar.FirstOperation
Gateway Port(ゲートウェイポート)
44444
Gateway Extra Classpath(ゲートウェイ追加クラスパス)
C:\Dev\PEX\PEX.Webinar.FirstDemo\bin\Debug\netstandard2.0\PEX.Webinar.FirstDemo.dll
トレースの結果は以下のようになります。

## まとめ
PEX では、統合を .NET または Java で非常に流ちょうに実装でき、これらの言語の経験が豊富な開発者に対して InterSystems IRIS 相互運用性レイヤーの全能力と堅牢性を提供しています。
記事
Mihoko Iijima · 2024年1月25日
開発者の皆さん、こんにちは。
こちらの記事👉「Apache Webサーバ(プライベートWebサーバ: PWS)インストレーションの廃止」でご案内していましたが、コミュニティエディションを除くInterSystems製品のバージョン2023.2以降では、プライベートWebサーバ(*)を使用した管理ポータル/Webアクセスを非推奨に変更しました。
(*)プライベートWebサーバとは、バージョン2023.1以前のInterSystems製品をインストールすると自動でインストールされる簡易的なApacheで、52773番ポートで管理ポータルやWebアクセスのテストにご利用いただけるWebサーバです。(本番運用環境には適さない簡易的なWebサーバです)
新規インストール/アップグレードインストールによるプライベートWebサーバの利用可否やインストール時の選択項目の違いについての概要は以下表をご参照ください。
この記事では、以下の内容についてご説明します。
Webサーバ自動設定を選択した場合
VSCodeからアクセスするときの注意点
デバッグ時の注意点
以下の利用方法について詳しくは、シリーズ記事をご参照ください。
IISをWebサーバとする場合
ApacheをWebサーバとする場合
※コンテナ版IRISの利用例については「プライベートWebサーバを使用しないバージョンのコンテナ版IRIS利用時のWebサーバ設定例」をご参照ください。
なお、最新情報は下記英語ドキュメントに記載されます。正確な情報についてはドキュメントもご参照ください。
InterSystems IRIS for Health
InterSystems IRIS
インストール方法は全製品で共通です。例ではInterSystems IRIS(以降IRIS)での例を記述します。
Webサーバ自動設定を選択した場合
Webサーバを事前にインストールした状態で新規インストール/アップグレードインストールを行うと、Webサーバに対する必要な設定を自動的に行うか選択できます。
Linux系:インストーラーから以下のメッセージが表示されます。
Local web server detected. Would you like to use the web server to connect to this installation <Yes>?
IIS:以下画面が表示されます。
この設定でインストールを行うと、Webサーバに対してインスタンス名(小文字で指定)のパスを自動的に設定します。
インスタンス名がIRISTESTである場合、以下のパスでアクセスできます。
http://Webサーバ名/iristest
REST 用のウェブアプリケーションパスや管理ポータルはこのURLの後ろにパスを続けて指定することでアクセスできます。
例)管理ポータル:http://Webサーバ名/iristest/csp/sys/UtilHome.csp
VSCodeからアクセスするときの注意点:《pathPrefixの指定》
Webサーバをインストール時の自動設定で構成した場合、Web経由のアクセスに使用するURLは、
http://Webサーバ名/インスタンス名 から始まるURLになります。
VSCodeからIRISにアクセスする際に指定する接続文字列にもインスタンス名を含めたパスを指定する必要があるため、"pathPrefix" を使用してパス名を指定します。(インスタンス名の先頭に / の指定が必要です)
例)インスタンス名:IRISの場合
{
"objectscript.conn": {
"active": true,
"server": "iristest",
"ns": "USER"
},
"intersystems.servers": {
"iristest":{
"webServer": {
"host": "localhost",
"scheme": "http",
"pathPrefix": "/iris",
"port":80
},
"username": "SuperUser"
}
}
}
デバッグ時の注意点
VSCodeからObjectScriptエクステンションを使用してデバッグを行う場合、WebサーバのWebソケットモジュールを有効にする必要があります。
有効化しないと以下のようなエラーメッセージを出力します。
IISの場合
「WebSocketプロトコル」 を有効にします。
詳細な手続きは下図の通りです(Windowsサーバの例)。
[コントロールパネル] > [プログラム] > [プログラムと機能] > [Windowsの機能の有効化または無効化] の選択、または「サーバーマネージャ」を起動します。
[サーバの役割] から [Webサーバ(IIS)] をチェックし [機能の追加] ボタンをクリックします。(クリック後、[Webサーバ(IIS)]にチェックが付きます)
[アプリケーション開発] > [Web Socket プロトコル] をチェックします。また、[HTTP共有機能] > [HTTPリダイレクト]も有効にします。
オプション全体の設定は、以下の通りです。
Windows10上のIISの設定は下図の通りです。
Apacheの場合
WebSocketモジュールを有効化し、Apacheを再起動します。
sudo a2enmod proxy_wstunnel
sudo systemctl restart apache2
macOSの場合は、pathPrefixの設定は必要なく接続できました。
これはApache由来の話なのかMacOS特有の事情なのかは確認していないのでわかりません。 @Serval.Cat さんありがとうございます。
WebサーバにインストールされるWebゲートウェイ管理画面を確認すると、アプリケーションパス /csp に対して、インストールしたインスタンスに接続するように設定されているため、VSCodeの接続情報に "pathPrefix" の設定がなくても接続できるようです。(WindowsとUbuntuで確認しました)
ただ、同一サーバに複数のIRISをインストールすると、/csp の接続先設定が最後にインストールしたサーバへ接続するように上書きされるので、VSCodeから目的のIRISにアクセスするためには "pathPrefix" を指定したほうがわかりやすくなりそうです。
《補足》Webゲートウェイ管理画面の設定例です(IISにインストールされたWebゲートウェイの画面例)。
1つ目の IRIS for Healthをインストールしたときに指定したインスタンス名が IRISHEALTH だった時、以下サーバ名(IRISHealth)の接続情報が作成されます。
アプリケーションパス: /irishealth が用意され、インストールしたサーバにアクセスするように設定されます(IRISHealth に接続するように設定されます)。
(この設定があるのでVSCodeの"pathPrefix"に "/インスタンス名" を指定するとIRISにアクセスできます)
もう1つ、アプリケーションパス /csp が用意され サーバ接続情報として、IRISHEALTHを設定しています。
この設定があるので、VSCodeからアクセスするとき "pathPrefix" がなくてもIRISへアクセスできます。
ここで、2つ目のIRISをインスタンス名IRISHealth2でインストールすると、サーバ接続情報として同様にIRISHealth2を作成し、/csp の接続先にIRISHealth2を設定してしまいます。
同一サーバに複数のIRISをインストールした環境へVSCodeからアクセスする場合は "pathPrefix" を設定したほうがわかりやすさが出てきそうです。
以前のバージョンでは(2023.x)ではWindowsの場合は、pathPrefixをつけないと接続できなかった記憶があります。
その時もMac版では必要なかったので、2024からWindows版もそれに合わせたということですかね
(またはWindows版ではその追加設定がたまたま抜けていたか)
お知らせ
Seisuke Nakahashi · 2020年8月21日
日本語ドキュメント公開
このたび、InterSystems IRIS 2020.1 の日本語ドキュメントが完成しました。それぞれ以下のWEBサイトで公開をしています。
IRIS 2020.1
IRIS for Health 2020.1
Health Connect 2020.1
ページ内の「すべてのドキュメント」アイコンをクリックすることで、各技術コンテンツを参照いただけます。
キューブから日本語ドキュメントを参照する
IRIS for Windows では、以下の設定を行うことで、キューブの[ドキュメント]をクリックしたときに、上記の日本語ドキュメントページを表示させることが可能となります。
<IRIS installdir>\httpd\conf\httpd-doc.conf をエディタで開き、Redirect先のURL(右側)を、日本語ドキュメントのもに書き換える。 具体的には、URLの最後 docbook を docbookj に変更する
IRISを再起動する
たとえば、IRIS 2020.1 の場合、以下のように httpd-doc.conf を編集することで、
キューブの[ドキュメント]をクリックすると、日本語ドキュメントページが表示されるようになります。
ぜひ日本語ドキュメントをご活用いただき、IRIS製品をお使いくださいませ!
記事
Mihoko Iijima · 2021年4月22日
これは InterSystems FAQ サイトの記事です。
ユーザ定義エラーとして使用したいエラーコードと対応するメッセージを記述したXMLを用意します。
なお、エラーコードは負の整数で設定してください。
<?xml version="1.0" encoding="UTF-8" ?>
<MsgFile Language="ja">
<MsgDomain Domain="UserErrors">
<Message Id="-111" Name="MyError">エラーが発生しました</Message>
<Message Id="-222" Name="MyError2">エラーが発生しました2</Message>
</MsgDomain>
</MsgFile>
XML ファイルが作成できたら使用したいネームスペースにロードします。
set x=##class(%MessageDictionary).Import("error.xml")
ロード完了後、次のようなコマンドでユーザ定義エラーを取得、表示することができます。
USER>set error=$system.Status.Error(-111) // エラーコード -111 を指定してエラーを作成
USER>write $system.Status.GetErrorText(error) // エラーからエラーメッセージを出力
エラー <UserErrors>-111: エラーが発生しました
USER>do $system.Status.DecomposeStatus(error,.val) // エラーの情報を配列変数にセット
USER>zwrite val
val=1
val(1)="エラー <UserErrors>-111: エラーが発生しました"
val(1,"caller")="zError+1^%SYSTEM.Status.1"
val(1,"code")=-111
val(1,"dcode")=-111
val(1,"domain")="UserErrors"
val(1,"namespace")="TEST"
val(1,"param")=0
val(1,"stack")=$lb("e^zError+1^%SYSTEM.Status.1^1","e^^^0")
記事
Hiroshi Sato · 2021年9月23日
これは InterSystems FAQ サイトの記事です。レコード・マップは、区切り文字付きのレコードや固定幅のレコードを含むファイルをInteroperability機能で使用するメッセージクラスへマッピングしたり、Interoperability機能のメッセージクラスからテキストファイルへマッピングする作業を効率的に行うための機能です。
レコードマップのマッピング定義は管理ポータルで作成でき、CSVファイルを読み込ませながら定義するCSVレコードウィザードも提供しています。
プロダクションでレコードマップを利用する場合は、レコードマップ用ビジネス・サービス、またはビジネス・オペレーションを追加し、作成したレコードマップ定義クラスを指定すれば完成です。
使用例は、以下から取得できます。
レコードマップサンプル
レコードマップの詳細な説明は、以下のドキュメントをご参照ください。
レコード・マッパーの使用法について【IRIS】Ensemble レコード・マッパーの使用法について
記事
Hiroshi Sato · 2021年12月28日
これは InterSystems FAQ サイトの記事です。
コンパイル時のフラグや修飾子の記号と意味については、以下ドキュメントをご参照ください。
コンパイルフラグについて【IRIS】
コンパイルフラグについて
なお、開発環境のスタジオやVisual Studio Codeでは、開発環境の設定画面でフラグを変更できます。
スタジオは、[ツール] > [オプション] > [コンパイラ] > [フラグと最適化]
VSCodeは、[View] > [Command Palette...]
ターミナルでコンパイルを実行するときは $system.OBJ.CompileAll() などのシステムユーティリティが利用できます。コンパイルフラグを引数に指定しない場合、デフォルトのコンパイルフラグが利用されます。デフォルトのフラグは $system.OBJ.ShowFlags() で確認できます。
USER>do $system.OBJ.ShowFlags() b - Include sub classes. c - Compile. Compile the class definition(s) after loading. <省略>Default flags for this namespace =dilYou may change the default flags with the SetFlags(flags,system) classmethod.
デフォルトのコンパイルフラグを変更するには、$system.OBJ.SetFlags() メソッドを使用します。引数にデフォルトフラグに指定したいフラグを文字列として指定します。戻り値に設定後のフラグが文字列で返ります。
USER>write $system.OBJ.SetFlags("ck")=cdikl
記事
Megumi Kakechi · 2020年12月13日
これはInterSystems FAQ サイトの記事です
%ZSTARTルーチンを インスタンス開始時に起動しないように構成設定用ファイルを手動で変更します。
【注意】インスタンスの起動環境の変更は、通常管理ポータルで行うものなので、以下に説明する方法は、%ZSTART の SYSTEM ラベルの動作を無効化する方法以外では利用しないようにしてください(別のパラメータを誤って修正してしまった場合、起動できなくなる可能性がありますのでご注意ください)。
1. インスタンス のインストールディレクトリ以下にある構成設定用ファイル(cache.cpf/iris.cpf)をテキストエディタで開きます。 ※構成ファイルは、事前にバックアップ(コピー)していただくことを推奨します。
2. [Startup]セクションにあるSystemStartの値を0に変更し、保存します。
3. ファイル変更後、一旦 インスタンスを通常の方法で停止し、再度開始してください。
SystemStart パラメータの詳細については、下記ドキュメントについてもご参照ください。パラメータ・ファイル・リファレンス_SystemStart【IRIS】