MGWSIを導入したときの作業メモです。(2010年1月16日 初版作成)

導入環境

  • マシン
    • hp の Compaq 6710b (ノートPC)(CPU:Core2Duo T7100)(メモリ:2GB)
  • OS
    • アスキームックについてた Ubuntu 9.10 (デスクトップ版)
  • HTTPサーバ
    • Apache 2.2.12
    • PHP 5.2.10
    • 双方とも apt-get で適当に ※注意 最初に apt-get update;apt-get upgrade を実行しておく
  • MUMPS環境
    • GT.M
      • 米F.I.S社がフリーで公開しているM言語(MUMPS)のひとつ
      • 現状は、商用の Caché(キャシエ) か GT.M しか選択肢はないのかな~
  • MUMPSと各環境との仲介(Gateway)
    • MGWSI
      • 商用のMUMPSは別として、GT.M単体では外部からデータを扱うことができません
      • そこで、各実行環境との仲介をしようってのが The M/Gateway Services Integrator (MGWSI) です
      • 英 M/Gateway Developments 社が提供しています
      • 商用利用でなければフリーで使えるようです(詳しくはホームページを参照ください)

MUMPS - GT.M 導入

導入手順

  • アーカイブをダウンロード
  • 展開すればすぐに使えます (バイナリになってます)
  • 日本語(UTF-8)も使えますが、マルチバイト対応の組込関数が使いたいなら utf8 ディレクトリを使います
  • 本格的に導入するなら同梱の configure を使うようですが、今回はやってません。

使い方

  • 環境変数を設定
    • gtm_dist=実行ファイルmumpsのあるディレクトリ
    • gtmgbldir=$gtm_dist/mumps.gld
    • とりあえず動かすときはこんくらいでOK
  • データベースファイルをつくる
$ mupip
MUPIP> create
MUPIP> exit
  • これで mumps.dat が作られます。そこに実際のデータが格納されます。
  • あとは通常のMUMPSと同じ感じで使えると思います。
  • 同梱の mumps.hlp (英語のテキストファイル) が参考になると思います。

MGWSI 導入

ダウンロード

  • http://gradvs1.mgateway.com/main/ → mgwsi_lx-x86_95b.tar.gz
    • 名前、会社、役職、メールアドレスを入力します。個人なので会社と役職は no にしときました。
    • メールアドレスにライセンスキー(*2)が届きます
  • これも展開した中身はバイナリなので、そのまま使えます
  • 同梱の Mgwsi.pdf (英語) を参考にしました

セットアップ

MGWSI - 仲介用デーモンプロセス(*1)

  • mgwsi と同じディレクトリに mgwsi.key を作成
    • 中身はメールで送られてきたライセンスキーです
    • [MAIN] の行から [OPTIONS] の下の行までをコピペします
  • 起動
$ mgwsi
  • 停止
$ mgwsi stop
  • nph-mgwsic を cgi-bin ディレクトリにコピーしてブラウザから見たら管理画面?出たけど詳細は未調査

MGWSI - MUMPS向けの通信プロセス

  • GT.M から (*1)とやりとりします
  • ~/m/gtm/ZMGWSI.RO を GT.M のディレクトリへコピー
  • 登録
$ mumps -direct
GTM> DO ^%RI
(Enter)
(Enter)
ZMGWSI.RO(Enter)
(Enter)
  • 開始
$ mumps -direct
GTM> DO START^%ZMGWSI(0)
  • 停止
$ mumps -direct
GTM> DO STOP^%ZMGWSI

MGWSI - 各環境向けの拡張モジュール

  • PHP から (*1)とやりとりします ※ここでは PHP 用のモジュール(m_php)を使います
    • 他にも m_jsp, m_aspx, m_python, m_ruby, m_apache, m_cgi, m_websphere_mq があるよう
  • php5210_mgw.so を /usr/lib/php5/20060613+lfs/ 配下へコピー (数字がバージョンに対応してると仮定して)
  • /etc/php5/conf.d/mgwsi.ini を作成 (たぶん名前はなんでもいいのかな?)
extension=php5210_mgw.so
  • Apache を再起動
    • sudo /etc/init.d/apache2 restart
    • phpinfo() で m_php が組み込まれていることを確認します

動かしてみる

<?php
// データの格納はこんな感じ
m_set('^animal','dog','wanwan');
m_set('^animal','cat','nya-nya-');
m_set('^animal','snake','...');
// データの参照はこんな感じ
$animal = 'cat';
echo 'Hey, ' . $animal . ' ! -> ' . m_get('^animal',$animal) . '<br />';
// データの削除はこんな感じ
m_kill('^animal','snake');
?>
上記を GT.M でやってみると…
set ^animal("dog")="wanwan"
set ^animal("cat")="nya-nya-"
set ^animal("snake")="..."
set animal="cat"
write "Hey, ",animal," ! -> ",^animal(animal),!
kill ^animal('snake')
  • わざとまぎらわしく書きましたが ^animal はデータベースへのアクセス、animal はローカル変数へのアクセスになります
  • 事前に ^animal を用意する必要はありません
  • このまま使う分にはコミット等は必要ありません
  • 全体を削除する場合は kill ^animal のようにします
  • つまり、データベース(ファイル)とローカル変数の扱いがほとんど同じってことなのです

<?php
// もちろん n次元配列のアクセスも可能です。
$data = m_get($table,$country,$part,$date,$name);
?>

※ Ruby で使ってみました → m_ruby
※ Python で使ってみました → m_python
※ JSP で使ってみました → m_jsp
※ Apache で使ってみました → m_apache
※ m_aspx は Windows のサーバ環境が無いので試せないかなあ
※ m_websphere_mq は、何者かわからないのでパス
※ m_cgi を /usr/lib/cgi-bin/ にコピーしてみたけどエラーになった →時間があったら調べる