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

Discussion :

Problème de classloader wilfly


Sujet :

Java EE

  1. #1
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    juillet 2004
    Messages
    4 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : juillet 2004
    Messages : 4 136
    Points : 9 010
    Points
    9 010
    Par défaut Problème de classloader wilfly
    J'ai trois projets

    demo-jca-api qui défini les interfaces
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    com.sample.adapter.HelloWorldConnectionFactory
    com.sample.adapter.HelloWorldConnection

    demo-jca qui implemente une resource JCA sur cette API
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    package com.sample.adapter.impl;
    import com.sample.adapter.HelloWorldConnectionFactory;
     
    public class HelloWorldConnectionFactoryImpl implements HelloWorldConnectionFactory
    {...

    enfin j'ai un war qui utilise cette ressource
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
          @Resource(name="java:/eis/HelloWorld")
          HelloWorldConnectionFactory helloFactory;  
          HelloWorldConnection hello = helloFactory.getConnection();
          return hello.helloWorld();

    La ressource se déploie correctement sous Wildfly (debug pas à pas avec éclipse tout est ok)
    le war démarre correctement.

    lorsque j'appelle la méthode avec la code ci-dessus
    j'ai l'exception suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Caused by: java.lang.ClassCastException: Cannot cast com.sample.adapter.impl.HelloWorldConnectionFactoryImpl to com.sample.adapter.HelloWorldConnectionFactory

    J'ai changé mon code pour le faire à l’ancienne et voir ce qu'il se passait exactement.
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
          Context context = new InitialContext();
          Object object = context.lookup("java:/eis/HelloWorld");
          Class<?> interf = object.getClass().getInterfaces()[0];
          if (HelloWorldConnectionFactory.class.isAssignableFrom(object.getClass())) {
             System.err.println("test");
          }
          HelloWorldConnectionFactory helloFactory = HelloWorldConnectionFactory.class.cast(object);  
          HelloWorldConnection hello = helloFactory.getConnection();
          return hello.helloWorld();

    en mode débug cela m'a permis de voir que HelloWorldConnectionFactory.class et interf sont toutes les deux com.sample.adapter.HelloWorldConnectionFactory, mais n'ont pas le même id
    et ne référence pas le même classloader.

    Cela parait logique puisque interf est chargé par le module rar alors que HelloWorldConnectionFactory est chargé par le war.

    mais du coup je ne trouve pas comment faire.

    tout cela n'est pas dans un EAR. mon besoin est de partager le RAR entre plusieurs applications.

    A+JYT

  2. #2
    Membre actif
    Homme Profil pro
    Architecte technique
    Inscrit en
    août 2006
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : août 2006
    Messages : 172
    Points : 264
    Points
    264
    Par défaut
    Ton interface se retrouve dans les 2 modules (rar et war) donc tu as 2 classloaders. Il ne faut pas inclure les classes du rar dans ton war. Il sera peut être nécessaire d'ajouter une dépendance vers le rar via un jboss-deployment-structure.xml (cf. http://www.mastertheboss.com/jboss-s...-structure-xml)

  3. #3
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    juillet 2004
    Messages
    4 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : juillet 2004
    Messages : 4 136
    Points : 9 010
    Points
    9 010
    Par défaut
    merci

    si j'ai bien compris

    je dois créer un fichier jboss-deployment-structure.xml dans mon rar
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <jboss-deployment-structure>
      <deployment>
          <dependencies>
             <module name="demo-jca-api-1.0.0-SNAPSHOT.jar" export="TRUE"/>
          </dependencies>
        </deployment>
    </jboss-deployment-structure>

    je dois créer un fichier jboss-deployment-structure.xml dans mon war
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <jboss-deployment-structure>
      <deployment>
          <dependencies>
             <module name="demo-jca-api-1.0.0-SNAPSHOT.jar"/>
          </dependencies>
        </deployment>
    </jboss-deployment-structure>

    Ainsi mon war va importer les définition du rar.

    je vais tester ça demain

    A+JYT

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    novembre 2006
    Messages
    6 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : novembre 2006
    Messages : 6 963
    Points : 8 934
    Points
    8 934
    Billets dans le blog
    1
    Par défaut
    Personnellement, pour la partie commune, je passerais par un module défini au niveau du répertoire modules de Wildfly.
    Tant qu'à faire, créer un nouveau répertoire "specifique" (au même niveau que system) et suivre la logique de définition (avec un sous répertoire main qui contiendra le jar et le fichier module.xml pour les dépendances et les options d'export).

    Ensuite, dans les projets utilisateurs, il n'y a plus qu'à ajouter l'attribut Dependencies dans le fichier Manifest.mf, comme par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Manifest-Version: 1.0 
    Dependencies: specifique.shared
    Pour cet exemple, nous aurions l'arborescence suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ...
    modules
           specifique
                 shared  
                      main
                            le-fichier.jar
                            module.xml
    le fichier module.xml
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?xml version="1.0" encoding="UTF-8"?> 
     
    <module name="specifique.shared" xmlns="urn:jboss:module:1.5"> 
     
        <resources> 
            <resource-root path="le-fichier.jar"/> 
        </resources> 
        <dependencies> 
            <module name="javax.api"/> (par exemple)
        </dependencies> 
    </module>
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    juillet 2004
    Messages
    4 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : juillet 2004
    Messages : 4 136
    Points : 9 010
    Points
    9 010
    Par défaut
    en passant par un module cela n'est plus compatible avrc d'autres serveurs jee.

    je souhaite que mon rar soit utilisable dans d'autres plateformes que wilfly.

  6. #6
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    juillet 2004
    Messages
    4 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : juillet 2004
    Messages : 4 136
    Points : 9 010
    Points
    9 010
    Par défaut
    Citation Envoyé par sekaijin Voir le message
    merci

    si j'ai bien compris

    je dois créer un fichier jboss-deployment-structure.xml dans mon rar
    ...
    je vais tester ça demain

    A+JYT
    Bon je viens de tester et cela ne fonctionne pas
    j'ai mis
    un fichier jboss-deployment-structure.xml dans mon rar
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <jboss-deployment-structure>
      <deployment>
          <dependencies>
             <module name="demo-jca-api-1.0.0-SNAPSHOT.jar" export="TRUE"/>
          </dependencies>
        </deployment>
    </jboss-deployment-structure>

    un fichier jboss-deployment-structure.xml dans mon war
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <jboss-deployment-structure>
      <deployment>
          <dependencies>
             <module name="demo-jca-api-1.0.0-SNAPSHOT.jar"/>
          </dependencies>
        </deployment>
    </jboss-deployment-structure>

    J'avais la même erreur due à deux fois la classe par deux classloaders.
    Du coup l'ai exclus demo-jca-api-1.0.0-SNAPSHOT.jar du war
    mais cette fois j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Caused by: java.lang.ClassNotFoundException: com.sample.adapter.HelloWorldConnectionFactory from [Module "deployment.work-manager-client.war" from Service Module Loader]
    Ne sachant pas très bien quoi mettre dans la dependencies j'ai aussi essayé avec le rar plutôt que le jar
    mais ça ne change rien.

    JCA est une norme n'y a-t-il pas une doc qui explique comment s'y prendre ?
    J'ai par le passé utilisé des rar pour se connecter à SAP ou à ActiveMQ sur d'autres plateforme et il n'y a avait pas descripteur propre à la plateforme
    J'installais mon rar sous WebSphère la console me permettais de configurer la connexion
    et je n'avais rien d'autre à faire pour l'utiliser que de dépendre de l'API

    Je ne comprends pas comment fonctionne Wilfly sur ce point.

    A+JYT

  7. #7
    Membre actif
    Homme Profil pro
    Architecte technique
    Inscrit en
    août 2006
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : août 2006
    Messages : 172
    Points : 264
    Points
    264
    Par défaut
    Regarde ce tutorial: http://www.mastertheboss.com/jboss-f...ector-tutorial
    Je pense que tu n'es pas loin d'y parvenir.

  8. #8
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    juillet 2004
    Messages
    4 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : juillet 2004
    Messages : 4 136
    Points : 9 010
    Points
    9 010
    Par défaut
    C'est justement de celui-la que je suis partit
    mais ça ne fonctionne pas

  9. #9
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    juillet 2004
    Messages
    4 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : juillet 2004
    Messages : 4 136
    Points : 9 010
    Points
    9 010
    Par défaut
    Bonjour

    Je n'ai toujours pas trouvé de solution.

    wildfly serait-il un serveur JEE qui n'implémente pas tout JEE ?

    Je ne trouve aucune solution.
    Tout cela me parait bien étrange.

    A+JYT

  10. #10
    Membre actif
    Homme Profil pro
    Architecte technique
    Inscrit en
    août 2006
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : août 2006
    Messages : 172
    Points : 264
    Points
    264
    Par défaut
    Wildfly est certifiée Java EE 8
    Mets ton code en ligne qu'on puisse y jeter un oeil.

  11. #11
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    juillet 2004
    Messages
    4 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : juillet 2004
    Messages : 4 136
    Points : 9 010
    Points
    9 010
    Par défaut
    bonjour

    je mets le zip en copie


    merci
    A+JYT
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Problème de classloading (?)
    Par Deaf dans le forum Général Java
    Réponses: 7
    Dernier message: 25/05/2012, 16h51
  2. Problème de ClassLoader dans l'utilisation d'un plugin Eclipse
    Par hanial dans le forum Eclipse Platform
    Réponses: 0
    Dernier message: 08/07/2011, 10h47
  3. Problème de ClassLoader
    Par yotta dans le forum NetBeans
    Réponses: 14
    Dernier message: 14/05/2011, 15h55
  4. Problème avec ClassLoader.getResource()
    Par julien_lesbegueries dans le forum Général Java
    Réponses: 3
    Dernier message: 05/03/2010, 17h02
  5. Problème de classLoader dans l'utilisation d'un plugin Eclipse
    Par Cluster37 dans le forum Eclipse Platform
    Réponses: 11
    Dernier message: 12/05/2008, 17h40

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