몇 시간 동안 내 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("&", "&").replaceAll("<", "<")
.replaceAll(">", ">");
}
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
합니다.
// 사미
고맙습니다 :
은 특정 API를 가지고 당신이, CloudSQL을 사용하지 않으면 https://developers.google.com/appengine/docs/java/jrewhitelist. 6 월에 시작할 때까지 재판을하지 않고도 문제를 해결할 수있는 다른 방법이 있습니까? 다른 방법이나 뭐? // Sami – user2123988
먼저 AppEngine에 배포 할 예정입니까? –
반드시 그런 것은 아닙니다. 가장 중요한 것은 gwt를 사용하고 어떤 식 으로든 내 mysql 데이터베이스에 연결할 수 있다는 것입니다. 얼마나 효과적인지는 중요하지 않습니다. :) – user2123988