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

Java EE Discussion :

[Problème] Ne comprend pas d'ou vient ce java.lang.NoSuchMethodException [EJB]


Sujet :

Java EE

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 18
    Points : 20
    Points
    20
    Par défaut [Problème] Ne comprend pas d'ou vient ce java.lang.NoSuchMethodException
    Bonjour,

    je vous énonce mon problème.
    Je travaille sur un service existant et lui ai affecté une nouvelle fonctionnalité (maMethode(Date, Date)).
    J'ai donc modifié toutes mes interfaces comme il se devait et j'ai implémenté mon business.
    Jusque là tout va bien. Mes tests d'intégration sur les controlleurs fonctionnent correctements. Mes tests unitaires aussi.

    Cependant, il existe un test de supervision (comprendre, des tests sur les services eux mêmes) qui était fonctionnel (du moins, je le pense puisque c'est l'architecte qui travaillait avec moi qui l'a mis en place. Et le connaissant, il a surement du le tester) mais qui ne l'est plus.
    En debuggant le test, je m'apercois que j'ai bien accès au service, mais que celui ci ne contient rien d'autre comme méthode que le toString() O_o !?!??

    Voici la stacktrace rencontrée, ici en essayant d'appeler la méthode getVersion() de mon service.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Exception in thread "main" java.lang.reflect.UndeclaredThrowableException
    	at $Proxy0.getVersion(Unknown Source)
    	at mon.package.frontend.control.MonitoringFrontEndServiceSupervisionForDevelopersMain.testMonitoringFrontendService(MonitoringFrontEndServiceSupervisionForDevelopersMain.java:54)
    	at mon.package.frontend.control.MonitoringFrontEndServiceSupervisionForDevelopersMain.main(MonitoringFrontEndServiceSupervisionForDevelopersMain.java:76)
    Caused by: java.lang.NoSuchMethodException: mon.package.monitoring.ejb.MonitoringFrontendService_gq9ya8_MonitoringFrontendServiceImpl_1033_WLStub.getVersion()
    	at java.lang.Class.getMethod(Class.java:1605)
    	at weblogic.ejb.container.internal.RemoteBusinessIntfProxy.getTargetMethod(RemoteBusinessIntfProxy.java:162)
    	at weblogic.ejb.container.internal.RemoteBusinessIntfProxy.invoke(RemoteBusinessIntfProxy.java:53)
    	... 3 more
    Voici le code de mon ejb et de ses interfaces si nécessaire:

    Interfaces
    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
     
    public interface DistributedComponent {
     
        /**
         * @param deeply indicates if a rapid test should be executed, or a more deeply test
         * @return true when the remote component works
         */
        boolean testMe(boolean deeply);
     
        /**
         * @return The version of the component
         */
        String getVersion();
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public interface MonitoringFrontendController {
     
        // ... other stuff
     
        /**
         * @param beginDate
         * @param endDate
         * @return blablabla javadoc
         */
        Map<String, Set<Object>> maMethode(Date beginDate, Date endDate);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public interface MonitoringFrontendService extends MonitoringFrontendController, DistributedComponent {
        // Just implements those two interfaces.
    }
    EJB
    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
     
    @Stateless(name = "MonitoringFrontendService")
    @Remote(MonitoringFrontendService.class)
    public class MonitoringFrontendServiceBean implements MonitoringFrontendService {
     
        private static final MonLogger LOGGER = new MonLogger(MonitoringFrontendServiceBean.class);
     
        private MonitoringFrontendController monitoringFrontendController;
     
        private RequestBusinessFunctionsController requestBusinessFunctionsController;
     
        private String version;
     
        /**
         * Ejb create.
         */
        @PostConstruct
        public void ejbCreate() {
            MonLogger.initMonLogger(2152, "monProjet", "NOT SET", "projetx-ejb");
            try {
     
                final BeanFactoryLocator bfl = ContextSingletonBeanFactoryLocator.getInstance("mon-fichier-de-config-spring.xml");
                final BeanFactoryReference bfr = bfl.useBeanFactory("MonitoringFrontendService");
     
                this.monitoringFrontendController = (MonitoringFrontendController) bfr.getFactory().getBean("monitoringFrontendController");
                // other stuff
     
                this.version = (String) bfr.getFactory().getBean("version");
            } catch (RuntimeException e) {
                LOGGER.error(e);
                throw e;
            }
     
            MonLogger.initMonLogger(2152, "monProjet", this.version, "projetx-ejb");
        }
     
        /**
         * @see mon.package.ejb.DistributedComponent#getVersion()
         */
        @Override
        @RolesAllowed({
            "Monitoring", "Manager"
        })
        public String getVersion() {
            return this.version;
        }
     
        [... autres méthodes ...]
     
        /**
         * @see mon.package.monitoring.control.MonitoringFrontendController#maMethode(java.util.Date, java.util.Date)
         */
        @Override
        @RolesAllowed("Manager")
        public Map<String, Set<Object>> maMethode(Date beginDate, Date endDate) {
            MonLogger.initMonLogger(2152, "monProjet", this.version, "projetx-ejb");
            return this.monitoringFrontendController.maMethode(beginDate, endDate);
        }
    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
     
    public class MonitoringFrontEndServiceSupervisionForDevelopersMain extends TEST_BasicServiceSupervision {
     
        private static final String SERVER_URL = "url_de_mon_serveur";
        private static final String LOOKUP_NAME = "ejb/Monitoring/MonitoringFrontendService";
    //    Used for security if necessary
    //    private static final String SECURITY_PRINCIPAL = "123456789@00@12345678910";
    //    private static final String SECURITY_CREDENTIALS = "my!credential";
     
     
        /**
         * Default constructor.
         */
        public MonitoringFrontEndServiceSupervisionForDevelopersMain() {
            super();
        } 
     
        private MonitoringFrontendService connectToEjb() {
            MonitoringFrontendService service = (MonitoringFrontendService) lookup();
            return service;
        }
     
        /**
         * This simple test assures the good work of the service.
         * 
         * @throws Exception
         */
        public void testMonitoringFrontendService() throws Exception {
            MonitoringFrontendService service = connectToEjb();
     
            System.out.println("Service version: " + service.getVersion());
     
            Calendar beginDate = Calendar.getInstance();
            Calendar endDate = Calendar.getInstance();
            beginDate.set(2010, 4, 1);
            endDate.set(2010, 9, 27);
            service.maMethode(beginDate.getTime(), endDate.getTime());
        }
     
        /**
         * Main method to test the service.
         * 
         * @param inArgs none required.
         * @throws Exception
         */
        public static void main(String[] inArgs) throws Exception {
            MonitoringFrontEndServiceSupervisionForDevelopersMain testService = new MonitoringFrontEndServiceSupervisionForDevelopersMain();
     
            testService.setServer(SERVER_URL);
            testService.setJndiName(LOOKUP_NAME);
     
            testService.testMonitoringFrontendService();
     
            System.out.println("Successfully executed!");
        }
    }
    (Pour des raisons de confidentialité, vous comprendrez que je ne mette pas tout le contenu des méthodes. Aussi la méthode testMe(), n'apparait pas ici au sein de l'ejb. Il se peut aussi que quelques erreurs se soient glisser dans les noms suite à la modification du code afin de pouvoir le publier ici.)

    Pensant à un problème de version, j'ai plusieurs fois redéployé, en supprimant l'ancien service.
    Ensuite, j'ai regarder dans la console si je n'avais pas 2 ear déployés sous 2 noms différents, mais non. A mon sens, aucun autre projet déployé sur le serveur pointé ne distribue ce service puisque je recois une exception (Exception in thread "main" java.util.MissingResourceException: Unable to resolve 'ejb.Monitoring.MonitoringFrontendService'.) une fois le service désinstallé.

    Une idée?

  2. #2
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2007
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Août 2007
    Messages : 197
    Points : 246
    Points
    246
    Par défaut
    ah mon avis ton stub n'a pas été refabriqué. vérifies bien que tu as le bon squelette côté client.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 18
    Points : 20
    Points
    20
    Par défaut
    Pour ceux qui veulent la solution, il s'agit juste des generics donnés dans l'interface.

    Il faut enlever le typage du generic au sein des interfaces.
    C'est tout! Le problème venait de là.

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

Discussions similaires

  1. Je ne comprends pas ce que vient faire Ln()
    Par djiga4me dans le forum API, COM et SDKs
    Réponses: 10
    Dernier message: 08/07/2013, 10h21
  2. Réponses: 7
    Dernier message: 13/12/2011, 12h46
  3. Réponses: 15
    Dernier message: 20/01/2011, 15h47
  4. Problème Hors Limite que je ne comprends pas
    Par Bleys dans le forum Delphi
    Réponses: 2
    Dernier message: 11/01/2007, 15h42
  5. [JDOM] Probléme que je ne comprend pas
    Par kaninama dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 23/05/2006, 15h01

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