2013-03-01 104 views
1

我一直在尝试将我的GWT项目连接到我的MySQL数据库几个小时,但是我加载驱动程序时反复出现一遍又一遍的奇怪错误。GWT中的MYSQL驱动程序错误

服务器的代码是: 请注意,即时通讯只是试图加载驱动程序的MySQL和即时通讯使用GWT自带的示例项目。 saveToDB(String)是有趣的部分。

package test.server; 



import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException; 
import java.sql.Statement; 

import test.client.GreetingService; 
import com.google.gwt.user.server.rpc.RemoteServiceServlet; 

/** 
* The server side implementation of the RPC service. 
*/ 
@SuppressWarnings("serial") 
public class GreetingServiceImpl extends RemoteServiceServlet implements 
     GreetingService { 

    public String greetServer(String input){ 
     // Verify that the input is valid. 
     saveToDB(input); 
     String serverInfo = getServletContext().getServerInfo(); 
     String userAgent = getThreadLocalRequest().getHeader("User-Agent"); 

     // Escape data from the client to avoid cross-site script vulnerabilities. 
     input = escapeHtml(input); 
     userAgent = escapeHtml(userAgent); 


     return "Hello, " + input + "!<br><br>I am running " + serverInfo 
       + ".<br><br>It looks like you are using:<br>" + userAgent; 
    } 

    /** 
    * Escape an html string. Escaping data received from the client helps to 
    * prevent cross-site script vulnerabilities. 
    * 
    * @param html the html string to escape 
    * @return the escaped string 
    */ 
    private String escapeHtml(String html) { 
     if (html == null) { 
      return null; 
     } 
     return html.replaceAll("&", "&amp;").replaceAll("<", "&lt;") 
       .replaceAll(">", "&gt;"); 
    } 

    public void saveToDB(String input){ 
     String query = "INSERT INTO `oryx.model`" + 
       "VALUES ('" + input + "');"; 
       // Save the model that is in variable "message" (very long string/text) 
       //try { 

       Connection conn = getConn(); 
       // Statement update = (Statement) conn.createStatement(); 
       //update.executeUpdate(query); 

       //get last id 
       /*ResultSet result = (ResultSet) update.getGeneratedKeys(); 
       if (result != null && result.next()) { 
        int rsId = result.getInt(1); 
       } 

       result.close(); 
       update.close(); 
       conn.close(); 
      } catch(SQLException e) { 
       System.err.println("Mysql Statement Error: " + query); 
       e.printStackTrace(); 
      }*/ 

    } 
    private Connection getConn() { 

     Connection conn  = null; 
     String url   = "jdbc:mysql://localhost:3306/"; 
     String db   = "mysqld"; 
     String driver  = "com.mysql.jdbc.Driver"; 
     String user   = "user"; 
     String pass   = "pass"; 



     try { 
      System.out.println("ERROR 1"); 
      Class.forName("com.mysql.jdbc.Driver").newInstance(); 
      System.out.println("ERROR 2"); 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      //e.printStackTrace(); 
      System.out.println("ERROR 3"); 
     } 
     //conn = DriverManager.getConnection(url+db, user, pass); 

     //SQL EXCEPTION 
     //System.err.println("Mysql Connection Error: "); 
     //CLASS NOT FOUND 
     //e.printStackTrace(); 
      return conn; 
} 
} 

错误我总是得到:

重度:javax.servlet.ServletContext日志:异常而调度 传入RPC调用com.google.gwt.user.server.rpc.UnexpectedException: 服务方法'public abstract java.lang.String test.client.GreetingService.greetServer(java.lang.String)'扔了一个 意外的异常:java.lang.ExceptionInInitializerError在 com.google.gwt.user.server.rpc .RPC.encodeResponseForFailure(RPC.java:389) 在 com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:579) 在 com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208) 在 com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248) 在 com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62) 在javax.servlet.http.HttpServlet.service(HttpServlet.java:637) javax.servlet.http.HttpServlet.service(HttpServlet.java:717)at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder .java:511) at org.mortbay.jetty.servle t.ServletHandler $ CachedChain.doFilter在 com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74)(ServletHandler.java:1166) 在 org.mortbay.jetty.servlet。 ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157) 在 com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:123) 在 org.mortbay.jetty.servlet.ServletHandler $ CachedChain。在的doFilter com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34)(ServletHandler.java:1157) 在 org.mortbay.jetty.servlet.ServletHandler $ CachedChain.do滤波器以 com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:61)(ServletHandler.java:1157) 在 org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter( ServletHandler.java:1157) 在 com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43) 在 org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java: 1157) 在 com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125) 在 org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157) 在 com.google.appengine.tools.development.BackendServersFilter.doFilter(BackendServersFilter.java:97) 在 org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler。的java:1157) 在 org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) 在 org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 在 有机.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 在 org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) 在 org.mortbay.jetty.webapp.WebAppContext .handle(WebAppContext.java:418) 在 com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:94) 在 org.mortbay.jetty.handler.HandlerWrapper。手柄(HandlerWrapper.java:152) 在 com.google.appengine.tools.development.JettyContainerService $ ApiProxyHandler.handle(JettyContainerService.java:409) 在 org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper。的java:152) 在org.mortbay.jetty.Server.handle(Server.java:326)在 org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) 在 org.mortbay.jetty.HttpConnection $ RequestHandler.content(HttpConnection.java:938) 在org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755)在 org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)在 组织.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) 在 org.mortbay.thread.QueuedThreadPool $ PoolThread.run(QueuedThreadPool.java:582) 产生的原因:java.lang.ExceptionInInitializerError在 java.lang.Class.forName0(本机方法)维持在 test.server.GreetingServiceImpl.getConn(GreetingServiceImpl.java:88) java.lang.Class.forName(来源不明) 在 test.server.GreetingServiceImpl。 saveToDB(GreetingServiceImpl.java:56) at test.server.GreetingServiceImpl.greetServer(GreetingServiceImpl.java:22) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at su n.reflect.NativeMethodAccessorImpl.invoke(未知来源)处 java.lang.reflect.Method.invoke(未知来源) sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源)在 com.google.appengine.tools.development .agent.runtime.Runtime.invoke(Runtime.java:115) at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:561) ... 38 more由java导致:java .security.AccessControlException:在以 java.security.AccessController.checkPermission(来源不明) java.security.AccessControlContext.checkPermission(来源不明)在 java.lang.SecurityManager中否认(java.lang.RuntimePermission modifyThreadGroup)访问 。 checkPermission(未知来源) com.google.appengine.tools.development.DevAppServerFactory $ CustomSecurityManager.checkPermission(DevAppServerFactory.java:289) 在 com.google.appengine.tools.development.DevAppServerFactory $ CustomSecurityManager.checkAccess(DevAppServerFactory.java:314) 在java.lang.ThreadGroup.checkAccess(Unknown Source)at java.lang.Thread.init(Unknown Source)at java.lang.Thread。(Unknown Source)at com.mysql.jdbc.NonRegisteringDriver $ 1。(NonRegisteringDriver。 java:90) at com.mysql.jdbc.NonRegisteringDriver。(NonRegisteringDriver.java:89) ...49多

如果你愿意,你可以在以下网址上整个代码看看: http://www19.zippyshare.com/v/9248211/file.html

所有帮助将是非常赞赏。

//萨米

回答

1

所致:java.security.AccessControlException:访问被拒绝(java.lang.RuntimePermission modifyThreadGroup)

在com.google。 appengine.tools.development.DevAppServerFactory $ CustomSecurityManager

是有趣的部分。

不能AppEngine上使用MySQL:https://developers.google.com/appengine/docs/java/jrewhitelist

除非你使用CLOUDSQL,它有特定的API:https://developers.google.com/appengine/docs/java/cloud-sql/developers-guide

+0

thanx的傻冒回复。有没有其他方法可以解决问题,而不必在6月初之前使用试用版?另一种方法或什么? //萨米 – user2123988 2013-03-05 11:48:30

+0

首先,你会被部署在AppEngine上或不? – 2013-03-05 13:12:44

+0

不一定我认为。最主要的是我使用gwt并以某种方式连接到我的mysql数据库。如何不如它的工作那么重要。 :) – user2123988 2013-03-06 12:23:39