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

JSF Java Discussion :

Injection d'EJB dans un JSF Managed bean


Sujet :

JSF Java

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2008
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 88
    Points : 154
    Points
    154
    Par défaut Injection d'EJB dans un JSF Managed bean
    Bonjour à tous,

    J'ai créé un projet enterprise avec maven, netbeans7.2 et glassfish3.1. J'ai généré les classes Facade dans le module EJB et les classes JSF Controller dans le module web.
    Je veut injecter les EJB Facade dans les controleurs JSF mais ça ne marche pas.
    J'ai bien cherché et je lit toujours que l'injection par @EJB est possible dans tout bean géré par le conteneur (dont les JSF Managed Beans) mais malgèr les essais et même avec JNDI je n'arrive pas à faire fonctionner l'application. Je ne comprend pas le problème, j'espère avoir votre aide.

    Quand je lance l'application et je demande la page faisant appel à AirportController j'ai le message d'erreur suivant:

    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
    SEVERE: javax.naming.NamingException: Lookup failed for 'java:global/FLAMS-ear_1.0-SNAPSHOT/FLAMS-ejb-1.0-SNAPSHOT/AirportFacade' 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: FLAMS-ear_1.0-SNAPSHOT]
    	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:411)
    	at javax.naming.InitialContext.lookup(InitialContext.java:411)
    	at com.procc.backing.AirportController.init(AirportController.java:36)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:601)
    	at org.glassfish.faces.integration.GlassFishInjectionProvider$2.run(GlassFishInjectionProvider.java:382)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at org.glassfish.faces.integration.GlassFishInjectionProvider.invokeLifecycleMethod(GlassFishInjectionProvider.java:376)
    	at org.glassfish.faces.integration.GlassFishInjectionProvider.invokePostConstruct(GlassFishInjectionProvider.java:306)
    	at org.glassfish.faces.integration.GlassFishInjectionProvider.invokePostConstruct(GlassFishInjectionProvider.java:229)
    	at com.sun.faces.mgbean.BeanBuilder.invokePostConstruct(BeanBuilder.java:223)
    	at com.sun.faces.mgbean.BeanBuilder.build(BeanBuilder.java:105)
    	at com.sun.faces.mgbean.BeanManager.createAndPush(BeanManager.java:409)
    	at com.sun.faces.mgbean.BeanManager.create(BeanManager.java:269)
    	at com.sun.faces.el.ManagedBeanELResolver.resolveBean(ManagedBeanELResolver.java:244)
    	at com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:116)
    	at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
    	at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
    	at com.sun.el.parser.AstIdentifier.getValue(AstIdentifier.java:103)
    	at com.sun.el.parser.AstValue.getTarget(AstValue.java:149)
    	at com.sun.el.parser.AstValue.getType(AstValue.java:84)
    	at com.sun.el.ValueExpressionImpl.getType(ValueExpressionImpl.java:200)
    	at com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:98)
    	at org.primefaces.component.datatable.DataTable.isLazy(DataTable.java:968)
    	at org.primefaces.component.datatable.DataTableRenderer.encodeMarkup(DataTableRenderer.java:191)
    	at org.primefaces.component.datatable.DataTableRenderer.encodeEnd(DataTableRenderer.java:108)
    	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
    	at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:61)
    	at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:45)
    	at org.primefaces.component.panel.PanelRenderer.encodeContent(PanelRenderer.java:185)
    	at org.primefaces.component.panel.PanelRenderer.encodeMarkup(PanelRenderer.java:108)
    	at org.primefaces.component.panel.PanelRenderer.encodeEnd(PanelRenderer.java:55)
    	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
    	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1764)
    	at javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
    	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
    	at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:57)
    	at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:45)
    	at org.primefaces.component.layout.LayoutUnitRenderer.encodeEnd(LayoutUnitRenderer.java:51)
    	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
    	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1764)
    	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1760)
    	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1760)
    	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1760)
    	at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:402)
    	at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
    	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
    	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
    	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)
    	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
    	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
    	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
    	at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)
    	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
    	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860)
    	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757)
    	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056)
    	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229)
    	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:722)
    Caused by: javax.naming.NameNotFoundException: FLAMS-ear_1.0-SNAPSHOT
    	at com.sun.enterprise.naming.impl.TransientContext.resolveContext(TransientContext.java:310)
    	at com.sun.enterprise.naming.impl.TransientContext.lookup(TransientContext.java:218)
    	at com.sun.enterprise.naming.impl.TransientContext.lookup(TransientContext.java:219)
    	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)
    	... 77 more
    Je joint les codes source du projet:

    module FLAMS-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
     
    /
    public abstract class AbstractFacade<T> {
        private Class<T> entityClass;
     
        public AbstractFacade(Class<T> entityClass) {
            this.entityClass = entityClass;
        }
     
        protected abstract EntityManager getEntityManager();
     
        public void create(T entity) {
            getEntityManager().persist(entity);
        }
     
    .... // méthodes crud
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    @Stateless
    public class AirportFacade extends AbstractFacade<Airport> implements AirportFacadeLocal{
        @PersistenceContext(unitName = "flams_pu")
        private EntityManager em;
     
        @Override
        protected EntityManager getEntityManager() {
            return em;
        }
     
        public AirportFacade() {
            super(Airport.class);
        }
    }
    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
    @Local
    public interface AirportFacadeLocal {
     
        void create(Airport alert);
     
        void edit(Airport alert);
     
        void remove(Airport alert);
     
        Airport find(Object id);
     
        List<Airport> findAll();
     
        List<Airport> findRange(int[] range);
     
        int count();
    }
    Module FLAMS-web:
    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 abstract class AbstractController<T> {
     
        private AbstractFacade<T> ejbFacade;
        private Class<T> itemClass;
        private T selected;
        private List<T> items;
     
        private enum PersistAction {
            CREATE,
            DELETE,
            UPDATE
        }
     
        public AbstractController() {
        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    @ManagedBean(name="airportController")
    @ViewScoped
    public class AirportController extends AbstractController<Airport> implements Serializable {
     
     
        @EJB 
        public AirportFacade ejbFacade;
     
        public AirportController() {
            super(Airport.class);
        }
    }
    merci d'avance

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    365
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Janvier 2006
    Messages : 365
    Points : 495
    Points
    495
    Par défaut
    Bonjour,

    Etant donné que ton ejb AirportFacade est déclaré comme implémentant une interface locale AirportFacadeLocal.

    Pour l'injecter dans le ManagedBean, tu dois déclarer la variable membre de type AirportFacadeLocal et non AirportFacade:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    @EJB
    private AirportFacadeLocal ejbFacade;

Discussions similaires

  1. [EJB3] JSF/Managed Bean {@EJB} appel local ou distant
    Par fellyis dans le forum Java EE
    Réponses: 5
    Dernier message: 23/02/2010, 15h14
  2. Jboss : Injection d'EJB dans les servlets ! @EJB
    Par MaxLaMenaX dans le forum Wildfly/JBoss
    Réponses: 12
    Dernier message: 17/09/2009, 16h41
  3. [EJB] Injecter un EJB dans un objet (annotation @EJB ?)
    Par flamant dans le forum Java EE
    Réponses: 2
    Dernier message: 03/05/2009, 08h24
  4. Weblogic 10.0 : injection d'EJB dans managed bean JSF
    Par loic38_01 dans le forum Weblogic
    Réponses: 1
    Dernier message: 05/09/2008, 13h46

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