# ManagedBean, Named etc.



## melatonin (23. Jun 2011)

Hallo, irgendwie verstehe ich folgendes nicht so richtig.

Wenn ich ein Formular habe, kann ich bei den values doch die Attribute von Klassen angeben.


```
#{meineKlasse.attr}
```

Nun habe ich immer gedacht, dass durch die Annotation @ManagedBean als eine Art Singleton umgesetzt wird, und ich pro Request (default RequestScope), genau auf eine Instanz (Klassenname klein geschrieben) aus dieser Klasse zugreifen kann.

Nun bemerke ich, dass es auch ohne diese Annotation geht.
Ausserdem gibt es dann doch noch @Named. Macht das nicht das gleiche (Registrieren).

Wenn ich nun aber eine Instanz dieser Klasse brauche, und es dem Application Server überlassen was für eine Instanz er mir zurückliefert, kann ich doch mit @Inject oder @EJB arbeiten. Was ist da der Unterschied?

Was ich noch sehe (Namespaces), dass bei Inject nur Singleton zugelassen wird?! Oder kann ich da auch die aus EJB (Stateless, Stateful) nutzen?

Es wäre super, wenn darauf jemand kurz eingehen könnte. Irgendwie wirkt das hier alles bei mir doppelt gemoppelt.

Vielen Dank


----------



## gman (23. Jun 2011)

@Named ist Bestandteil von "Context and Dependency Injection (CDI)" welches erst seit Java EE 6 
Bestandteil von selbigem ist. 

@Inject geht nur bei Attributen von ManagedBeans. Meist werden dadurch Service-Klassen oder
EntityManger injiziert.

Das Thema ist noch um einiges komplexer, ich hoffe ich konnte einige Fingerzeige geben wonach
du weiter suche kannst.


----------



## melatonin (23. Jun 2011)

Sehe ich das richtig, dass @Named auch eine @ManagedBean ist? Also @Named ermöglicht nur nochmehr als ManagedBean?
Es verhält sich so bei mir, ist auch aus jsf zugreifbar.

Beim EntityManager habe ich eigentlich immer nur @PersistenceContext gesehen.


----------



## __zzz__ (24. Jun 2011)

Hallo,

hier findest du die Infos die du brauchst. Besser kann man die Basics eigentlich nicht erklären.
- The Java EE 6 Tutorial

Viel Spaß beim Lesen


----------



## melatonin (24. Jun 2011)

Danke, aber ich habe mir schon diverse Dokumente durchgelesen.

Das Problem daran ist, dass man dem Tutorial keine Fragen stellen kann.
Hätte ich diese Möglichkeit bei dem von dir genannten Tutorial, dann würde sie folgendermaßen lauten:

Angaben zu @ManagedBean


> The @ManagedBean annotation registers the backing bean as a resource with the JavaServer
> Faces implementation.
> ...
> The web page connects to the backing bean through the Expression Language (EL) value
> ...



Angaben zu @Named


> To make a bean accessible through the EL, use the @Named built-in qualifier.



Wo liegt nun der Unterschied? Beide nutze ich in meinem jsf über EL. D. h. beide müssen irgendwo bekannt gegeben sein, also irgendwo registriert.


----------



## gman (24. Jun 2011)

So wie ich das verstehe sind ManagedBeans Bestandteil von JSF und wurden vor Version 2.0 durch
die faces-config.xml konfiguriert. Seit 2.0 sind sie auch durch Annotationen konfigurierbar.

Die Named-Annotation ist wie gesagt Bestandteil von CDI und kam erst mit Java EE 6 dazu und ist
allgemeiner verwendbar, d.h. nicht explizit nur für JSF gedacht.

Irgendwo hab ich mal gelesen (Javalobby auf dzone, glaub ich) das man in Zukunft eher @Named
verwenden sollte und das die ManagedBeans deprecated werden sollten.


----------



## melatonin (24. Jun 2011)

Super, vielen Dank 

Macht es einen Unterschied ob ich nun eine @Stateful Klasse per @Inject oder @EJB injiziere?


----------

