Bonjour à tous,

Je cherche désespérément à connecter une base MySql à une application GWT en utilisant RPC et JDBC.

Voilà ce que j'ai testé. J'ai créé une application avec le plugin d'eclipse pour GWT 1.6. Cette application tourne correctement. J'ai ensuite modifié le l'implantation du service pour y intégrer les appels à la base mysql. Et là ça ne fonctionne pas.

Si je compile et exécute une simple classe java en utilisant les lignes de commande, cela fonctionne parfaitement. Si je fais ma même chose dans eclipse cela marche aussi.

Mais le code suivant tournant avec GWT et Tomcat ne fonctionne pas. Pourtant cela semble en tout point identique aux exemples nombreux trouvés sur le net.

La bibliothèque mysql-connector-java-5.1.7-bin.jar est bien dans le build path du projet.

Quelqu'un peut il m'aider ? Je suppose que c'est un paramétrage quelconque, mais lequel ?

Merci d'avance

Roger

PS : Si au passage quelqu'un peux me dire aussi comment «*développer*» les «*...25 more*» des logs de la console. Car peut être que l'explication est tout simplement là dedans.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package test.server;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
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) {
		testConnection();
		String serverInfo = getServletContext().getServerInfo();
		String userAgent = getThreadLocalRequest().getHeader("User-Agent");
		return "Hello, " + input + "!<br><br>I am running " + serverInfo
				+ ".<br><br>It looks like you are using:<br>" + userAgent;
 
	}
	private void testConnection() {
 
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
 
        try {
 
            /*  Register the driver
		The following Class.forName() statement is not necessary if using Java SE 6 (1.6) or later */
 
            Class.forName("com.mysql.jdbc.Driver").newInstance();
 
            try {
 
		/* Get a connection to the database */
                conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testbase?" + "user=usertestbase&password=pass");
 
                try {
 
                    stmt = conn.createStatement();
 
		    /* Execute the query */
                    rs = stmt.executeQuery("SELECT * FROM table1");
 
                    /* The following 3 lines are for finding out the size of the result set */
                    rs.last();
                    int rowCount = rs.getRow();
                    rs.beforeFirst();
 
                    System.out.println("Retrieved " + rowCount + " row(s).\n");
 
                    System.out.println("CityName\n--------");
 
                    /* Retrieve the data from the result set */
                    while (rs.next()) {
                        String name = rs.getString("name");
                        System.out.println(name);
                    }
 
                } finally {
                    /* Release the resources */
                    if (rs != null) {
                        try {
                            rs.close();
                        } catch (SQLException sqlEx) {
                               System.out.println("SQLException: " + sqlEx.getMessage());
                        }
                        rs = null;
                    }
 
                    if (stmt != null) {
                        try {
                            stmt.close();
                        } catch (SQLException sqlEx) {
                               System.out.println("SQLException: " + sqlEx.getMessage());
                        }
 
                        stmt = null;
                    }
 
                    if (conn != null) {
                        try {
                            conn.close();
                        } catch (SQLException sqlEx) {
                               // Ignore
                        }
 
                        conn = null;
                    }
 
                }
 
            } catch (SQLException ex) {
                System.out.println("SQLException: " + ex.getMessage());
                System.out.println("SQLState: " + ex.getSQLState());
                System.out.println("VendorError: " + ex.getErrorCode());
            }
 
        } catch (Exception ex) {
            System.out.println("Exception: " + ex.getMessage());        
        }
 
	}
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
The server is running at http://localhost:8080/
15 juin 2009 12:09:06 com.google.appengine.tools.development.ApiProxyLocalImpl log
SEVERE: [1245067746141000] javax.servlet.ServletContext log: Exception while dispatching incoming RPC call
com.google.gwt.user.server.rpc.UnexpectedException: Service method 'public abstract java.lang.String test.client.GreetingService.greetServer(java.lang.String)' threw an unexpected exception: java.lang.ExceptionInInitializerError
	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.ExceptionInInitializerError
	at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:282)
	at java.sql.DriverManager.getConnection(Unknown Source)
	at java.sql.DriverManager.getConnection(Unknown Source)
	at test.server.GreetingServiceImpl.testConnection(GreetingServiceImpl.java:43)
	at test.server.GreetingServiceImpl.greetServer(GreetingServiceImpl.java:20)
	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
Caused by: java.security.AccessControlException: access denied (java.lang.RuntimePermission modifyThreadGroup)
	at java.security.AccessControlContext.checkPermission(Unknown Source)
	at java.security.AccessController.checkPermission(Unknown Source)
	at java.lang.SecurityManager.checkPermission(Unknown Source)
	at com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkPermission(DevAppServerFactory.java:122)
	at com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkAccess(DevAppServerFactory.java:149)
	at java.lang.ThreadGroup.checkAccess(Unknown Source)
	at java.lang.Thread.init(Unknown Source)
	at java.lang.Thread.<init>(Unknown Source)
	at java.util.TimerThread.<init>(Unknown Source)
	at java.util.Timer.<init>(Unknown Source)
	at java.util.Timer.<init>(Unknown Source)
	at com.mysql.jdbc.ConnectionImpl.<clinit>(ConnectionImpl.java:208)
	... 35 more