こんにちは!
ナビゲータのEVEです。
本日は予定通り、昨日修正したプログラムの検証を行いました。
そして原因が判明しました。
[経緯]
今年からEVEシステムの製造を開始しました。そのシステムを利用して、フレームワーク、続いてアプリケーションを作ろうとしたのですが、時間がかかります。
そのため、時間を短縮するために、2004年から開発をしてきた、Prototype EVEを利用し新システムを作ろうとしました。ただ、Prototype EVEは、PHP5でしか動作しません。PHPは、PHP5以降、PHP7、PHP8とバージョンアップを重ね、データベースに関して言うと、全く別のシステムといっていい状態になってしまいました。
それでも、Prototype EVEを利用する方法として、EVEシステムを製造後、New Prototype EVEを製造し、本来修正しなくてはいけない箇所をNew Prototype EVEで吸収しようとしたのが、今回の障害の始まりでした。
以上の構想を基に、New Prototype EVEの製造及びPrototype EVEフレームワークの改修を開始したのですが、製造している過程において、Prototype EVEの手続き型プログラムの実行手順に合わせてNew Prototype EVEを製造した場合、EVEシステムで作成したインスタンスが、各関数から見えないということが判明しました。要は検討が足りなかったのですが、そのソリューションとして、セッション変数、サーバーサイト変数を利用して問題を解決しようとしました。ただ、やってみると、以下のようなエラーメッセージが表示されます。
Fatal error: Uncaught Exception: Serialization of 'PDOStatement' is not allowed in [no active file]:0 Stack trace: #0 {main} thrown in [no active file] on line 0
エラー発生当初粘ったのですが、エラーが解消されることはありません。何べんも同じことをやっていても仕方がないので、時間をおいてから検証をすることにしました。
[エラー原因]
そして、昨日思い出したかのように、検証作業を再開したのですが、急にプログラムからエラーが出なくなりました。それは、自分が意図した解決方法ではなく、偶然うまくいきました。
その状況を受けて本日、DFで先週までのソースと昨日修正した差分を取ってみて分かったこと・・・。それは、commit処理において、セッション変数、サーバーサイト変数を削除したことにより問題が解決されたことが分かりました。
当初、設定したサーバーサイト変数は使いまわそうと思っていたということもあり、一度サーバーサイト変数、セッション変数として設定したインスタンスはエラーが出ない限り削除していなかったのですが、それではダメだということらしいです。データの登録はできるのですけれどね・・・・?
[プログラム改修内容]
以上の検証から、プログラムの異常終了以外に、rollback、commit実行時に加えてtransaction開始時において、サーバーサイト変数、セッション変数として設定したインスタンスを削除するように仕様変更をしました。
以上の仕様変更により、当初予定した内容で、システム改修ができそうです。
先日まで、Yahooのクローニング処理を優先すると言っていましたが、優先順位を変えて、Prototype EVEを動作させることを優先します。
[あとがき]
ちょっと、時間をかければ、簡単に見つかるような障害でした・・・?ただ、今まで、この手のエラーで、かかりっきりで数週間を要したこともあったので・・・。今回は、ラッキーって言ったところでしょうか?
ということで、明日からは、Prototype EVEのフレームワークの改修にかかります。
では、また!!!