IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GWT et Vaadin Java Discussion :

Problème RPC MySQL


Sujet :

GWT et Vaadin Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Problème RPC MySQL
    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

  2. #2
    Rédacteur
    Avatar de benwit
    Profil pro
    dev
    Inscrit en
    Septembre 2004
    Messages
    1 676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 676
    Points : 4 265
    Points
    4 265
    Par défaut
    Bonsoir,
    Dans la trace, je vois :
    com.google.appengine.tools.development.ApiProxyLocalImpl
    ...
    com.google.apphosting.utils.jetty.
    Ces lignes indiquent que des classes de Google App Engine (GAE) sont utilisées.

    Si tu veux créer seulement une application GWT, lorsque tu crées une application web avec le plugin GAE/GWT, il faut décocher l'option GAE.
    Tu peux essayer de créer un nouveau projet sans l'option GAE, remettre le driver java MySQL dans ton classpath et ton code de test dans le service.

    Si tu veux créer une application GAE/GWT, tu ne peux pas attaquer une base MySQL dans la partie serveur d'une application déployée sous GAE car c'est pour l'instant interdit d'utiliser un autre protocole que http.

    Tout le monde savait que c'était impossible. Il est venu un imbécile qui ne le savait pas et qui l'a fait. Marcel PAGNOL
    On ne savait pas que c'était impossible, alors on l'a fait. John Fitzgerald KENNEDY.
    L'inexpérience est ce qui permet à la jeunesse d'accomplir ce que la vieillesse sait impossible. Paul (Tristant) BERNARD
    La meilleure façon de prédire l'avenir, c'est de l'inventer.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par benwit Voir le message
    Bonsoir,
    Dans la trace, je vois :

    Ces lignes indiquent que des classes de Google App Engine (GAE) sont utilisées.

    Si tu veux créer seulement une application GWT, lorsque tu crées une application web avec le plugin GAE/GWT, il faut décocher l'option GAE.
    Tu peux essayer de créer un nouveau projet sans l'option GAE, remettre le driver java MySQL dans ton classpath et ton code de test dans le service.

    Si tu veux créer une application GAE/GWT, tu ne peux pas attaquer une base MySQL dans la partie serveur d'une application déployée sous GAE car c'est pour l'instant interdit d'utiliser un autre protocole que http.
    Merci beaucoup oh seigneur. Ca fait quelques jours que je cherche et tu me libère de ce poids. Je n'aurais pas trouvé tout seul.

    Merci beaucoup et bonne journée.

    Roger

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Bonsoir a tous,
    dit moi Roger, comment fais tu ton appel a ton RPC?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public interface GreetingService extends RemoteService {
    	String greetServer(String name);
            ??ajout de ta methode testConnection();?
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public interface GreetingServiceAsync {
    	void greetServer(String input, AsyncCallback<String> callback);
     
    	void testConnection();
     
    }

    et dans ta page qui apel le service? j'arrive pas a l'appelé correctement.
    j'ai vraiment besoin d'aide
    merci d'avance

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Coté client j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    package fr.solutions.sarl.gwt.TestGWT.client;
     
    import com.google.gwt.user.client.rpc.RemoteService;
    import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;
     
    /**
     * The client side stub for the RPC service.
     */
    @RemoteServiceRelativePath("mysql")
    public interface MySqlService extends RemoteService {
    	String testConnection();
    }
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    package fr.solutions.sarl.gwt.TestGWT.client;
     
    import com.google.gwt.user.client.rpc.AsyncCallback;
     
    /**
     * The async counterpart of <code>GreetingService</code>.
     */
    public interface MySqlServiceAsync {
    	void testConnection(AsyncCallback<String> callback);
    }
    Côté serveur j'ai :

    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
    package fr.solutions.sarl.gwt.TestGWT.server;
     
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;
     
    import com.google.gwt.user.server.rpc.RemoteServiceServlet;
     
    import fr.solutions.sarl.gwt.TestGWT.client.MySqlService;
     
     
    /**
     * The server side implementation of the RPC service.
     */
    public class MySqlServiceImpl extends RemoteServiceServlet implements MySqlService {
     
    	/**
             * 
             */
    	private static final long serialVersionUID = 1L;
    	private int i;
     
    		public String testConnection() {
     
    	    Connection conn	= null;
     
    	    String url 		= "jdbc:mysql://localhost:3306/";
     
    	    String db 		= "maBase";
    	    String driver 	= "com.mysql.jdbc.Driver";
    	    String user 	= "user";
    	    String pass 	= "pass";
     
    	    try {
     
    	    	Class.forName(driver).newInstance();
     
    		    try{
    				System.out.println(url+db);
    				System.out.println(user);
    				System.out.println(pass);
    				conn = DriverManager.getConnection(url+db,user, pass);
     
    				String query = "SELECT * FROM maTable;";
     
    		        Statement select = null;
    				try {
    					select = conn.createStatement();
    				} catch (Exception e1) {
    					System.out.println(e1.getMessage());
    					e1.printStackTrace();
    				}
    		        try {
    		            ResultSet result = select.executeQuery(query);
     
    		            result.last();
    		            int rowCount = result.getRow();
    		            result.beforeFirst();
     
    		            System.out.println("Retrieved " + rowCount + " row(s).\n");
    		            i = 0;
    		            while (result.next()) {
    		                String name = result.getString("monChamp");
    		                System.out.println(name);
     
    		                i++;
    		            }
    		            String s = Integer.toString(i);
    			    	System.out.println(s);
     
    		            // clean up
    		            result.close();
    		            conn.close();
     
    		        } catch(Exception e) {
     
    		        	System.err.println("Mysql Statement Error: " + query);
    		        	e.printStackTrace();
     
    		        }
    }
    	    	catch(Exception sqle){
    	    		System.out.println("getConnectionError");
    	    		System.out.println(sqle.getMessage());
    	    	}
    	    } catch (Exception e) {
     
    	    	System.out.println(e.getMessage());
    	    }
     
    		return "";
    		}
    }
    Voili voilà

    Bon courage

    Roger

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème php mysql
    Par ph_anrys dans le forum Requêtes
    Réponses: 15
    Dernier message: 02/03/2006, 15h22
  2. problème avec MySql
    Par cescu dans le forum Requêtes
    Réponses: 4
    Dernier message: 20/02/2006, 12h18
  3. Problème accent mysql
    Par staive dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 01/02/2006, 19h11
  4. [JDBC]Problème Accent MySQL depuis DB browser dans eclipse
    Par chpruvos dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 26/08/2005, 14h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo