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 :

EJB @Remote => EJB @Local


Sujet :

Java EE

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 139
    Points : 35
    Points
    35
    Par défaut EJB @Remote => EJB @Local
    Bonjour,

    Après m'être documenté comme je pouvais là dessus, je cherche à repasser les EJB @Remote d'une appli JEE en EJB @Local.
    L'application suit la structure Javascript<=>Servlets<=>EJB, et tout est déployé dans le même EAR, donc le passage en local est donc tout à fait possible et conseillé pour un soucis d'optimisation.
    Le projet est constitué de 3 JAR : 1 pour les Sverlets/Javascript, un autre pour les interfaces des EJB, et un autre pour les EJB.

    Le problème est que concrètement je ne sais pas quoi changer à part les annotations.

    Voici l'exemple d'un 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
    import interfaces.DataBeanRemote;
    import interfaces.EtudeBeanRemote;
    ...
     
     
    @Stateless
    @Remote(value=XXXBeanRemote.class)
    public class DataBean extends BaseBean implements DataBeanRemote {
     
        public EDT createEDT(...) throws NamingException {
            Context ctx = new InitialContext();
            EtudeBeanRemote et = (EtudeBeanRemote)ctx.lookup(EtudeBeanRemote.class.getName());
            donneeTierce = et.getDonnee();
    ...
    Comme je le disais les interfaces sont tous situés dans un JAR
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public interface EDTBeanRemote {
    ...
    Dans ce JAR sont également placés tous les objets transmis entre les Servlets et les EJB, objets tous implements Serializable bien sûr

    Je sais qu'il faut modifié toutes les annotations @Remote en @Local, et qu'il faut sans doute supprimer tous les implements Serializable des objets, mais que faire d'autres ? Est ce aussi simple que ça ?

    Merci !

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 139
    Points : 35
    Points
    35
    Par défaut
    Quelqu'un pour m'aiguiller SVP ?

    Est ce qu'un EJB peut accéder au méthodes d'un autres EJB avec une simple injection @EJB ?

    Merci !

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 139
    Points : 35
    Points
    35
    Par défaut
    Bon j'ai mis à jour mon appli mais ça ne marche pas

    Pour résumé : avant j'avais mon war avec mes servlets, un jar contenant les interfaces distantes, et un autre war contenant les ejb.
    Là j'ai supprimé le jar des interfaces et j'ai directement mis les interfaces dans le jar des ejb.

    Voilà le code

    EJB :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @Stateless
    public class AdminBean extends BaseBean implements AdminLocal {
    ...
    }
    Interface :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @Local
    public interface AdminLocal {
    ...
    }
    classe appelante, j'ai essayé plusieurs choses (sachant que c'est une classe du jar ejb et non du war) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class Constantes {
     
        private static AdminLocal ab;
    ....
        Context ctx = new InitialContext();
        ab = (AdminLocal)ctx.lookup("AdminBean");
        Constante c = ab.getConstante(BASE_DEFAUT, ressource);
    ...
    }
    Ca ça ne marche pas et ça me sort des NameNotFound :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    GRAVE: Lookup failed for 'AdminBean' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming}
    javax.naming.NamingException: Lookup failed for 'AdminBean' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NameNotFoundException: AdminBean not found]
    	at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:518)

    Vu que je suis directement dans le jar ejb j'ai donc essayé d'injecter l'EJB dans la classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class Constantes {
     
        @EJB private static AdminBean ab;
    ....
        Constante c = ab.getConstante(BASE_DEFAUT, ressource);
    ....
    }
    Mais là ça me sort un NullPointeur à .getConstante() ....

    Donc comment m'y prendre ? Est ce qu'il faut déclarer les ejb dans l'annueaire JNDI pour les lookup ? Quel non entrer ?


    Merci !

  4. #4
    Membre du Club
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 36
    Points : 59
    Points
    59
    Par défaut
    Il te manque une annotation sur l'EJB. Tu avais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @Remote(value=XXXBeanRemote.class)
    Il te faut à la place :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @Local(value=XXXBeanRemote.class)
    Sinon, il y a un autre impact qui peut ou non être important : avec des interfaces @Local, les arguments sont passés en référence et non plus en valeur. Par conséquent, si les méthodes de tes EJB modifient leurs arguments, ce serait désormais visible du côté de l'appelant (ses objets seront modifiés), alors que ce n'était pas le cas.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 139
    Points : 35
    Points
    35
    Par défaut
    Merci pour la réponse !

    Je savais pour référence/valeur, mais concrètement, ça veut dire quoi ? Concrètement quels changements ?
    Je vois pas trop ce que tu veux dire par "si les méthodes de tes EJB modifient leurs arguments,"

    J'ai mis la ligne que tu m'as mis, mais il ne trouve toujours pas mon Bean

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    GRAVE: Lookup failed for 'beans.AdminBean' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming}
    javax.naming.NamingException: Lookup failed for 'beans.AdminBean' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NameNotFoundException: beans.AdminBean not found]
    	at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:518)





    EDIT :
    En fait j'avais pas vu mais au lancement de l'appli dans le log tous les noms JNDI s'affichent :pt1cable:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        INFO: EJB5181:Portable JNDI names for EJB AdminBean: [java:global/EAR_GdP2/ProjetGdP-ejb/AdminBean, java:global/EAR_GdP2/ProjetGdP-ejb/AdminBean!interfaces.AdminLocal]


    Donc j'ai mis mes lookup adaptés :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        AdminLocal al = (AdminLocal)ctx.lookup("java:global/EAR_GdP2/ProjetGdP-ejb/AdminBean!interfaces.AdminLocal" );


    Sauf que là j'ai une autre erreur.. GlassFish ne peut pas créer le bean...


    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
    112
    113
    114
    115
        GRAVE: EJB5070: Exception creating stateless session bean : [AdminBean]
        ATTENTION: EJB5184:A system exception occurred during an invocation on EJB AdminBean, method: public util.data.Constante beans.AdminBean.getConstante(java.lang.String,java.lang.String)
        ATTENTION: javax.ejb.EJBException: javax.ejb.EJBException: javax.ejb.CreateException: Could not create stateless EJB
        at com.sun.ejb.containers.StatelessSessionContainer._getContext(StatelessSessionContainer.java:454)
        at com.sun.ejb.containers.BaseContainer.getContext(BaseContainer.java:2547)
        at com.sun.ejb.containers.BaseContainer.preInvoke(BaseContainer.java:1899)
        at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:212)
        at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:88)
        at $Proxy330.getConstante(Unknown Source)
        at util.Constantes.getString(Constantes.java:331)
        at util.Constantes.<clinit>(Constantes.java:275)
        at webGdP.servlet.filtre.AccessFilter.init(AccessFilter.java:98)
        at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:264)
        at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:120)
        at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4685)
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:5377)
        at com.sun.enterprise.web.WebModule.start(WebModule.java:498)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:917)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:901)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:733)
        at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:2018)
        at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:1669)
        at com.sun.enterprise.web.WebApplication.start(WebApplication.java:109)
        at org.glassfish.internal.data.EngineRef.start(EngineRef.java:130)
        at org.glassfish.internal.data.ModuleInfo.start(ModuleInfo.java:269)
        at org.glassfish.internal.data.ApplicationInfo.start(ApplicationInfo.java:301)
        at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:461)
        at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:240)
        at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:389)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:353)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:363)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1085)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1200(CommandRunnerImpl.java:95)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1291)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1259)
        at org.glassfish.deployment.admin.ReDeployCommand.execute(ReDeployCommand.java:126)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:348)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:363)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1085)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1200(CommandRunnerImpl.java:95)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1291)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1259)
        at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:461)
        at com.sun.enterprise.v3.admin.AdminAdapter.service(AdminAdapter.java:212)
        at com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:179)
        at com.sun.enterprise.v3.server.HK2Dispatcher.dispath(HK2Dispatcher.java:117)
        at com.sun.enterprise.v3.services.impl.ContainerMapper$Hk2DispatcherCallable.call(ContainerMapper.java:354)
        at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
        at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:849)
        at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:746)
        at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1045)
        at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:228)
        at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
        at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
        at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
        at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
        at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
        at java.lang.Thread.run(Thread.java:662)
        Caused by: javax.ejb.EJBException: javax.ejb.CreateException: Could not create stateless EJB
        at com.sun.ejb.containers.StatelessSessionContainer$SessionContextFactory.create(StatelessSessionContainer.java:726)
        at com.sun.ejb.containers.util.pool.NonBlockingPool.getObject(NonBlockingPool.java:247)
        at com.sun.ejb.containers.StatelessSessionContainer._getContext(StatelessSessionContainer.java:449)
        ... 58 more
        Caused by: javax.ejb.CreateException: Could not create stateless EJB
        at com.sun.ejb.containers.StatelessSessionContainer.createStatelessEJB(StatelessSessionContainer.java:534)
        at com.sun.ejb.containers.StatelessSessionContainer.access$000(StatelessSessionContainer.java:95)
        at com.sun.ejb.containers.StatelessSessionContainer$SessionContextFactory.create(StatelessSessionContainer.java:724)
        ... 60 more
        Caused by: java.lang.IllegalStateException: Exception lors de la tentative d'injection de l'élément Remote ejb-ref name=util.BaseBean/lcf,Remote 3.x interface =beans.ConnexionFactory,ejb-link=null,lookup=,mappedName=,jndi-name=beans.ConnexionFactory,refType=Session dans class util.BaseBean : Lookup failed for 'java:comp/env/util.BaseBean/lcf' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming}
        at org.glassfish.weld.services.InjectionServicesImpl.aroundInject(InjectionServicesImpl.java:137)
        at org.jboss.weld.injection.InjectionContextImpl.run(InjectionContextImpl.java:46)
        at org.jboss.weld.bean.SessionBean$1.inject(SessionBean.java:172)
        at org.glassfish.weld.services.JCDIServiceImpl.injectEJBInstance(JCDIServiceImpl.java:223)
        at com.sun.ejb.containers.BaseContainer.injectEjbInstance(BaseContainer.java:1678)
        at com.sun.ejb.containers.StatelessSessionContainer.createStatelessEJB(StatelessSessionContainer.java:494)
        ... 62 more
        Caused by: com.sun.enterprise.container.common.spi.util.InjectionException: Exception lors de la tentative d'injection de l'élément Remote ejb-ref name=util.BaseBean/lcf,Remote 3.x interface =beans.ConnexionFactory,ejb-link=null,lookup=,mappedName=,jndi-name=beans.ConnexionFactory,refType=Session dans class util.BaseBean : Lookup failed for 'java:comp/env/util.BaseBean/lcf' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming}
        at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:703)
        at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.inject(InjectionManagerImpl.java:470)
        at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.injectInstance(InjectionManagerImpl.java:171)
        at org.glassfish.weld.services.InjectionServicesImpl.aroundInject(InjectionServicesImpl.java:130)
        ... 67 more
        Caused by: javax.naming.NamingException: Lookup failed for 'java:comp/env/util.BaseBean/lcf' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NamingException: Exception resolving Ejb for 'Remote ejb-ref name=util.BaseBean/lcf,Remote 3.x interface =beans.ConnexionFactory,ejb-link=null,lookup=,mappedName=,jndi-name=beans.ConnexionFactory,refType=Session' .  Actual (possibly internal) Remote JNDI name used for lookup is 'beans.ConnexionFactory#beans.ConnexionFactory' [Root exception is javax.naming.NamingException: Lookup failed for 'beans.ConnexionFactory#beans.ConnexionFactory' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NameNotFoundException: beans.ConnexionFactory#beans.ConnexionFactory not found]]]
        at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:518)
        at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:455)
        at javax.naming.InitialContext.lookup(InitialContext.java:392)
        at javax.naming.InitialContext.lookup(InitialContext.java:392)
        at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:599)
        ... 70 more
        Caused by: javax.naming.NamingException: Exception resolving Ejb for 'Remote ejb-ref name=util.BaseBean/lcf,Remote 3.x interface =beans.ConnexionFactory,ejb-link=null,lookup=,mappedName=,jndi-name=beans.ConnexionFactory,refType=Session' .  Actual (possibly internal) Remote JNDI name used for lookup is 'beans.ConnexionFactory#beans.ConnexionFactory' [Root exception is javax.naming.NamingException: Lookup failed for 'beans.ConnexionFactory#beans.ConnexionFactory' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NameNotFoundException: beans.ConnexionFactory#beans.ConnexionFactory not found]]
        at com.sun.ejb.EjbNamingReferenceManagerImpl.resolveEjbReference(EjbNamingReferenceManagerImpl.java:191)
        at com.sun.enterprise.container.common.impl.ComponentEnvManagerImpl$EjbReferenceProxy.create(ComponentEnvManagerImpl.java:1109)
        at com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl.lookup(GlassfishNamingManagerImpl.java:776)
        at com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl.lookup(GlassfishNamingManagerImpl.java:744)
        at com.sun.enterprise.naming.impl.JavaURLContext.lookup(JavaURLContext.java:169)
        at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:498)
        ... 74 more
        Caused by: javax.naming.NamingException: Lookup failed for 'beans.ConnexionFactory#beans.ConnexionFactory' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NameNotFoundException: beans.ConnexionFactory#beans.ConnexionFactory not found]
        at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:518)
        at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:455)
        at javax.naming.InitialContext.lookup(InitialContext.java:392)
        at javax.naming.InitialContext.lookup(InitialContext.java:392)
        at com.sun.ejb.EjbNamingReferenceManagerImpl.resolveEjbReference(EjbNamingReferenceManagerImpl.java:186)
        ... 79 more
        Caused by: javax.naming.NameNotFoundException: beans.ConnexionFactory#beans.ConnexionFactory not found
        at com.sun.enterprise.naming.impl.TransientContext.doLookup(TransientContext.java:248)
        at com.sun.enterprise.naming.impl.TransientContext.lookup(TransientContext.java:215)
        at com.sun.enterprise.naming.impl.SerialContextProviderImpl.lookup(SerialContextProviderImpl.java:77)
        at com.sun.enterprise.naming.impl.LocalSerialContextProviderImpl.lookup(LocalSerialContextProviderImpl.java:119)
        at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:505)
        ... 83 more

    Mais quand je regarde à la fin je m'aperçois que ça vient des autres lookup que je n'ai pas encore fait donc je persévère

  6. #6
    Membre du Club
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 36
    Points : 59
    Points
    59
    Par défaut
    Désolé, j'ai parcouru un peu vite et je m'étais arrêté au premier problème que j'ai vu.

    Les annotations comme @EJB ou @Inject ne seront prises en compte que sur des classes managées, comme un bean managé JSF, un autre EJB, une servlet, etc... Ce n'est pas le cas de ta classe Constantes. Tu devrais injecter ton EJB directement sur la classe qui en a besoin si c'est une classe managée ; quel framework IHM utilises-tu ?

    Pour le passage par valeur/par référence, exemple à ne pas suivre (c'est pas très propre de modifier ses arguments) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    @Stateless
    @Remote(AdminRemote.class)
    @Local(AdminLocal.class)
    public class AdminBean extends BaseBean implements AdminLocal {
     
        void doSomething(Map<Long, String> myMap) {
            // on fait des trucs...
            myMap.put(42,"8*7"); //je modifie mon argument !
            // ... et puis d'autres trucs...
        }
    }
    En remote :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    @EJB
    private AdminRemote admin;
     
    void myTest() {
    	Map<Long, String> myMap = new HashMap<Long, String>()
    	myMap.put(42, "Life, Universe And Everything")
    	admin.doSomething(myMap);
    	assert myMap.get(42).equals("Life, Universe And Everything"); // ça marche !
    }
    En local :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    @EJB
    private AdminLocal admin;
     
    void myTest() {
    	Map<Long, String> myMap = new HashMap<Long, String>()
    	myMap.put(42, "Life, Universe And Everything")
    	admin.doSomething(myMap);
    	assert myMap.get(42).equals("8*7"); // là aussi...
    }

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

Discussions similaires

  1. Pas d'ejb Remote sur Glassfish/debian
    Par jsansnom dans le forum Glassfish et Payara
    Réponses: 2
    Dernier message: 17/08/2010, 10h25
  2. Le package javax.ejb, Remote et Stateless
    Par amira88 dans le forum Eclipse Java
    Réponses: 0
    Dernier message: 20/11/2009, 11h09
  3. [JNDI] Acces EJB remote, parametres non réactualisés
    Par HerQuLe dans le forum Java EE
    Réponses: 3
    Dernier message: 15/06/2009, 15h27
  4. [EJB] Remote call impossible avec WEBSPHERE
    Par nighma dans le forum Websphere
    Réponses: 1
    Dernier message: 19/06/2006, 16h18
  5. [Integration] Equivalent de l'interface Remote des EJB
    Par onlytoine dans le forum Spring
    Réponses: 36
    Dernier message: 07/01/2005, 14h55

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