Entity-Liste (wie @DataModel bei seam) mit CDI

Diskutiere Entity-Liste (wie @DataModel bei seam) mit CDI im Application Tier Forum; Hallo, versuch grad mich in JEE6 einzuarbeiten.. was relativ simples wie eine Liste mit Entities aus einer Datenbanktabelle, bei seam...

  1. JanHH
    JanHH Mitglied
    Hallo,

    versuch grad mich in JEE6 einzuarbeiten..

    was relativ simples wie eine Liste mit Entities aus einer Datenbanktabelle, bei seam @DataModel (mit @Factory-Methode)..

    wie geht dat? Irgendwas mit @Produces, nehme ich an?

    - die Liste soll unter ihrem Namen per DI verfügbar sein (auch in JSF-EL usw)
    - die Liste soll nicht bei jedem Zugriff (wie das z.B. bei einer simplen get-Methode der Fall wäre) neu geladen werden, sondern nur dann, wenn sie null ist

    Mit seam2 extrem simpel, bei JEE6 stellts mich vor Herausforderungen.

    Bitte um Hilfe/Beispiele..

    Gruß+Danke
    Jan
     
  2. Vielleicht hilft dir das kostenlose Training weiter --> (hier klicken)
  3. KSG9|sebastian
    KSG9|sebastian Aktives Mitglied
    Öhm, ich versteh dein Problem nicht so ganz (liegt wohl daran das ich nicht mit Seam arbeite).

    Aber ganz pragmatisch:

    - EJB erstellen welches dir die Entitites liefert
    Code (Text):

    @Stateless
    public class MyEjb{

       @PersistenceContext  
       private EntityManager entityManager;

       public List<Foo> getFoos(){
          return (List<Foo>) entityManager.createQuery("from Foo f").getResultList();
       }
    }
     
    In deinem Controller (ManagedBean)

    Code (Text):

    @Named("myController")
    class MyController{

       @EJB
       private MyEjb ejb;

       public List<Foo> getFoos(){
          return ejb.getFoos();
       }
    }
     
    In in JSF dann

    Code (Text):

    ... #{myController.foos} ...
     
     
  4. JanHH
    JanHH Mitglied
    Ja, klar.

    Aber dann wird die Liste bei jedem Zugriff aus der Datenbank neu geladen. Das will ich halt nicht.

    vielleicht relativ simpel so
    Code (Java):

    @Stateful
    public class MyEjb{

       @PersistenceContext  
       private EntityManager entityManager;

       private List<Foo> fooList;

       public List<Foo> getFoos(){
          if(fooList==null) {
             fooList=entityManager.createQuery("from Foo f").getResultList();
          };

          return fooList;
       }
    }
     
    Wenns wirklich so simpel ist entschuldige ich mich für die Frage ;-)
     
  5. KSG9|sebastian
    KSG9|sebastian Aktives Mitglied
    Ok, jetzt verstehe ich...:)

    Dafür kannst du z.B. einen "Container" schreiben welcher die Daten über ein EJB einmalig besorgt. Den Container lässt du dann als SessionScoped injecten
     
  6. JanHH
    JanHH Mitglied
    Jo, sowas habsch auch gedacht.
     
  7. Sym
    Sym Guest
    Als Tip:

    Der Sessionscope ist nur zu verwenden, wenn dies auch notwendig ist. Sollte sich die Liste während einer Session ändern können, sollte man damit vorsichtig sein und einen kleineren Scope wählen. Die Datenbank ist nämlich seltener das Bottleneck. Sollte sich die Liste nie ändern, sollte man den ApplicationScope verwenden.
     
  8. mp5er
    mp5er Neues Mitglied
    Ich denke das könnte dir weiterhelfen:

    Producer Methode
    Code (Text):
        @Produces
            @Named
        @SessionScoped
        public List<Foo> produceFoos() {
                return entityManager.createQuery("from Foo f").getResultList();
        }

    Aufruf mittels EL:


    Code (Text):
    #{produceFoos}
    Injection in andere CDI Bean:

    Code (Text):

    @Inject
    private List<Foo> foos;
    Falls du mehrere "Foo Producer" hast musst du Qualifier verwenden.
     
  9. Schau dir jetzt hier den Kurs an und lerne Java zu programmieren: --> Hier klicken, um mehr zu erfahren (Klick)
Die Seite wird geladen...

Entity-Liste (wie @DataModel bei seam) mit CDI - Ähnliche Themen

Unter OS X: Javadoc generieren (wie???)
Unter OS X: Javadoc generieren (wie???) im Forum IDEs und Tools
(wie) kann man eine 'super'-Methode auf ein Objekt anwenden ?
(wie) kann man eine 'super'-Methode auf ein Objekt anwenden ? im Forum Java Basics - Anfänger-Themen
Dynamisch alles vergrößern (wie im Browser)
Dynamisch alles vergrößern (wie im Browser) im Forum AWT, Swing, JavaFX & SWT
JTable : Header der Spalten ergänzen mit caption (wie bei html-table)
JTable : Header der Spalten ergänzen mit caption (wie bei html-table) im Forum AWT, Swing, JavaFX & SWT
Automatischer Import (wie java.lang)
Automatischer Import (wie java.lang) im Forum IDEs und Tools
Thema: Entity-Liste (wie @DataModel bei seam) mit CDI