- - PR -
サーバーを変えたら動かなくなった。なんで?
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-09-09 00:36
いつもお世話になります。先月に質問した内容が未だに解決できずまた再挑戦をします。
が、まだ解決していません。手がかりがいつくがわかってので、どなたかわかる方や同じ 経験をされた方いましたらアドバイスお願いします。 Webアプリのプログラムは、Eclipseを使って、Struts+MySQLを使っています。 OSは、Windows NTで開発をして、Windows2000では、ちゃんと動作します。 JDBCは、mysql-connector-java-3.0.8-stable-bin.jarを j2sdk1.4.2?jre?lib?extの中に入れていました。 それをLinuxのレンタルサーバーで運用しようとしています。現象は、 「HTTP Status 503 - サーブレット action は現在利用できません」となり 色々と試行錯誤してわかたことは、struts-config.xmlのデーターベースの設定の <data-source> <set-property property="driverClass" value="org.gjt.mm.mysql.Driver" /> <set-property property="url" value="jdbc:mysql://localhost/testdb? useUnicode=true&characterEncoding=Shift_JIS" /> <set-property property="user" value="user01" /> <set-property property="password" value="pass02" /> </data-source> この部分を読み込みする時にエラーになっていることがわかりました。 レンタルサーバーは、JDBCは、 tomcat4/common/lib へ mysql-connector-java-3.0.14-production-bin.jar が入っているそうです。レンタルサーバー屋さんでは動作は確認していないとのこと。 なので、ちょっとバージョンは違いますが、mysql-connector-java-3.0.15-ga-bin.jar をtomcat4/common/libに入れて、"org.gjt.mm.mysql.Driver" の部分は、"com.mysql.jdbc.Driver"に変更しました。これをWindowsでは動作確認した後に レンタルサーバーにWARファイルで登録をしましたが、同じ「HTTP Status 503」の エラーになってお手上げ状態です。 レンタルサーバーでは、Tomcatのコンソールのログが見れないので、テスト的にJSP のプログラムでそのデータベースを操作させ、Windowsでの動作確認後、レンタルサ ーバーに入れると、以下の様なエラーがWebブラウザーに表示されます。 (長くてすいません) java.sql.SQLException: Unable to connect to any hosts due to exception: java.security.AccessControlException: access denied (java.net.SocketPermission localhost resolve) ** BEGIN NESTED EXCEPTION ** java.security.AccessControlException MESSAGE: access denied (java.net.SocketPermission localhost resolve) STACKTRACE: java.security.AccessControlException: access denied (java.net.SocketPermission localhost resolve) at java.security.AccessControlContext.checkPermission(AccessControlContext.java:269) at java.security.AccessController.checkPermission(AccessController.java:401) at java.lang.SecurityManager.checkPermission(SecurityManager.java:524) at java.lang.SecurityManager.checkConnect(SecurityManager.java:1023) at java.net.InetAddress.getAllByName0(InetAddress.java:1000) at java.net.InetAddress.getAllByName0(InetAddress.java:981) at java.net.InetAddress.getAllByName(InetAddress.java:975) at java.net.InetAddress.getByName(InetAddress.java:889) at java.net.InetSocketAddress.(InetSocketAddress.java:114) at java.net.Socket.(Socket.java:124) at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:121) at com.mysql.jdbc.MysqlIO.(MysqlIO.java:220) at com.mysql.jdbc.Connection.createNewIO(Connection.java:1768) at com.mysql.jdbc.Connection.(Connection.java:440) at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:400) at java.sql.DriverManager.getConnection(DriverManager.java:512) at java.sql.DriverManager.getConnection(DriverManager.java:171) at org.apache.jsp.test_jsp._jspService(test_jsp.java:65) at org.apache.jasper.runtime.HttpJspBase.service(Unknown Source) at javax.servlet.http.HttpServlet.service(HttpServlet.java) at org.apache.jasper.servlet.JspServletWrapper.service(Unknown Source) at org.apache.jasper.servlet.JspServlet.serviceJspFile(Unknown Source) at org.apache.jasper.servlet.JspServlet.service(Unknown Source) at javax.servlet.http.HttpServlet.service(HttpServlet.java) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Unknown Source) at org.apache.catalina.core.ApplicationFilterChain.access$0(Unknown Source) at org.apache.catalina.core.ApplicationFilterChain$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at org.apache.catalina.core.ApplicationFilterChain.doFilter(Unknown Source) at org.apache.catalina.core.StandardWrapperValve.invoke(Unknown Source) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(Unknown Source) at org.apache.catalina.core.StandardPipeline.invoke(Unknown Source) at org.apache.catalina.core.ContainerBase.invoke(Unknown Source) at org.apache.catalina.core.StandardContextValve.invoke(Unknown Source) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(Unknown Source) at org.apache.catalina.core.StandardPipeline.invoke(Unknown Source) at org.apache.catalina.core.ContainerBase.invoke(Unknown Source) at org.apache.catalina.core.StandardContext.invoke(Unknown Source) at org.apache.catalina.core.StandardHostValve.invoke(Unknown Source) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(Unknown Source) at org.apache.catalina.valves.ErrorDispatcherValve.invoke(Unknown Source) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(Unknown Source) at org.apache.catalina.valves.ErrorReportValve.invoke(Unknown Source) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(Unknown Source) at org.apache.catalina.core.StandardPipeline.invoke(Unknown Source) at org.apache.catalina.core.ContainerBase.invoke(Unknown Source) at org.apache.catalina.core.StandardEngineValve.invoke(Unknown Source) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(Unknown Source) at org.apache.catalina.core.StandardPipeline.invoke(Unknown Source) at org.apache.catalina.core.ContainerBase.invoke(Unknown Source) at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:594) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:392) at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:565) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:619) at java.lang.Thread.run(Thread.java:534) ** END NESTED EXCEPTION ** 接続失敗です。 何か分かる方いましたら、是非ご連絡ください。 | ||||
|
投稿日時: 2004-09-09 00:55
スタックとレースを見た限りでは、コネクションを張る時にパーミッションのチェックで引っかかっていますね。
思いつきですが、DB接続ユーザのパーミッション設定が正しくないとか・・・? | ||||
|
投稿日時: 2004-09-09 13:49
聞いた話ですが、レンタルサーバやプロバイダでのCGI,サーブレットのような動的プログラムについては、そのプログラムが勝手に外部サーバへのコネクションをはることを禁止しているところがあるようです。
この制限にひっかかってパーミッションのエラーになっているのではないでしょうか? | ||||
|
投稿日時: 2004-09-10 01:16
Odakazさん、ちょま吉さん、どうもアドバイスありがとうございました。
レンタルサーバー屋さんに問い合わせた所、 「MySQLのユーザー権限は、作成したDBに対してGRANT ALLで生成 されますので、厳しい制限は掛かっておりません。」と言う事でした。 「この部分をサーバーソフトが制御している可能性があります。」 との事で、現在調査してもらっています。 その後、分かった事としましては、JDBCを削除してやってみたところ、 同じ現象、同じエラー内容になりました。 | ||||
|
投稿日時: 2004-09-10 21:45
IDとパスワードがそのMySQLで登録されていないなんて初歩的ミスでないのであれば、
mysql-connector-java-3.0.8-stable-bin.jar を WEB-INF/libの下に入れて一緒に warにしてデプロイしてみればどうでしょうか? レンタルサーバ側でjdbcドライバが提供されていないとすれば、struts-config.xml を読み込んでいるときにそのクラスがないのでエラーになっているのかもしれません。 ローカルで実行したときは自動的にクラスパスが通ってますからね。 [quote] "org.gjt.mm.mysql.Driver" の部分は、"com.mysql.jdbc.Driver" [quote] ソース見れば分かると思いますが、下位互換(だっけ?)のために どっちでも行けると思いますが、後者を使うようにした方がいいでしょうね。 | ||||
|
投稿日時: 2004-09-12 01:11
スタックトレースにcom.mysql.jdbc.Connection等の記述が見られる為、JDBCドライバは読み込まれているようです。
SecurityManagerのパーミッションエラーですので、Java実行時のセキュリティーポリシーでこのサーブレットがソケット接続をする許可が無いのでしょう。 [ メッセージ編集済み 編集者: ちょま吉 編集日時 2004-09-12 01:12 ] | ||||
|
投稿日時: 2004-09-18 18:48
aaさん、ちょま吉さん、どうもコメントありがとうございます。
レンタルサーバー屋さんからの返事がまだこないので、まだ対策ができていません。 そのレンタルサーバーは、Pleskと言うサーバーソフトを使っていて、オプションでTomcatが使えるようですが、データーベースが使えないのに、Tomcatが使える言って良いのか非常に疑問です。 | ||||
|
投稿日時: 2004-09-18 20:47
全然問題ないと思いますよ。DBとWebアプリは別物ですから。 別にRDBでなくてもローカルにファイルで保存したり、Webサービスやメールなどをつかって他サーバとやりとりしたりする手段はあるでしょう。 (レンタルサーバではソケット通信とかORBとかは無理そうですけど。) |