2013-03-01 1 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; 
} 
} 

오류 난 항상 얻을 :

는 SEVERE는 : 로그인 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 at com.google.gwt.user.server.rpc .RPC.encodeResponseForFailure (RPC.java:389) com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall (RemoteServiceServlet.java:208)에서 com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse (RPC.java:579) 에서 com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost (AbstractRemoteServiceServlet.java:62)에서 com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost (RemoteServiceServlet.java:248) 에서 (ServletHolder) ServletHolder (ServletHolder) (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에서 . org.mortbay.jetty.servlet.ServletHandler $ CachedChain에서 ServletHandler $ CachedChain.doFilter com.google.appengine.tools.development.ResponseRewriterFilter.doFilter (ResponseRewriterFilter.java:123)에서 (ServletHandler.java:1157) . org.mortbay.jetty.servlet.ServletHandler $ CachedChain.do에서 doFilter com.google.appengine.tools.development.HeaderVerificationFilter.doFilter (HeaderVerificationFilter.java:34)에서 (ServletHandler.java:1157) org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter에서 필터 com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter (ServeBlobFilter.java:61)에서 (ServletHandler.java:1157) ( org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter에서 com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter (TransactionCleanupFilter.java:43) (ServletHandler.java에서 ServletHandler.java:1157) : 1157) org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter (ServletHandler.java:1157에서 com.google.appengine.tools.development.StaticFileFilter.doFilter (StaticFileFilter.java:125) 에서 ) ( ) com.google.appengine.tools.development.BackendServersFilter.doFilter (BackendServersFilter.java:97) at org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter (ServletHandler.자바 : 1157) org.mortbay.jetty.security.SecurityHandler.handle (SecurityHandler.java:216) 에서 org.mortbay.jetty.servlet.ServletHandler.handle (ServletHandler.java:388) 에서 에서 조직 org.mortbay.jetty.webapp.WebAppContext에서 .mortbay.jetty.servlet.SessionHandler.handle org.mortbay.jetty.handler.ContextHandler.handle (ContextHandler.java:765)에서 (SessionHandler.java:182) org.mortbay.jetty.handler.HandlerWrapper에서 com.google.appengine.tools.development.DevAppEngineWebAppContext.handle (DevAppEngineWebAppContext.java:94)에서 .handle (WebAppContext.java:418) . org.mortbay.jetty.handler.HandlerWrapper.handle에서 com.google.appengine.tools.development.JettyContainerService $ ApiProxyHandler.handle (JettyContainerService.java:409) 에서 (HandlerWrapper.java:152) (HandlerWrapper을 처리합니다. java : 152) at org.mortbay.jetty.Server.handle (Server.java:326) at org.mortbay.jetty.HttpConnection.handleRequest (HttpConnection.java:542) at org.mortbay.jetty.HttpConnection $ RequestHandler.content (HttpConnection.java:938) 에서 org.mortbay.jetty.HttpParser.parseAvailable (HttpParser.java:218)에서 org.mortbay.jetty.HttpParser.parseNext (HttpParser.java:755)에서 조직 01시 .mortbay.jetty.HttpConnection.handle (HttpConnection.java:404) 에 java.lang.ExceptionInInitializerError :에 의한 org.mortbay.thread.QueuedThreadPool $ PoolThread.run (QueuedThreadPool.java:582) 에서 23,516,org.mortbay.io.nio.SelectChannelEndPoint.run (SelectChannelEndPoint.java:409) java.lang.Class.forName0 test.server.GreetingServiceImpl.getConn (GreetingServiceImpl.java:88)에서 java.lang.Class.forName (알 수없는 소스)에서 (기본 방법) test.server.GreetingServiceImpl 에서 . SU에서 sun.reflect.NativeMethodAccessorImpl.invoke0 (기본 방법)에서 saveToDB test.server.GreetingServiceImpl.greetServer (GreetingServiceImpl.java:22)에서 (GreetingServiceImpl.java:56) n.reflect.NativeMethodAccessorImpl.invoke (알 수없는 소스)에서 sun.reflect.DelegatingMethodAccessorImpl.invoke (알 수없는 소스)에서 java.lang.reflect.Method.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 자세한 내용 원인 : java .security.AccessControlException : java.lang.SecurityManager에에서 java.security.AccessController.checkPermission (알 수없는 소스)에서 java.security.AccessControlContext.checkPermission (알 수없는 소스)에서 (java.lang.RuntimePermission의 modifyThreadGroup) 액세스가 거부 . checkPermission (알 수없는 소스) : com.google.appengine.tools.development.DevAppServerFactory $ CustomSecurityManager.checkAccess (DevAppServerFactory.java:314) 에서의com.google.appengine.tools.development.DevAppServerFactory $ CustomSecurityManager.checkPermission (DevAppServerFactory.java:289) java.lang.ThreadGroup.checkAccess (알 수없는 소스) 에서 java.lang.Thread.init (알 수없는 소스) 에서 java.lang.Thread (알 수없는 소스) com.mysql.jdbc.NonRegisteringDriver $ 1 (NonRegisteringDriver. java : 90) at com.mysql.jdbc.NonRegisteringDriver (NonRegisteringDriver.java:89) ...49 개

당신은 다음 URL에서 전체 코드에보고 할 수 있습니다하려면 모든 도움은 매우 극명하게 될 것이다 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을 사용할 수 없습니다 your'e가 응답을 https://developers.google.com/appengine/docs/java/cloud-sql/developers-guide

+0

고맙습니다 :

은 특정 API를 가지고 당신이, CloudSQL을 사용하지 않으면 https://developers.google.com/appengine/docs/java/jrewhitelist. 6 월에 시작할 때까지 재판을하지 않고도 문제를 해결할 수있는 다른 방법이 있습니까? 다른 방법이나 뭐? // Sami – user2123988

+0

먼저 AppEngine에 배포 할 예정입니까? –

+0

반드시 그런 것은 아닙니다. 가장 중요한 것은 gwt를 사용하고 어떤 식 으로든 내 mysql 데이터베이스에 연결할 수 있다는 것입니다. 얼마나 효과적인지는 중요하지 않습니다. :) – user2123988