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 :

PrimeFaces @PushEndpoint et @Inject problème


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

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

    Informations forums :
    Inscription : Février 2012
    Messages : 60
    Par défaut PrimeFaces @PushEndpoint et @Inject problème
    Bonjour,

    J'ai un petit souci pour injecter un managed bean en @ApplicationScoped dans une ressource web socket de primefaces :

    code XHTML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <p:socket channel="/app/35"/>
    code du managedBean :
    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
     
    package sav.twfjq.ejb.tool;
     
    import java.io.Serializable;
    import javax.annotation.PostConstruct;
    import javax.annotation.PreDestroy;
    import javax.enterprise.context.ApplicationScoped;
     
    import javax.inject.Named;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
     
     
    @Named
    @ApplicationScoped
    public class UserConnectionManager implements Serializable {
     
        private final Logger logger = LoggerFactory.getLogger(UserConnectionManager.class);
     
     
        @PostConstruct
        public void postConstruct() {
            logger.info("UserConnectionManager Create");
        }
     
        @PreDestroy
        public void preDestroy() {
            logger.info("UserConnectionManager Delete");
        }
     
        public void test(){
            logger.info("ICIIIIIIII");
        }
     
    }
    Code de la resource web socket :
    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
     
    package sav.twfjq.push;
     
    import javax.inject.Inject;
    import org.primefaces.push.EventBus;
    import org.primefaces.push.RemoteEndpoint;
    import org.primefaces.push.annotation.OnClose;
    import org.primefaces.push.annotation.OnOpen;
    import org.primefaces.push.annotation.PathParam;
    import org.primefaces.push.annotation.PushEndpoint;
    import org.primefaces.push.annotation.Singleton;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import sav.twfjq.ejb.tool.UserConnectionManager;
     
    @PushEndpoint("/{app}/{user}")
    @Singleton
    public class MainResource {
     
        private final Logger logger = LoggerFactory.getLogger(MainResource.class);
     
        @PathParam("app")
        private String app;
     
        @PathParam("user")
        private String user;
     
        @Inject
        private UserConnectionManager ucm;
     
        @OnOpen
        public void onOpen(RemoteEndpoint r, EventBus eventBus) {  
            logger.debug("Socket open : "+ user);
            ucm.test();
        }
     
        @OnClose
        public void onClose(RemoteEndpoint r, EventBus eventBus) {
            logger.debug("Close");
     
        }
     
     
     
    }
    Tout se passe correctement jusqu'à l’exécution de la méthode "ucm.test();", (si j’enlève l'appel de cette méthode il n'y a plus de problème, j'ai l'impression qu'il n'arrive pas à injecter mon Managed Bean ) voici l'erreur :


    INFO: twfjq - 2014-12-25 17:28:17 - DEBUG MainResource:37 - Socket open : 35
    INFO: twfjq - 2014-12-25 17:28:17 - ERROR Invoker:54 -
    java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at org.atmosphere.config.managed.Invoker.invokeMethod(Invoker.java:49)
    at org.primefaces.push.impl.PushEndpointHandlerProxy.invokeOpenOrClose(PushEndpointHandlerProxy.java:378)
    at org.primefaces.push.impl.PushEndpointHandlerProxy$3.onSuspend(PushEndpointHandlerProxy.java:171)
    at org.atmosphere.cpr.AtmosphereResourceImpl.onSuspend(AtmosphereResourceImpl.java:692)
    at org.atmosphere.cpr.AtmosphereResourceImpl.notifyListeners(AtmosphereResourceImpl.java:625)
    at org.atmosphere.cpr.AtmosphereResourceImpl.notifyListeners(AtmosphereResourceImpl.java:598)
    at org.atmosphere.cpr.AtmosphereResourceImpl.suspend(AtmosphereResourceImpl.java:417)
    at org.atmosphere.interceptor.AtmosphereResourceLifecycleInterceptor.postInspect(AtmosphereResourceLifecycleInterceptor.java:145)
    at org.atmosphere.cpr.AsynchronousProcessor.postInterceptors(AsynchronousProcessor.java:344)
    at org.atmosphere.cpr.AsynchronousProcessor.action(AsynchronousProcessor.java:213)
    at org.atmosphere.cpr.AsynchronousProcessor.suspended(AsynchronousProcessor.java:104)
    at org.atmosphere.container.GlassFishServ30WebSocketSupport.service(GlassFishServ30WebSocketSupport.java:60)
    at org.atmosphere.cpr.AtmosphereFramework.doCometSupport(AtmosphereFramework.java:2079)
    at org.atmosphere.websocket.DefaultWebSocketProcessor.dispatch(DefaultWebSocketProcessor.java:570)
    at org.atmosphere.websocket.DefaultWebSocketProcessor.open(DefaultWebSocketProcessor.java:215)
    at org.atmosphere.container.GlassFishServ30WebSocketSupport$Grizzly2WebSocketApplication.onConnect(GlassFishServ30WebSocketSupport.java:144)
    at org.glassfish.grizzly.websockets.SimpleWebSocket.onConnect(SimpleWebSocket.java:135)
    at org.glassfish.grizzly.websockets.WebSocketEngine.upgrade(WebSocketEngine.java:216)
    at org.glassfish.grizzly.extras.addons.WebSocketAddOnProvider$GlassfishWebSocketFilter.doServerUpgrade(WebSocketAddOnProvider.java:118)
    at org.glassfish.grizzly.websockets.WebSocketFilter.handleServerHandshake(WebSocketFilter.java:87)
    at org.glassfish.grizzly.websockets.WebSocketFilter.handleHandshake(WebSocketFilter.java:68)
    at org.glassfish.grizzly.websockets.BaseWebSocketFilter.handleRead(BaseWebSocketFilter.java:197)
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:561)
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:565)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:545)
    at java.lang.Thread.run(Thread.java:745)
    Caused by: java.lang.NullPointerException
    at sav.twfjq.push.MainResource.onOpen(MainResource.java:38)
    ... 40 more

    Merci d'avance pour vos solutions

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

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

    Informations forums :
    Inscription : Février 2012
    Messages : 60
    Par défaut
    J'ai résolu le problème moi même du coup, la solution est pas top mais sa marche :

    Dans le managedBean en @ApplicationScoped :

    import javax.faces.bean.ApplicationScoped;
    import javax.faces.bean.ManagedBean;

    pour utiliser @ManagedBean et @ApplicationScoped

    au lieu de :

    import javax.enterprise.context.ApplicationScoped;
    import javax.inject.Named;

    pour utiliser @Named et @ApplicationScoped comme je le faisais

    Dans le la resource web socket

    Il faut injecter :
    @Inject
    private ServletContext sc;

    et utiliser sc.getAttribute("userConnectionManager") pour récupérer l'objet.

    Il faut aussi utiliser un déclencheur pour instancier le ManagedBean en @ApplicationScoped en début de page (ex : <p:remoteCommand actionListener="#{userConnectionManager.test()}" autoRun="true"/> )

    Notez que cette solution est pas top car les injections avec "javax.faces.bean" sont vouées à disparaître au profit de CDI mais bon ....

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

Discussions similaires

  1. [2.x] [Dependency Injection] Problème
    Par Sikwan dans le forum Symfony
    Réponses: 4
    Dernier message: 29/07/2011, 15h26
  2. [Oracle] problème d'injection SQL
    Par matoon dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 04/03/2008, 10h43
  3. Réponses: 3
    Dernier message: 06/06/2007, 15h21
  4. Problème avec asp:repeater et injection de js
    Par lutecefalco dans le forum ASP.NET
    Réponses: 1
    Dernier message: 25/05/2007, 12h12
  5. problème d'injection (?) d'un session bean EJB3 dans une servlet
    Par toomsounet dans le forum Wildfly/JBoss
    Réponses: 2
    Dernier message: 11/03/2007, 01h26

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