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 :

[JSF] EJB3.0 couche View !


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 205
    Par défaut [JSF] EJB3.0 couche View !
    Salut,

    J'utilise Jboss 5.0 AS enfin j'ai testée plusieurs versions, donc j'ai une marge de liberté sur les versions si besoin est.

    J'utilise avec ca un moteur de BPM Business Process Management, en gros un workflow qui permet d'orchestrer les processus metier ... la suite jbpm-jpdl-3.2.3

    Et j'utilise JSF ...1.2

    J'utilise EJB3.0 :
    J'ai créé mes beans metiers Entity, pour chaque Table de la BD existante...

    J'ai créé une facade CRUD (CREATE, READ, UPDATE, DELETE) qui permet de faire ces operations sur chacunes des tables, ou entités ...


    Quand j'utilisais JSP ET MVC, je faisais simplement dans ma servlet Controller un

    @EJB
    MaSessionFacade session;


    et puis avec session, je pouvais appeller toutes les fonctions déclarées dans celle ci :
    session.createPerson(name, lastname, adress, price(oui les gens ont rarement de prix, mais bon ...) ) ...

    et puis il me suffisait d'afficher la reponse via AJax dans une JSP ...


    PAR CONTRE EN JSF on fait comment ?

    Le bean session facade, il sert a rien ?

    Les manageBean, j'ai du mal a comprendre ? (c'est pour des valeurs statiques ?)

    Quelqu'un peut il m'aider silvouplait ?

    J

  2. #2
    Membre très actif
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 205
    Par défaut
    euh de l'aide ? svp

  3. #3
    Membre confirmé
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 73
    Par défaut
    Citation Envoyé par MaxLaMenaX Voir le message
    Salut,

    J'utilise Jboss 5.0 AS enfin j'ai testée plusieurs versions, donc j'ai une marge de liberté sur les versions si besoin est.

    J'utilise avec ca un moteur de BPM Business Process Management, en gros un workflow qui permet d'orchestrer les processus metier ... la suite jbpm-jpdl-3.2.3

    Et j'utilise JSF ...1.2

    J'utilise EJB3.0 :
    J'ai créé mes beans metiers Entity, pour chaque Table de la BD existante...

    J'ai créé une facade CRUD (CREATE, READ, UPDATE, DELETE) qui permet de faire ces operations sur chacunes des tables, ou entités ...


    Quand j'utilisais JSP ET MVC, je faisais simplement dans ma servlet Controller un

    @EJB
    MaSessionFacade session;


    et puis avec session, je pouvais appeller toutes les fonctions déclarées dans celle ci :
    session.createPerson(name, lastname, adress, price(oui les gens ont rarement de prix, mais bon ...) ) ...

    et puis il me suffisait d'afficher la reponse via AJax dans une JSP ...


    PAR CONTRE EN JSF on fait comment ?

    Le bean session facade, il sert a rien ?

    Les manageBean, j'ai du mal a comprendre ? (c'est pour des valeurs statiques ?)

    Quelqu'un peut il m'aider silvouplait ?

    J
    Pour appeller ton session bean depuis un Managed Bean (JSF,Jboss)
    @EJB l'injection n'est pas encore supporter
    par contre tu peu faire un appel jndi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    PersonneBeanRemote TB()  throws NamingException
    	{	
          	//Context jndiContext = getInitialContext();
    		Context jndiContext;
    		jndiContext= new InitialContext();
     
    	    Object ref = jndiContext.lookup("/Projet/PersonneBean/remote");	//ne pas oublier d'ajouter le nom du projet EAR au chemin(Projet dans l'exemple)
            PrestationBeanRemote personneBean = (PersonneBeanRemote)ref;	// bonjourSessionBean : c'est la référence généré lors du déployement
             return personneBean;
    	}
    donc cette Méthode te retourne une instance de votre session bean ...

    ce qui concerne à quoi sert un managed bean tu peux consulter le faqjsf

    Un managed bean est une classe dont le cycle de vie est géré par JSF.En fait JSF instancie le bean en fonction de son champ d'application(scope), le stocke dans le contexte JSF, et l'invoque lorsque nécessaire
    exemple

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 76
    Par défaut
    Citation Envoyé par fellyis Voir le message
    ppez.com/faq/jsf/"]faqjsf[/URL]
    Un managed bean est une classe dont le cycle de vie est géré par JSF.En fait JSF instancie le bean en fonction de son champ d'application(scope), le stocke dans le contexte JSF, et l'invoque lorsque nécessaire
    exemple
    Ou utiliser Spring pour gerer les beans.

  5. #5
    Membre très actif
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 205
    Par défaut
    Salut et merci pour cette petite aide...

    Au niveau de Spring je connais le framework de nom, mais je ne l'ai jamais utilisé ..., j'ai une architecture assez stable alors je préfère pas y toucher et de plus je n'en aurais pas le temps, mais c'est bon à savoir lorsque je débuterais un nouveau projet donc merci.


    Et en ce qui concerne l'utilisation d'une session facade, es tu sur que l'injection n'est pas supportée ? je veux dire ca dépends du serveur d'application ou de JSF ? car j'avais réussi à utiliser l'injection dans une servlet avec ce même serveur ...

    Bon bref, l'important est que je puisse l'utiliser, si apparemment faut faire un context.lookup, ben je vais utiliser cela ... c'est un peu de ligne de code en plus, mais aussi ca fait des accès à distances et donc c'est moins performant ... enfin pour le moment je cherche quelquechose qui marche...

    Donc merci...

    Sinon, comment je fais ensuite appel à ta fonction dans une vue JSF ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    PersonneBeanRemote TB()  throws NamingException
    	{	
          	//Context jndiContext = getInitialContext();
    		Context jndiContext;
    		jndiContext= new InitialContext();
     
    	    Object ref = jndiContext.lookup("/Projet/PersonneBean/remote");	//ne pas oublier d'ajouter le nom du projet EAR au chemin(Projet dans l'exemple)
            PrestationBeanRemote personneBean = (PersonneBeanRemote)ref;	// bonjourSessionBean : c'est la référence généré lors du déployement
             return personneBean;
    	}

    COmme ca ?

    Je déclare le manage bean, dans faces config ?

    et je l'appelle en JSF via une expression du type #{MonManageBean.TB} .???

    En supposant que dans ma facade j'ai la fonction getListClient().

    Je l'appel comme ca #{MonManageBean.TB.getListClient} ???

    C ca ?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 18
    Par défaut
    Si je peux me permettre, avec JBoss Seam c'est plus simple.

    L'interface :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    @Local
    public interface PrestationBean {
    	public List<Client> getListClient();
    }
    L'implémentation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    @Stateful
    @Name("prestationBean")
    @Interceptors(SeamInterceptor.class)
    public class PrestationBeanRemote implements PrestationBean {
     
    	@PersistenceContext(unitName="XXXXXX", type=PersistenceContextType.EXTENDED)
    	private EntityManager em;
     
    	@Logger Log log;
     
    	public List<Client> getListClient() {...}
    Et dans le JSF :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var="#{prestationBean.listClient}"
    Evidemment en utilisant le modèle full Seam c'est encore plus simple, mais ça c'est une autre histoire...

  7. #7
    Membre très actif
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 205
    Par défaut
    Salut et merci !

    Le souci c'est que comme je dis plus haut, j'ai une architecture assez stable, j'ai déja un JBoss AS 5.0, une couche JBPM, j'ai rajouté l'implémentation JSF et essayer d'intégrer Richface...

    Ca commence a être quelque peu une usine à gazs ...

    Alors si je rajoute seam en plus ?

    Que j'ai d'ailleurs testé en standalone... et qui ne m'a pas aidé niveau performance au contraire.

    De toute façon, là j'y suis quasiment arrivé sans seam, et c'est pas plus compliqué que ça.

    Sauf que j'ai un souci :

    Imaginons j'ai mon Entity :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    @Entity
    public class MyEntity{
      @Id(etc...)
      private long id;
      private String nom;
      private String reference;
      private String codeHandler;
     
     //Les constructeurs et getter&setter qui vont bien ... évidemment...
    ma facade ou sesssion Bean :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    @Stateless
    @Remote
    @Local
    public class MyFacadeBean implements IMyFacadeRemote, IMyFacadeLocal{
      @PersistenceContext
      EntityManager em;
     
      public List<MyEntity> getAllMyEntity(){//qui retourne une liste de toutes les instances de MyEntity... Soit toutes les lignes de la table...
    MonControlleur, ou ManageBean :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public MyController implements Serializable {
      @EJB (chemin du jar)
      IMyFacadeLocal crud;
      DataModel model;
     
    //et ici je construis le modèle à partir de ma facade et de getAllMyEntity...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dans le web.wml j'ai ajouté un <context-param> pour l'injection EJB
    "InjectionProvider" un truc comme ca (oui désolé j'y fais de tete lol)
    //L'injection a partiellement fonctionné, déja là j'ai été surpris, et content, enfin bref ... non parce que combien j'en ai eu, qui m'ont dit l'injection ca marche pas ...)
    Dans faces-config.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //J'ai evidemment déclaré mon manage bean
    //name MyController
    //class blabla.test.MyController
    //scope session
    et dans JSF ma page test.xhtml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <h:datatable value="MyController.model" var="myTest">
      <h:column>
        <h:outputText value="myTest.id" //les propriétés du bean entity
      </h:column>
      <h:column>
        <h:outputText value="myTest.nom" //les propriétés du bean entity
      </h:column>
      <h:column>
        <h:outputText value="myTest.reference" //les propriétés du bean entity
      </h:column>
      <h:column>
        <h:outputText value="myTest.codeHandler" //les propriétés du bean entity
      </h:column>
    Après la quand je clique sur le lien qui me permet de tester ca...
    Déja ya un grand chargement puisque il (JBoss) charge toutes les fonctions de l'implementation de mon bean Facade...
    ET j'ai justement des messages du types "tu devrais utiliser des interceptors, et non attaquer les bean directement... ManageObjectAdvisor", et ca pour chaque fonction de ma facade qui a peut etre 150 fonction (Create, delete, update, getById, getAll = 5 * (NbEntity =30) = 150.

    Tout ça pour dire que le chargement est long, et que apparemment seam gère lui @Interceptor, et que même si j'ai une idée de ce qu'est un intercepteur par logik ... J'en ai jamais dévéloppé et j'ai jamais vu d'exemple. Donc si on peut m'orienter !

    BREF lol !

    Après ce long chargement, il m'a crée une table avec les bonnes valeurs sur ma page JSF... ENFIN UN SEMBLANT DE DEBUT DE FONCTIONNEMENT !

    Je remets mon bean entity, parce que il est un peu loin dans le post !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    @Entity
    public class MyEntity{
      @Id(etc...)
      private long id;
      private String nom;
      private String reference;
      private String codeHandler;
     
     //Les constructeurs et getter&setter qui vont bien ... évidemment...
    et donc si dans ma page JSF, je lui affiche genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <h:datatable value="MyController.model" var="myTest">
      <h:column>
        <h:outputText value="myTest.id" //les propriétés du bean entity
      </h:column>
      <h:column>
        <h:outputText value="myTest.nom" //les propriétés du bean entity
      </h:column>
      <h:column>
        <h:outputText value="myTest.reference" //les propriétés du bean entity
      </h:column>
      <h:column>
        <h:outputText value="myTest.codeHandler" //les propriétés du bean entity
      </h:column>
    Ca passe pas, il me dit JSF el expression error, error rendering blabla bla, property "reference" not found on blabla.MyEntity

    J'enleve "reference" bien qu'elle se trouve dans mon bean...
    Et la ok il m'affiche tous les autres attributs...

    J'ai checké la syntaxe, mes getter setter sur cette propriété "reference"... et rien de différent des autres propriétés du bean qui passe bien.

    Donc voilà, l'erreur est illogik, et n'a pas de sens ...

    Si quelqu'un à une idée.... ?

    Désolé pour ce long Post incompréhensible lol, mais fallait que ca sorte !

    Cordialement ! hihihihi !

Discussions similaires

  1. JSF EJB3 et constructeur
    Par nathieb dans le forum JSF
    Réponses: 1
    Dernier message: 24/01/2009, 10h11
  2. question projet jsf+ejb3+jpa
    Par MattA184575 dans le forum Eclipse Java
    Réponses: 0
    Dernier message: 20/01/2009, 22h28
  3. Réponses: 2
    Dernier message: 15/01/2009, 20h50
  4. Erreur de configuration JSF ejb3 et richFaces
    Par twister110 dans le forum Seam
    Réponses: 3
    Dernier message: 13/01/2009, 17h01
  5. Code Source - JEE5 (JSF, EJB3, JPA)
    Par 17mounir dans le forum JSF
    Réponses: 4
    Dernier message: 17/04/2008, 14h33

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