2012-04-11 12 views
5

Wir migrieren unsere App von JBoss Seam zu CDI (JEE6), also ändern wir einige Anmerkungen wie @In und @Out, es gibt eine Menge von Informationen, die wir hilfreich gefunden haben , aber wir haben einige Probleme zu versuchen, herauszufinden, wie anotations mit bestimmten Mustern zu ersetzen:Ändern von Anmerkungen von JBoss Seam zu CDI (JEE6)

Für @in den Vermerk

@Name("comprobantes")//context name 
... 
@In(create=false,value="autenticadoPOJO",required=false) 
    private UsuarioPOJO autenticadoPOJO; 

wir @Inject von CDI verwenden können, aber, wie der Name des Kontexts zu setzen Variable für diesen Fall ?.

Für die @Out den Vermerk

@Out(scope = ScopeType.SESSION, value = "autenticadoPOJO", required = false) 

ich einige Blogs gelesen haben und sie sagen, dass ich @Produces in CDI verwenden können, wie wir den Umfang festlegen können, vor oder nach dieser Zugabe den Vermerk?

Ich freue mich über jede Hilfe oder hilfreiche Dokumentation.

Antwort

2

http://docs.jboss.org/weld/reference/1.0.0/en-US/html/producermethods.html

8,1. Gültigkeitsbereich einer Producer-Methode

Der Bereich der Producer-Methode ist standardmäßig @Dependent und wird daher jedes Mal aufgerufen, wenn der Container dieses Feld oder ein anderes Feld einfügt, das dieselbe Producer-Methode auflöst. Daher könnte es mehrere Instanzen des PaymentStrategy-Objekts für jede Benutzersitzung geben.

Um dieses Verhalten zu ändern, können Sie der Methode eine @SessionScoped-Annotation hinzufügen.

@Produces @Preferred @SessionScoped 
public PaymentStrategy getPaymentStrategy() { 
    ... 
} 
+0

Sie können https://github.com/seam/migration, das Wiki für diese Repo- und andere Dateien darin finden zu sein hilfreich. – LightGuard

3

Ich fürchte, es gibt nicht so etwas wie eine 1: 1-Kompatibilität für @Out.

Technisch wurde @Out in Seam 2 durch einen Interceptor für alle Methodenaufrufe realisiert - dies stellte sich als ein Performance-Engpass heraus.

In CDI sind die meisten verwalteten Beans proxied, das macht es technisch unmöglich, die Auskopplung in der Seam2-Methode zu implementieren.

Was Sie tun können (na ja, was Sie tatsächlich - tun haben) ist durch alle Verwendungen von @Out gehen und ersetzen sie einzeln mit etwas @Producer Logik. Schauen Sie sich this official example hier an. In Seam 2 hätten Sie den authentifizierten Benutzer in den Session-Bereich ausgelagert, in CDI ist eine kleine Producer-Methode (fast) identisch.

, die hoffentlich sollten Sie einen guten Start geben, fühlen sich frei, weitere Fragen zu stellen :)