Q31:MZ Platformで提供されている工程管理システムをベースに自社用に構築したいと考えております。
Q31-1:
現在、MySQLとMZ Platformをインストールして提供版の工程管理システムが正常起動することまで確認しました。
今現在、PC00のMySQLデータをPC01、PC02のMZ Platformが操作することはできますが各PCでの変更結果が他方へ反映させるためにはデータデースへの接続を再実行しなくてはなりません。
これを随時自動で反映させるにはどのようにしたら良いのでしょうか?
また反映方法として
1)自動反映。(つまり変更があったことを他方に明示する必要がない場合)
2)明示反映。(あるPCで変更したを他方に知らせる必要がある場合)
の2通りができればと思っております。
データ連携機能を使えばできるのでしょうか?
A31-1:
ご指摘通り、データ連携機能を使用することで実現可能です。基本的には、表示データの更新を行う際に、自分自身の更新処理のみならず、他のPCの更新処理をリモートコンポーネントを介して呼び出すことになります。
(1) データ連携機能使用のための設定
データ連携機能をご利用になる場合、以下の3つのファイルを編集します。これらのファイルは、インストールフォルダ内のetcフォルダにございます。また、設定内容の説明は付属「データ連携導入手順書」の「1. データ連携機能を使用するための初期設定」にも記述がございますので、合わせてご覧ください。
(a) Platform.ini
MZ Platformの名前とIPアドレスを記述します。名前をPC00とする場合には、
以下のように記述します。
PlatformName=PC00
また、IPアドレスが192.168.11.1の場合には、以下のように記述します。
LocalhostAddress=192.168.11.1
この設定でアプリケーションビルダーを起動すると、タイトルバーに「MZPlatform アプリケーションビルダー (PC00)」と表示されるようになります。この「PC00」が、起動したMZ Platformの名前を表します。
なお、Platform.iniの各設定項目の詳細につきましては、付属の「詳細設定説明書」をご覧下さい。
(b) hostsfile.ini
データ連携を行うMZ Platformの名前とローカルホストアドレス(あるいはIPアドレス)をタブ区切りで記述します。例えば、PC00のIPアドレスが192.168.11.1、PC01のIPアドレスが192.168.11.2の場合には以下のように記述します。
PC00 192.168.11.1
PC01 192.168.11.2
(c) AccessPolicy.ini
各種リモートアクセスを許可するMZ Platformの名前を記述します。自分自身とPC00からのリモートアクセスをすべて許可する場合には、以下のように記述します。
allowAll=local,PC00
また、ワイルドカード(*)を用いて以下のように記述すると、任意のMZ Platformからのすべてのリモートアクセスを許可します。
allowAll=*
(2) アプリケーション(ProductionControl.mzax)の修正
表示データの更新を行う際に、自分自身のみならず他のPCの更新処理も行うように修正します。ProductionControl.mzaxでは、MySQL連携[ID:1,KEY:MySQL連携]からイベント番号1のアクションイベントが発生したときに、作業表、全体計画表、日付別負荷状況、工程別負荷状況の初期化処理を呼び出して表示データの更新を行っています。そこで、まずは、これらの初期化処理の呼び出しをサブルーチンコンポーネントを使って一つにまとめます。
(a) 表示データ更新処理のサブルーチン化
メニューから[コンポーネント追加]-[処理部品]-[サブルーチン]-[サブルーチン]とたどって、サブルーチンコンポーネントを追加します。次に、追加したサブルーチンコンポーネント上で右クリックし、[イベント処理追加]-[アクションイベント]を選択します。アクションイベントの赤丸上で右クリック、[起動メソッド追加]を選択し、作業表コンポーネントを接続して起動メソッドとして初期化処理を設定します。以下同様に、全体計画表、日付別負荷状況、工程別負荷状況の初期化処理を追加していきます。
(b) サブルーチンのリモート呼び出し用属性設定
ここで追加したサブルーチンコンポーネントをリモートで使用できるように属性設定を行います。サブルーチンコンポーネント上で右クリック、[属性情報設定...]を選択します。表示された「コンポーネント属性情報」ダイアログで、ComponentPublicName欄に"DataUpdate"(ここに記入した名前がリモートアクセスの際に使われる公開名となります。もちろん他の名前でも構いません。)と記入し、AllowRemoteInvocation欄の"true"を選択します。
(c) リモートメソッド呼び出しの設定
MySQL連携から発生しているアクションイベントにリモートコンポーネントの呼び出しを追加します(既存の接続、作業表、全体計画表、日付別負荷状況、工程別負荷状況の初期化処理は不要ですので、削除しても構いません)。
画面上右クリック>コンポーネント追加>処理部品>連携>リモートメソッド
と選択して、リモートメソッドコンポーネントを追加します。
次に、MySQL連携から発生しているアクションイベントの赤丸上で右クリック、[起動メソッド追加]を選択します。追加された空白のコンポーネント上で右クリックし、[接続コンポーネント選択]-[リモートメソッド]を選択します。
接続コンポーネントとして設定された[リモートメソッド]上で右クリックし、[起動メソッド設定....]を選択し、表示されたダイアログの[メソッド情報編集...]ボタンをクリックします。
表示されたダイアログに以下の値を記入します。
プラットフォーム名:(データ連携を行うプラットフォーム名)
コンポーネント公開名: DataUpdate((b)で指定したComponentPublicName)
コンポーネントID:(空欄)
メソッド名: call
メソッド戻り値: void
メソッド引数: (空欄)
以下、同様の手順でデータ連携を行うすべてのプラットフォームについてリモートコンポーネント呼び出しを追加します。例えば、PC00、PC01、PC02の3台でデータ連携を行う場合には、それぞれについてリモートコンポーネントの呼び出しを設定することになります。
リモートコンポーネントの設定につきましては、付属「データ連携導入手順書」の「2.2 リモートメソッドの設定」も合わせてご覧下さい。
以上の設定で随時自動更新が行われるようになります。MZ Platform名PC00とPC01とでデータ連携を行うように設定したProductionControl.mzaxをサンプルとして関連ファイルに掲載致しましたので、ご覧下さい。関連ファイルは、PC00およびPC01共通でお使いいただけます。
なお、Windowsのファイアウォールが有効になっているとデータ連携を行えない場合があります。その場合には、付属「工程管理システム操作マニュアル」の「7-4 ファイアウォールの設定」と同様の手順で例外設定を行います。ここでの記述と異なる箇所は、以下の通りです。
119ページ末尾 「ポートの追加」の名前欄に、「RMI」と記入します。
120ページ冒頭 「ポートの追加」のポート番号欄に、「1099」と記入します。
関連ファイル:ProductionControl.zip
Q31-2:
前回、データ連携機能の使用について教えていただきましたがその後、PC01のMZ PlatformとPC02のMZ PlatformとからPC00のMySQLを操作し、PC01およびPC02での連携動作を確認できました。ありがとうございました。
ところが数日後、PC01から送っていただいたサンプルのProductionControl.mzaxを実行(設定可)で起動してもMySQLへ接続できなくなりました。
PC01では、データ連携版のProductionControl.mzaxと従来のProductionControl.mzaxとを比較したりそれぞれからMySQLへ接続したりして現状動作の確認をしていました。(PC02は、連携可能なことを確認して以降、操作していません。)
PC01の状況としては、
サーバ名:jdbc:mysql://PC00/
ユーザ名:root
パスワード:設定値
を入力して接続ボタンを押した後×ボタンで終了しようとするのですが反応がありません。(なんのエラーメッセージも無い)
PC02からは、今でも接続可能でProductionControl.mzaxが正常に可動できます。
PC01のMZ PlatformおよびJava(ドライバを含む)を再インストールしてみましたが改善できませんでした。
その他のデータベース接続のサンプル類をテストしてみましたが同様に接続ボタンを押したあと反応が戻ってきません。
PC01とPC00のLAN接続は正常と思われます。(pingで正常に反応があります。)
ファイヤーウォールは使用していません。(社内LANはインターネット環境につながっていない為)
なにを確認・修正すればよいのか不明な状況です。よろしくお願い致します。
A31-2:
ProductionControl.mzax以外のデータベースサンプル類も動作しないことから、MySQLの接続に何らかの問題が発生した可能性が考えられます。コマンドプロンプトより以下のコマンドを入力し、PC00上で動作しているMySQLへPC01から接続可能かどうか、ご確認お願いします。
C:\>mysql -h PC00 -u root -p
Enter password: <設定したパスワード>
接続した場合には、以下のようなメッセージとコマンドプロンプトが表示されます。
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.0.23-community-nt MySQL Community Edition (GPL)
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
Q31-3:
結果は、
'mysql'は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチファイルとして認識されていません。
とエラーメッセージが表示されます。
これは、PC01およびPC02でも同様です。
PC01、02にはMySQLをインストールしていないのでmysqlコマンドを受付けないのは当然とも思えるのですが・・・。PC01、02にもMySQLをインストールしなくてはいけないのでしょうか?
A31-3:
説明が不足しており、申し訳ございません。PC01、PC02からmysqlコマンドによる接続確認を行うためには、それぞれのPCにMySQLをインストールする必要がございます。
大変お手数ですが、インストールが可能であれば、mysqlコマンドによる接続確認をお願いいたします。
Q31-4:
MySQLをPC01にインストールして前記のMySQLコマンドを実行してみました。最終結果としては、PC00のMySQLに接続出来ましたしProductionControl.mzaxでの接続不良も改善されました。しかしながら原因というものが特定できていないのが気がかりなのです。
MySQLのインストールの状況から記述します。
PC01へのMySQLインストール時、最後のサービス起動設定画面のところで"Start service"までチェックがついた後"Apply security settings"のチェックが出ないまま反応がなくなります。したなくタスクマネージャーで終了させました。PC01単体の不具合かと思いチェックディスクとデフラグ(どちらもCドライブ)を行いました。その後、再インストールしましたが症状は変わらず"MySQL Instance Config Wizard"で再設定しようとすると
”ドライブにアクセスできない”といったイメージのエラーが戻されました。
”ファイヤーウォールがあるなら・・・”または
”再インストールならDATA領域を削除後、再インストールを・・・”
というメッセージが同時にありました。
PC01へのMySQLインストールは、LocalのCドライブに行っていますのでドライブにアクセス不可というのは考えられないと思います。
コントロールパネルのプログラムの削除のあとにDATA領域の削除についてもC:Program FilesのMySQLフォルダも消去していますので問題ないと思います。
同様の方法でMySQLのインストールを3回行ってみましたが改善されませんでした。
ここでファイヤーウォールについて先日、使っていないと書きましたがPC01は、まれにLAN回線を繋ぎかえてインターネットに接続するのでソフト自体はインストールしています。(通常は、起動はしていません。)
とりあえずファイヤーウォールをアンインストールしてMySQLのインストールを再実行すると正常にインストール終了することができました。
一度はPC00に接続できているのですからファイヤーフォールの影響だとは思いませんがいかがなものでしょうか?
現状は。PC01からMySQLをアンインストールしています。
ProductionControl.mzaxの動作も正常です。
MZプラットフォームではないのですがPC00のMySQLが自動起動しません。(自動起動の設定はしています。)これはどういうことが原因なのでしょうか?
MySQLのソフト自体をPC00ローカルのディスクにインストールしていないのですが、この辺りに起因するものでしょうか?MySQLはソフトを含めすべてLANで接続したHDiskにインストールしています。理由は、innoDBのみをHDiskに指定したのではMySQLのサービスの起動ができなかったことです。PC01にインストールした時と同様に ディスクにアクセス出来ない・・・というエラーメッセージが戻ってきたと思います。(反応がなくなることはありませんでした。)
A31-4:
お問い合わせの件につきまして、可能性として考えられる原因について述べさせていただきます。ただし、これらはあくまで可能性の1つに過ぎず、推測の域を出ないものであることを、あらかじめご了承下さい。
(1) MySQLのインストール失敗について
分からない、というのが正直なところです。私どもでは、過去に1件だけ、どうしても正常にインストールできなかった事例を確認しています。その場合は、インストール自体は正常に行えるのですが、ローカルマシン上でmysql.exeコマンドを使用してもMySQLに接続できないというものでした(OSはWindows XPSP1)。申し訳ございませんが、PC01のマシンとの相性、という以上のことは分かりません。
(2) ファイアウォールについて
ファイアウォールは、必ずしも常に通信を遮断しているわけではなく、タイミングによっては接続できる場合があります。憶測に過ぎませんが、始めのうちに接続できたのは、ファイアウォールの何らかのプロセスが残っているという状況で、それをかいくぐって通信が成立していたためである可能性があります。
(3) MySQLの自動起動について
MySQLサービスの起動とLAN上のHDiskのマウントのタイミングによるものと考えられます。すなわち、MySQLサービスを起動しようとしたときには、まだHDiskがマウントされておらず、そのため、MySQLサービスのプログラムを実行できないという状況ではないかと思われます。
Q31-5:
先日は、要領を得ない質問に対して丁寧な御回答をいただきまして、ありがとうございます。MySQLの自働起動等、解決はしておりませんがそれは今後の課題としておきます。
現在、工程管理システム(簡易版)の中を見ながら理解しようとしていますがなかなか容易ではない状態です。そこで不躾ではありますがこの工程管理システム(簡易版)のチュートリアルなどは作成しておられないかと思いメールさせていただきました。もし、そういったものがあればご提供していただければ幸いです。
A31-5:
大変申し訳ございませんが、現在のところ「工程管理システム(簡易版)」はマニュアルのみで、チュートリアルの用意がございません。
[ガントチャート]や[積上棒グラフ]を使ったアプリケーションのうち、
文書:「エクセル連携導入チュートリアル」
ファイル:AP_DATA\Tutorial\エクセル連携導入(派遣管理)-1,2.mzax
文書:「サンプル(グラフ化)」
ファイル:AP_DATA\Sample¥グラフ化.mzax
等がご参考になるかと存じます。