Kurz gesagt: Sie können es sogar mischen ( @Singleton
und @ApplicationScoped
) und es macht in einigen Szenarien Sinn.
(und funktioniert wie erwartet in meinem!)
Zusätzlich zu den anderen bisherigen Antworten möchte ich einige weitere Punkte zur Verdeutlichung in realen Szenarien hinzufügen.
Für mich entstand diese Frage aus Wie erzwinge ich, dass eine Bean mit Anwendungsbereich beim Start der Anwendung instanziiert wird?
In einigen Diskussionen dort habe ich dies festgestellt und kann bisher kein gültiges Argument dagegen finden:
In vielen realen Szenarien / Setups würde ich sagen, dass es aus abstrakter / modellistischer Sicht schwer zu sagen ist, ob etwas eine EJB oder eine anwendungsbezogene verwaltete Bean ist (oder werden wird / wird).
(umstrittene, aber nicht schlüssige) Argumente (aus meiner Sicht) bisher dagegen: (@BalusC und alle anderen: Ich würde gerne sehen, dass sie schlüssig sind, aber wenn nicht, kann das oben Gesagte zutreffen, und dennoch können die Argumente zutreffen helfen Sie dem Leser immer noch, die Unterschiede / Vor- / Nachteile / schlechten / guten Praktiken herauszufinden)
EJB vs. Managed Bean
BalusC : Das ist ein EJB, keine verwaltete Bohne, was ganz anders ist. EJBs werden im Backend ausgeführt und Beans im Frontend verwaltet. EJBs werden auch im Transaktionskontext ausgeführt. [...] Sie haben gerade Enterprise Beans mit Managed Beans verwechselt, und ich habe nur darauf hingewiesen.
aber:
Ich : Ich denke, Sie sind nicht ganz richtig und übertreiben die Bedeutung / Verwendung und es scheint mir fraglich. http://en.wikipedia.org/wiki/Enterprise_JavaBeans
Enterprise JavaBeans (EJB) ist eine verwaltete Serversoftware für den modularen Aufbau von Unternehmenssoftware und eine von mehreren Java-APIs. EJB ist eine serverseitige Softwarekomponente, die die Geschäftslogik einer Anwendung kapselt.
Arten von Enterprise Beans
Session Beans [3], die entweder "Stateful", "Stateless" oder "Singleton" sein können [...]
Message Driven Beans [...]
... was in meinem Fall immer noch gilt.
Singleton EJB vs. Application Scoped Bean
Verriegeln
BalusC : Ein Singleton-EJB ist nicht dasselbe wie eine Bean mit Anwendungsbereich. Ein Singleton-EJB ist Lese- / Schreibsperre und daher möglicherweise ineffizient / überlastet für die von Ihnen geplante Aufgabe. Lange Rede, kurzer Sinn: Besorgen Sie sich ein gutes Java EE-Buch und lernen Sie, das richtige Tool für den Job zu verwenden. Ein Weg ist definitiv nicht der andere. Dass es funktioniert, bedeutet nicht, dass es das richtige Werkzeug ist. Ein Vorschlaghammer kann eine Schraube befestigen, aber es ist nicht unbedingt das richtige Werkzeug dafür :)
aber:
(Ich kann den Vorschlaghammer hier nicht sehen - Entschuldigung ...) Es ist gut, die Standardeinstellungen für das Sperren zu kennen (mir war dies nicht bekannt), aber dies scheint wieder falsch zu sein: Oracle Java EE 6-Lernprogramm zum Verwalten des gleichzeitigen Zugriffs in a Singleton Session Bean
Beim Erstellen einer Singleton-Session-Bean kann der gleichzeitige Zugriff auf die Geschäftsmethoden des Singletons auf zwei Arten gesteuert werden: durch Container verwaltete Parallelität und durch Bean verwaltete Parallelität. [...]
Obwohl Singletons standardmäßig die von Containern verwaltete Parallelität verwenden, kann die Annotation @ConcurrencyManagement (CONTAINER) auf Klassenebene des Singletons hinzugefügt werden, um den Typ der Parallelitätsverwaltung explizit festzulegen
@ApplicationScoped
und@Singleton
in Abschnitt 5.4 (S. 36).