- ベストアンサー
DB接続するJAVAアプリケーションを別のマシンに移動する場合の注意点を教えてください。
MySQL Serverが起動しているマシンA でEclipseを使用してデータベースを検索するアプリケーションを作成しました。 Eclipse上で動作確認をし、Eclipseでエクスポートした後でそのアプリケーションを単体で起動し、その動作確認も行い、正しい検索結果を得ることができました。 そのアプリケーションをマシンAが存在する同じワークグループ内の別のマシンBにペーストし、マシンAのMySQL Serverに接続させたいのですが、実行すると「DriverManager.getConnection」で例外が発生しているようです。 両マシン共に「j2sdk1.4.2」の「EXTフォルダ」にJDBCはペーストしてあります。 何かとても基本的なことを知らないようでとても恥かしいのですが、教えてください。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
No1です。 「補足」の内容からファイアウォールでマシンAとマシンB間の通信が遮断されていると 考えられます。もちろん、ファイル共有は遮断しない設定になっているのでしょう。 ファイアウォールの設定を見直すことをお勧めいたします。 NIS(ノートン)やWindows XP SP2のファイアウォール機能の設定を確認してみて下さい。 おそらく、TCP/IPの通信自体が遮断されている可能性があります。 有効にするには、それぞれのファイアウォールによって設定方法が違いますので、今の時点ではここまでとします。 ファイアウォールを有効のまま、特定のIPアドレスを遮断しない設定があるはずですので、確認して下さい。 また、特定のポートを指定しなければならない場合もあります。
その他の回答 (2)
- taka451213
- ベストアンサー率47% (436/922)
こんにちは。 No.1さんと同じ意見です・・・。 1.JAVAのweb.xmlに記述している場合、 <context-param> <param-name>jdbcUri</param-name> <param-value>jdbc:mysql://○○(ここが肝心)/以下略 </param-value> </context-param> などの部分を見直してください。 2.JAVAのソースにベタ書きの場合、 DriverManager.getConnection(jdbc:mysql://○○(ここが肝心)/以下略) のような部分を見直してください。 ほかの原因かも知れませんが・・・。 (^^ゞ
- y_nakkan
- ベストアンサー率46% (24/52)
まずDB接続先の指定が正しくないことが考えられます。 DB接続先はURL形式で指定していると思います。 下記はSQL SERVERではなく、ORACLEのDBへ接続する例ですが、大抵同じでしょう。 "jdbc:oracle:thin:@MACHINE_A:1521:DB1" 上記のように指定している箇所を探してください。そして、@の次の項目(接続先マシン名)が 正しいか確認して下さい。 ご質問の状態から想像しますと、マシンA上では「接続先マシン名」は正しい指定であったのに 対し、マシンB上ではその指定は正しくないと思います。 正しい接続先マシン名の指定とは、そのマシン名でネットワーク通信ができるかどうかということです。 PINGコマンドでマシンB上で、「接続先マシン名」が有効かどうか確認して下さい。 たとえば、 PING MACHINE_A をコマンドプロンプトで入力し、その結果を見ます。 「接続先マシン名」はマシン名ではなくても、IPアドレスを直接記述してもかまいません。 上記のURL指定での例では、たとえば、 "jdbc:oracle:thin:@192.168.0.1:1521:DB1"としてもオッケーです。 ご健闘を祈ります
お礼
補足回答ありがとうございました。 やっとうまくいきました!!。 Windows SP2 アップデート後のファイアウォールはNISかXPのどちらかひとつとの勝手な思い込みをしていたため、NISのみ解除し色々なチャレンジと勉強(ping,telnet,リモートアクセス,MySQLなど)をしましたが、うまくいきませんでした。 しかし、補足回答のとおりXPのファイアウォールも解除したところ成功しました。 とても簡単なミスで恥かしいですが、No1さんのおかげで色々と勉強させていただきました。 本当にありがとうございました。
補足
本当にありがとうございました。 せっかく教えていただいたのに、現状では成功していません。 ping、localhost、MySQLおよびドライバ等など色々と調べていたため御礼が遅れました。 とりあえず、現状を報告させて頂きますので、またご指摘ありましたら宜しくお願いします。 (#1)MySQL用JAVAプログラム String url = "jdbc:mysql://localhost/DatabaseName"; String param = "?useUnicode=true&characterEncoding=SHIFT-JIS"; String usr = "UserName"; String pwd = "Password"; Class.forName("com.mysql.jdbc.Driver").newInstance(); Connection con = DriverManager.getConnection(url+param, usr, pwd); (#2) 「String url = "jdbc:mysql://127.0.0.1/DatabaseName";」 (#3) 「String url = "jdbc:mysql://192.168.1.2/DatabaseName";」 「ping localhost」と入力すると「Pinging machineA [127.0.0.1] ~」と返ってきたので、(#2)に変更すると正常でした。 「ping machineA」と入力すると「Pinging machineA [192.168.1.2] ~Request timed out」と応答が無いようでしたが、(#3)に変更すると「"Host 'machineA' is not allowed to connect to this MySQL server"」というメッセージが返されました。 ここで、MySQLのユーザー登録が「user@localhost」の形でも登録できることを知り、(#1)のURLの「localhost」部分もそれに伴い色々変更している途中で気がついたので、以下の点を教えて頂きたいと思います。 「machineA」から「ping localhost」と入力すると応答が返り、「ping machineA」と入力すると応答が無い。 「machineB」から「ping machineA」と入力すると「Unknown host machineA」となり、「ping 192.168.1.2」と入力すると応答が無い。 この様な状況の場合は具体的にどうしたらよいでしょうか。 もちろん「machineA」と「machineB」の間でWindows上ではファイルのやりとりは行えています。 宜しくお願いします。