- 締切済み
Google Web Toolkit(GWT)でのMySqlの接続
こんにちは。現在GWT勉強中なのですが、MySqlの接続で大ハマリしています。どなたかご教示ください。 環境は以下のとおりです。 GWT:1.6.4 Eclipse:3.4.2 MySQL:5.1.31 MySQLConnector/J:5.1.7 EclipseでWeb Application Projectを作成し、デフォルトで作られる「GreetingServiceImpl」クラスの「public String greetServer(String input)」の中身を以下のように変更しました。 _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ public String greetServer(String input) { String msg = ""; try { Class.forName("com.mysql.jdbc.Driver").newInstance(); String url = "jdbc:mysql://localhost/gwt_samples"; String user = "root"; String password = "root"; Connection conn = DriverManager.getConnection(url, user, password); msg = "成功"; } catch(Exception e) { msg = "失敗"; } return msg; } _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ 初めはClass.forName()の行で「java.lang.ClassNotFoundException: com.mysql.jdbc.Driver」が発生していましたが、/war/WEB-INF/libにMySQLConnector/JのJARファイルを追加することで発生しなくなりました。 しかし今度は、DriverManager.getConnectionでおかしくなっているようなんですが、その行でステップ実行すると、「RPC.class」の「invokeAndEncodeResponse()」というメソッドの「catch InvocationTargetException e) 」のところまでジャンプしてしまいます。 どなたか分かる方教えてください。 また、不明点あればご指摘ください。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- x_jouet_x
- ベストアンサー率68% (162/236)
スタックトレースを拝見したところ、Exceptionが発生している根本の原因は java.lang.NoClassDefFoundError: Could not initialize class com.mysql.jdbc.ConnectionImpl のところだと思います。 つまり、実行時にcom.mysql.jdbc.Driverクラスは見つかったにも関わらず、com.mysql.jdbc.ConnectionImplクラスが何らかの理由で見つからなかったのでしょう。 もう1度実行環境、特にCLASSPATHを確認してみて下さい。 なお補足になりますが、hiro19834さんが変更されようとしているソースはサーバ側のソースですので、これはGoogle App Engine上で実行されていると思います。 App Engine上でJDBCを利用して直接DBアクセスする例は私も見たことがないので自信がありませんが、この場合JDO(Java Data Objects)経由でDBアクセスする必要があると思います。 JDO経由でもできるかどうか自信がありませんが・・・。
- x_jouet_x
- ベストアンサー率68% (162/236)
AjaxやGWTではなく、JavaでのExceptionの話ですよね? InvocationTargetExceptionだけでは原因が特定できないので、 catch(Exception e) { msg = "失敗"; } と記述されているところを catch(Exception e) { e.printStackTrace(); } に変更して、これで実行時に表示される内容を教えて頂けないでしょうか?
補足
x_jouet_xさん、回答ありがとうございます。 「e.printStackTrace();」ですが、なぜか「catch(Exception e)」で例外をキャッチできておらず、質問に書いたように「RPC.class」までジャンプしてしまいます。 ですが出力には以下の内容が吐き出されておりました。 2009/05/09 23:50:58 com.google.appengine.tools.development.ApiProxyLocalImpl log SEVERE: [1241880658015000] javax.servlet.ServletContext log: Exception while dispatching incoming RPC call com.google.gwt.user.server.rpc.UnexpectedException: Service method 'public abstract java.lang.String connectsample.client.GreetingService.greetServer(java.lang.String)' threw an unexpected exception: java.lang.NoClassDefFoundError: Could not initialize class com.mysql.jdbc.ConnectionImpl at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:360) at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:546) at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:166) at com.google.gwt.user.server.rpc.RemoteServiceServlet.doPost(RemoteServiceServlet.java:86) at javax.servlet.http.HttpServlet.service(HttpServlet.java:713) at javax.servlet.http.HttpServlet.service(HttpServlet.java:806) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1093) at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405) at com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:54) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139) at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:306) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139) at org.mortbay.jetty.Server.handle(Server.java:313) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:506) at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:844) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:644) at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:205) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:381) at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:396) at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442) Caused by: java.lang.NoClassDefFoundError: Could not initialize class com.mysql.jdbc.ConnectionImpl at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:282) at java.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at connectsample.server.GreetingServiceImpl.greetServer(GreetingServiceImpl.java:22) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:527) ... 25 more ちなみに「e.printStackTrace();」を追加してもしなくても出力されています。
お礼
x_jouet_xさん回答ありがとうございます。 ちょっと勉強不足だったようです。いろいろとキーワードを与えてくださってありがとうございます。勉強しなおしたいと思います。