PHP – Java – MariaDBの連携でハマったこと

今回、あるシステムで以下のようにしてPHPからjavaを呼び出しMariaDBと連携、ということをしていた。

$cmd = "java -classpath .:/usr/java/default/jre/lib:/usr/java/default/lib:/usr/java/default/lib/tools.jar:/home/hogehoge/mariadb-java-client-1.1.7.jar sort";
exec($cmd, $mag, $res);

さすがにPHPからの実行コマンドにclasspathを直書きするのはよろしくないと思ったので、mariadb-java-client-1.1.7.jarを/usr/share/javaに移動してパスを通した。

で、実行コマンドを以下のようにスッキリさせた。

$cmd = "java sort";
exec($cmd, $mag, $res);

ここまでは良かったのだが、ここからが長かった。これまで、exec()で呼び出しているsort.javaの標準出力の値をphpで受け取って、その後の処理を続けていたのだが、クラスパスを設定した後はなぜか処理が続かない。

色々とググりつつ、ソースを見直しつつ、数時間が経過した。最終的に、webサーバー(Apache)をrestartしたらちゃんと動作した。長かった。。。。

# /etc/rc.d/init.d/httpd restart

もし他に悩んでいる方がいらっしゃったら、参考までに。

(2014/07/27:追記)
パスの通し方をメモしておく。

/usr/share/java/にmariadb-java-client-1.1.7.jarを配置したので、bashrcにパスを追記。

# vim ~/.bashrc
以下を追加
export CLASSPATH=".:/usr/share/java/mariadb-java-client-1.1.7.jar"

その後以下のように設定

# source ~/.bashrc

以下のコマンドで、パスが通っているかを確認できるそう。自分の場合、パスが通っていない時は何も表示されませんでした。

# env | grep CL
CLASSPATH=.:/usr/share/java/mariadb-java-client-1.1.7.jar

設定したパスが表示されたので、無事に設定終了。

コメント

タイトルとURLをコピーしました