2012-04-11 8 views
5

Przeprowadzamy migrację naszej aplikacji z JBoss Seam do CDI (JEE6), więc zmieniamy niektóre anotacje, takie jak @In i @Out, jest wiele informacji, które uznaliśmy za przydatne , ale mamy pewne kłopoty próbuje dowiedzieć się, jak wymienić anotations z poszczególnych wzorców:zmiana anotacji z JBoss Seam na CDI (JEE6)

dla @In adnotację

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

możemy użyć @Inject z CDI, ale jak ustawić nazwę kontekstu zmienna dla tego przypadku?

Dla adnotację @Out

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

Czytałem kilka blogów, a oni mówią, że można używać @Produces w CDI, w jaki sposób możemy ustawić zakres, przed lub po dodaniu tego adnotację?

Doceniam każdą pomoc lub pomocną dokumentację.

Odpowiedz

2

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

8,1. Zakres metody producenta

Zakres metody producenta wynosi domyślnie @Dependent, dlatego będzie wywoływany za każdym razem, gdy kontener wstrzyknie to pole lub dowolne inne pole, które zostanie rozwiązane przy użyciu tej samej metody producenta. W związku z tym może istnieć wiele instancji obiektu PaymentStrategy dla każdej sesji użytkownika.

Aby zmienić to zachowanie, możemy dodać adnotację @SessionScoped do metody.

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

można znaleźć https://github.com/seam/migration, wiki dla tego repo i innych plików w nim być pomocny. – LightGuard

3

Obawiam się, że nie ma czegoś takiego jak kompatybilność 1: 1 dla @Out.

Technicznie, @Out w Seam 2 został zrealizowany przez przechwytujący dla wszystkich wywołań metod - to okazało się dość wąskim gardłem wydajności.

W przypadku CDI większość zarządzanych ziaren jest serwerem proxy, co powoduje, że jest technicznie niemożliwe wprowadzenie zniekształceń w trybie Seam 2.

Co możesz zrobić (cóż, tak naprawdę to, co musisz mieć do do) przechodzi przez wszystkie zastosowania @Out i zamienia je pojedynczo z pewną logiką @Producer. Spójrz na this official example tutaj. W Seam 2, musiałbyś wystawić uwierzytelnionego użytkownika na zakres sesji, w CDI mała metoda producenta (prawie) jest taka sama.

To powinno nadzieją daje dobry start, nie krępuj się zadawać dodatkowe pytania :)