Web services et Bases de donnees

cs_barbiess Messages postés 5 Date d'inscription jeudi 1 juillet 2010 Statut Membre Dernière intervention 12 novembre 2010 - 12 nov. 2010 à 12:24
cs_ultrarich2001 Messages postés 26 Date d'inscription mercredi 4 juillet 2012 Statut Membre Dernière intervention 7 mars 2018 - 9 oct. 2012 à 11:27
Bonjour je decouvre J2EE depuis quelques jours , devant ecrire un web
service.
Mes web service ont besoin d'acceder a une base de donnee Mysql.
Mon application possede des operations tres basiques, ecrire sur une
base et faire des requettes, puis revoyer les resultats.
En J2SE je vois tres bien comment faire ca simplement en toute
simplicite avec JDBC.
Ici je travaille avec Netbeans 6.9.1 et le serveur d'application GlassFish,
et j'essaye de voir si il est utile d'utiliser toutes les technologies
de J2EE 5.
Ma question concerne la couche entre mes classes de web services et
l'acces BD.
je fais un acces classique via JDBC ou bien est-il utile d'utiliser des
choses tels que les "Entity Beans".
je sais pas je met quoi dans le code de web service pour avoir une connection avec ma base de donnée
Voila donc la question sur le fond de mon probleme:
Quelle est la facon la plus propre permetant de gerer les acces a une
base Mysql sachant que mon web service est implemente sur GlassFish???
Merci de votre aide,

9 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
12 nov. 2010 à 13:28
Salut,

Tout dépend de tes besoins et de la complexité du projet : les EJB sont pratiques pour les grosses applications web avec des centaines de tables et des relations nombreuses et complexes entre les tables (qui seront alors converties en objet). Les ejb simplifie beaucoup l'accès la base vu que ca te permet de ne saisir aucune requête SQL, tu récupère des objets, tu manipules les objets, et c'est les EJB qui gèrent la persistance.

Si ton but est juste de faire quelques insert, update et select sur quelques tables ayant 2 à 3 relations entre elles, et que le passage à une conception objet ne t'apporte rien, pas besoin de t'embarrasser par les ejb. L'utilisation de JDBC sera suffisant et sera plus optimisé si tu écrits des requêtes efficaces.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0
cs_barbiess Messages postés 5 Date d'inscription jeudi 1 juillet 2010 Statut Membre Dernière intervention 12 novembre 2010
12 nov. 2010 à 21:49
Bonjour
je veux faire juste un mise à jour et les paramètres sont fournit par l'utilisateur.
je veux savoir le morceaux de code qui permet de se connecter à la base de données
vraiment je suis bloqué dans cette etapes depuis quelques jours
package com.MyTest;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
//import java.sql.*;
/**
 *
 * @author welhezi
 */
@WebService()
public class WSTestsql {

    /**
     * Web service operation
     */
    @WebMethod(operationName = "mod_pw")
    public String mod_pw(@WebParam(name = "ident")
    String ident, @WebParam(name = "anciennepw")
    String anciennepw, @WebParam(name = "nouvpw1")
    String nouvpw1, @WebParam(name = "nouvpw2")
    String nouvpw2)
    {
        //TODO write your implementation code here:
       String rq, res="erreur ";
Connection con =null;
Statement stmt=null;
ResultSet rs=null;
String url, pilote ;
        int  mod= 0;

try{
pilote ="com.mysql.jdbc.Driver";

Class.forName(pilote);

}
catch(ClassNotFoundException e)
{



}
try{
url="jdbc:mysql://localhost:3306/test";
   con=DriverManager.getConnection(url,"adminh","admint");
}catch(Exception e)
{}



                if(nouvpw2.equals(nouvpw1))
                		{
                	    rq="update utilisateurs set mot_pass='"+nouvpw1 +"' where identifiant='"+ident+"' and mot_pass='"+ anciennepw+"'";
                	     try{

                       stmt=con.createStatement();
 mod = stmt.executeUpdate(rq);
if(mod>0)
res="félicitation , vous avez changer votre mot de passe";
else
                  res="Le changement de mot de passe a échoué. ";

}catch(SQLException e)
{

}
                		}

try{
stmt.close();
System.out.println("close stmt");
con.close();
System.out.println("close con");
}catch (SQLException e)
{}
return res;

    }

}


0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
12 nov. 2010 à 21:52
Salut,

Est-ce que tu as déployé la bibliothèque JDBC de MySQL sur ton serveur glassfish ?

Quelles sont les exceptions qui sont levées par ton code ?
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0
cs_barbiess Messages postés 5 Date d'inscription jeudi 1 juillet 2010 Statut Membre Dernière intervention 12 novembre 2010
12 nov. 2010 à 22:40
oui j'ai deployé la bibliothèque JDBC de MySQL sur ton serveur glassfish


les exeption sont :

[b]Service invocation threw an exception with message : null; Refer to the server log for more details


Exceptions details : java.lang.reflect.InvocationTargetException/b

javax.servlet.ServletException: java.lang.reflect.InvocationTargetException at org.glassfish.webservices.monitoring.WebServiceTesterServlet.doPost(WebServiceTesterServlet.java:326) at org.glassfish.webservices.monitoring.WebServiceTesterServlet.invoke(WebServiceTesterServlet.java:102) at org.glassfish.webservices.JAXWSServlet.doPost(JAXWSServlet.java:137) at javax.servlet.http.HttpServlet.service(HttpServlet.java:754) at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641) at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97) at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185) at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226) at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165) at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791) at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693) at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954) at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170) at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135) at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102) at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88) at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76) at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53) at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57) at com.sun.grizzly.ContextTask.run(ContextTask.java:69) at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330) at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309) at java.lang.Thread.run(Thread.java:662) Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.glassfish.webservices.monitoring.WebServiceTesterServlet.doPost(WebServiceTesterServlet.java:297) ... 28 more Caused by: javax.xml.ws.soap.SOAPFaultException: java.lang.NullPointerException at com.sun.xml.ws.fault.SOAP11Fault.getProtocolException(SOAP11Fault.java:189) at com.sun.xml.ws.fault.SOAPFaultBuilder.createException(SOAPFaultBuilder.java:130) at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:119) at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:89) at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:140) at $Proxy222.hello(Unknown Source) ... 33 more Caused by: java.lang.NullPointerException at testsw.testWebService.hello(testWebService.java:82) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.glassfish.webservices.InstanceResolverImpl$1.invoke(InstanceResolverImpl.java:137) at com.sun.xml.ws.server.InvokerTube$2.invoke(InvokerTube.java:146) at com.sun.xml.ws.server.sei.EndpointMethodHandler.invoke(EndpointMethodHandler.java:257) at com.sun.xml.ws.server.sei.SEIInvokerTube.processRequest(SEIInvokerTube.java:95) at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:629) at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:588) at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:573) at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:470) at com.sun.xml.ws.api.pipe.helper.AbstractTubeImpl.process(AbstractTubeImpl.java:112) at org.glassfish.webservices.MonitoringPipe.process(MonitoringPipe.java:138) at com.sun.xml.ws.api.pipe.helper.PipeAdapter.processRequest(PipeAdapter.java:115) at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:629) at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:588) at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:573) at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:470) at com.sun.xml.ws.api.pipe.helper.AbstractTubeImpl.process(AbstractTubeImpl.java:112) at com.sun.enterprise.security.webservices.CommonServerSecurityPipe.processRequest(CommonServerSecurityPipe.java:195) at com.sun.enterprise.security.webservices.CommonServerSecurityPipe.process(CommonServerSecurityPipe.java:127) at com.sun.xml.ws.api.pipe.helper.PipeAdapter.processRequest(PipeAdapter.java:115) at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:629) at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:588) at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:573) at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:470) at com.sun.xml.ws.server.WSEndpointImpl$2.process(WSEndpointImpl.java:295) at com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:519) at com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:288) at com.sun.xml.ws.transport.http.servlet.ServletAdapter.handle(ServletAdapter.java:143) at org.glassfish.webservices.JAXWSServlet.doPost(JAXWSServlet.java:149) ... 26 more
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
12 nov. 2010 à 22:50
Salut,

Attention à tes blocs catch : ne rien faire dans un bloc catch te masque les erreurs, et t'induit donc toi-même en erreur en pensant que tout se passe bien...

Mets au strict minimum un printStackTrace de ton exception histoire de voir les exceptions qui se délenchent.

______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0
cs_barbiess Messages postés 5 Date d'inscription jeudi 1 juillet 2010 Statut Membre Dernière intervention 12 novembre 2010
12 nov. 2010 à 22:50
voici un imprime ecran des anglets services et projets
/url/img
0
cs_barbiess Messages postés 5 Date d'inscription jeudi 1 juillet 2010 Statut Membre Dernière intervention 12 novembre 2010
12 nov. 2010 à 23:18
oui je mets un printStackTrace dans les exceptions et ca change rien
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
13 nov. 2010 à 07:52
Salut,

Je te dis pas que mettre des printstacktrace te réglera ton problème, je te dis juste que de ne rien mettre dans un bloc catch t'induit en erreur : si une exception se déclenche, tu ne sais pas qu'elle se déclenche si tu ne l'affiche pas.

Dans la stacktrace que tu nous as affiché précédemment, il ne fait nulle part référence à l'une de tes classes, donc j'en déduit que la stacktrace affichée est une conséquence d'une exception déclenchée dans une partie de ton code, maintenant il ne tiens qu'à toi de mettre des printstacktrace partout dans tes blocs catch dans tout ton code, et de scruter la sortie standard de ton ide pour voir quand et où une exception se déclenche.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0
cs_ultrarich2001 Messages postés 26 Date d'inscription mercredi 4 juillet 2012 Statut Membre Dernière intervention 7 mars 2018
9 oct. 2012 à 11:27
Salut , j'ai un souci avec mon applet kan je le lance j'ai cette erreur
MissingFieldException[ Il manque le champ obligatoire suivant dans le fichier de lancement : <jnlp>main-class]
at com.sun.javaws.jnl.XMLUtils.getRequiredAttribute(Unknown Source)
at com.sun.javaws.jnl.XMLFormat.buildAppletDesc(Unknown Source)
at com.sun.javaws.jnl.XMLFormat.parse(Unknown Source)
at com.sun.javaws.jnl.LaunchDescFactory.buildDescriptor(Unknown Source)
at com.sun.javaws.jnl.LaunchDescFactory.buildDescriptor(Unknown Source)
at com.sun.javaws.jnl.LaunchDescFactory.buildDescriptor(Unknown Source)
at com.sun.javaws.Launcher.updateFinalLaunchDesc(Unknown Source)
at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
at com.sun.javaws.Launcher.launch(Unknown Source)
at com.sun.javaws.Main.launchApp(Unknown Source)
at com.sun.javaws.Main.continueInSecureThread(Unknown Source)
at com.sun.javaws.Main$1.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
comment faire ? merci pour votre aide
0
Rejoignez-nous