2015-08-25 11 views
5

Ist es erlaubt (und bewährtes Verfahren), einige gemeinsam genutzte Informationen in unserer Anwendung zu speichern, indem wir eine Singleton-Session-Bean in einer Stateless Session-Bean verwenden?Singleton-Session-Bean in eine Stateless-Session injizieren Bean

Der SSB wird in den SLSB injiziert.

@Stateless 
public class MySLSB { 

    @Inject 
    MySSB mySSB; 

-

@Singleton 
@Lock(READ) 
public class MySSB implements Serializable { 

    private static final long serialVersionUID = 1L; 
+0

Können Sie bitte ein Beispiel vorstellen, wie Sie es tatsächlich in Ihrem Code verwenden? Es wird mir hilfreich sein. – SacJn

+1

Als Beispiel benötigen wir einige Konfiguration in unserer Anwendung. Diese Konfiguration wird als Entität in unserer Datenbank gespeichert und muss vor der Verwendung analysiert werden. Um zu vermeiden, dass diese Konfiguration jedes Mal geladen und analysiert wird, müssen wir nur einmal die analysierte Konfiguration im SSB als Objekt speichern. – Gatschet

Antwort

6

Es ist mehr als erlaubt. Wenn Sie Singleton-Injektionen in Ihren zustandslosen oder Stateful EJBs verwenden, können Sie Geschäftsmethoden auf Ihrem SSB in Ihrem SLSB aufrufen. Einer der trivialen Vorteile ist die gleichzeitige Verwendung von SSB-Funktionen. In Ihrem Beispiel wären alle Ihre Methodenaufrufe zu Ihnen SSB auf Read gesperrt und das bedeutet, dass alle Threads auf Ihre SSB-Methoden im Read-Modus zugreifen würden, es sei denn, ein Thread hält eine Sperre für Write.

1

Ja, ist es erlaubt, und ich denke, es ist eine gute Praxis ist. In Projekten, mit denen ich arbeite, werden globale Eigenschaften gespeichert, die aus der Datei gelesen werden. Es ist eine gute Übung, weil Sie es an einem Ort speichern und wenn Sie diese Informationen benötigen, dann müssen Sie nur Ihre Singleton-Bohnen injizieren. Ich denke, es ist ein gutes Beispiel für Hollywood-Prinzip.