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

Langage Java Discussion :

Problème de compréhension classpath avec RMI


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 75
    Par défaut Problème de compréhension classpath avec RMI
    Bonjour à tous,


    Quelqu'un peut m'expliquer svp le pourquoi de mon problème lié au classpath. Je vous explique ma configuration :

    J'ai un script qui exécute la classe RegisterServices. Cette dernière ne fait que des Naming.rebind :

    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
     
    // This class registers the three RMI services of the Petstore. 
     
    public final class RegisterServices implements RMIConstant {
     
        public static void main(final String[] args) {
     
            try {
     
                Naming.rebind(CATALOG_SERVICE, new CatalogService());
     
                Naming.rebind(CUSTOMER_SERVICE, new CustomerService());
     
                Naming.rebind(ORDER_SERVICE, new OrderService());
     
            } catch (Exception e) {
            }
        }
    }
    L'appel à cette classe se fait depuis un script shell qui est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #!/bin/sh
    export MYSQL_HOME=/usr/bin/
    export DEPLOY_DIR=../build
    export CLASS_DIR=/home/TP05/classes
    export CLASSPATH=$CLASS_DIR:$MYSQL_HOME/lib/mysql-connector-java-5.1.5-bin.jar
     
    java -cp $CLASSPATH RegisterServices
    Si je supprime le chemin vers mysql du classpath , mon client ne pourra plus acceder à la base de données.

    Pourquoi ?

    Merci pour vos réponses

    Bonne soirée.

  2. #2
    Membre Expert
    Avatar de hasalex
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 879
    Par défaut
    Une stacktrace pourrait nous aider. Je dirais que si tu as des problèmes, c'est dans un constructeur d'une de tes classes *Service.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 75
    Par défaut
    merci hasalex,

    Comme j'utilise log4j, voici les logs de l'application au moment ou je cherche à afficher la liste de mes clients :

    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
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE log SYSTEM "logger.dtd">
    <log>
    <record>
      <date>2009-02-02T23:33:52</date>
      <millis>1233614032445</millis>
      <sequence>0</sequence>
      <logger>com.yaps.petstore</logger>
      <level>FINER</level>
      <class>com.yaps.petstore.server.util.persistence.AbstractDataAccessObject</class>
      <method>static</method>
      <thread>10</thread>
      <message>THROW</message>
      <exception>
        <message>java.lang.ClassNotFoundException: com.mysql.jdbc.Driver</message>
        <frame>
          <class>java.net.URLClassLoader$1</class>
          <method>run</method>
          <line>200</line>
        </frame>
        <frame>
          <class>java.security.AccessController</class>
          <method>doPrivileged</method>
        </frame>
        <frame>
          <class>java.net.URLClassLoader</class>
          <method>findClass</method>
          <line>188</line>
        </frame>
        <frame>
          <class>java.lang.ClassLoader</class>
          <method>loadClass</method>
          <line>307</line>
        </frame>
        <frame>
          <class>sun.misc.Launcher$AppClassLoader</class>
          <method>loadClass</method>
          <line>301</line>
        </frame>
        <frame>
          <class>java.lang.ClassLoader</class>
          <method>loadClass</method>
          <line>252</line>
        </frame>
        <frame>
          <class>java.lang.ClassLoader</class>
          <method>loadClassInternal</method>
          <line>320</line>
        </frame>
        <frame>
          <class>java.lang.Class</class>
          <method>forName0</method>
        </frame>
        <frame>
          <class>java.lang.Class</class>
          <method>forName</method>
          <line>169</line>
        </frame>
        <frame>
          <class>com.yaps.petstore.server.util.persistence.AbstractDataAccessObject</class>
          <method>&lt;clinit&gt;</method>
          <line>35</line>
        </frame>
        <frame>
          <class>com.yaps.petstore.server.service.catalog.CatalogService</class>
          <method>&lt;clinit&gt;</method>
          <line>29</line>
        </frame>
        <frame>
          <class>com.yaps.petstore.server.RegisterServices</class>
          <method>main</method>
          <line>30</line>
        </frame>
      </exception>
    </record>
    <record>
      <date>2009-02-02T23:33:52</date>
      <millis>1233614032560</millis>
      <sequence>1</sequence>
      <logger>sun.rmi.transport.tcp</logger>
      <level>FINE</level>
      <class>sun.rmi.transport.tcp.TCPEndpoint</class>
      <method>&lt;clinit&gt;</method>
      <thread>10</thread>
      <message>main: localHostKnown = false, localHost = 127.0.0.1</message>
    </record>
    Merci et bonne soirée

  4. #4
    Membre Expert
    Avatar de hasalex
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 879
    Par défaut
    Des traces en XML, ce n'est pas ce qu'il y a de plus lisible, mais on peut quand même voir qui essaie d'accéder à la base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        <frame>
          <class>com.yaps.petstore.server.service.catalog.CatalogService</class>
          <method>&lt;clinit&gt;</method>
          <line>29</line>
        </frame>
    C'est dans ce constructeur que tu as besoin du driver...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 75
    Par défaut
    Bonjour Hasalex,

    Voici la trace complète :

    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
     
    com.yaps.petstore.common.exception.DataAccessException: Cannot get data from the database
    	at com.yaps.petstore.server.util.persistence.AbstractDataAccessObject.selectAll(AbstractDataAccessObject.java:150)
    	at com.yaps.petstore.server.service.customer.CustomerService.findCustomers(CustomerService.java:143)
    	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 sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305)
    	at sun.rmi.transport.Transport$1.run(Transport.java:159)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
    	at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
    	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
    	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    	at java.lang.Thread.run(Thread.java:619)
    	at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255)
    	at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233)
    	at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:142)
    	at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:178)
    	at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:132)
    	at $Proxy0.findCustomers(Unknown Source)
    	at com.yaps.petstore.common.delegate.CustomerDelegate.findCustomers(CustomerDelegate.java:59)
    	at com.yaps.petstore.client.ui.swing.list.ListCustomerFrame.getData(ListCustomerFrame.java:33)
    	at com.yaps.petstore.client.ui.swing.list.AbstractListFrame.initComponents(AbstractListFrame.java:33)
    	at com.yaps.petstore.client.ui.swing.list.AbstractListFrame.<init>(AbstractListFrame.java:23)
    	at com.yaps.petstore.client.ui.swing.list.ListCustomerFrame.<init>(ListCustomerFrame.java:17)
    	at com.yaps.petstore.client.ui.swing.Menu.menuListCustomerActionPerformed(Menu.java:206)
    	at com.yaps.petstore.client.ui.swing.Menu.access$3(Menu.java:205)
    	at com.yaps.petstore.client.ui.swing.Menu$4.actionPerformed(Menu.java:95)
    	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
    	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
    	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
    	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
    	at javax.swing.AbstractButton.doClick(AbstractButton.java:357)
    	at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1225)
    	at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1266)
    	at java.awt.Component.processMouseEvent(Component.java:6134)
    	at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
    	at java.awt.Component.processEvent(Component.java:5899)
    	at java.awt.Container.processEvent(Container.java:2023)
    	at java.awt.Component.dispatchEventImpl(Component.java:4501)
    	at java.awt.Container.dispatchEventImpl(Container.java:2081)
    	at java.awt.Component.dispatchEvent(Component.java:4331)
    	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4301)
    	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3965)
    	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3895)
    	at java.awt.Container.dispatchEventImpl(Container.java:2067)
    	at java.awt.Window.dispatchEventImpl(Window.java:2458)
    	at java.awt.Component.dispatchEvent(Component.java:4331)
    	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
    	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
    	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
    	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
    Caused by: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/petstoreDB
    	at java.sql.DriverManager.getConnection(DriverManager.java:602)
    	at java.sql.DriverManager.getConnection(DriverManager.java:185)
    	at com.yaps.petstore.server.util.persistence.AbstractDataAccessObject.getConnection(AbstractDataAccessObject.java:324)
    	at com.yaps.petstore.server.util.persistence.AbstractDataAccessObject.selectAll(AbstractDataAccessObject.java:133)
    	at com.yaps.petstore.server.service.customer.CustomerService.findCustomers(CustomerService.java:143)
    	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 sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305)
    	at sun.rmi.transport.Transport$1.run(Transport.java:159)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
    	at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
    	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
    	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    	at java.lang.Thread.run(Thread.java:619)
    La question est toujours là : Pourquoi le chemin vers le driver mysql doit être indiqué dans le script qui lance le registerServices ?

    Merci pour vos réponses.

  6. #6
    Membre Expert
    Avatar de hasalex
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 879
    Par défaut
    Ton application a besoin d'un driver parce qu'elle accède à une base de données !!! Plus précisément, elle a besoin d'un driver mysql parce qu'elle accès à la base de données jdbc:mysql://localhost:3306/petstoreDB.

    D'après ta trace, le client a appelé findCustomers sur un objet distant de type CustomerService. Cette méthode appelle AbstractDataAccessObject.selectAll qui appelle AbstractDataAccessObject.getConnection. C'est dans cette dernière méthode que se trouve le code de connexion.

    Comme la méthode s'exécute coté serveur, le driver doit être dans le classpath au lancement du serveur, c'est à dire de la classe RegisterService.

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

Discussions similaires

  1. Problème de compréhension avec MoviClip
    Par jpboogie dans le forum ActionScript 1 & ActionScript 2
    Réponses: 0
    Dernier message: 11/04/2009, 15h01
  2. Réponses: 2
    Dernier message: 14/12/2007, 01h47
  3. Problème avec RMI connection avec JBOSS
    Par nakata77 dans le forum Wildfly/JBoss
    Réponses: 1
    Dernier message: 29/01/2007, 23h25
  4. Réponses: 17
    Dernier message: 22/01/2007, 13h34
  5. Réponses: 5
    Dernier message: 18/10/2006, 16h20

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