2012-04-11 3 views
5

Мы переносим наше приложение с JBoss Seam на CDI (JEE6), поэтому мы меняем некоторые анотации, такие как @In и @Out, есть много информации, которую мы нашли полезной , но у нас есть некоторые проблемы, пытаясь выяснить, как заменить АННОТАЦИИ с конкретными особенностями:Изменение аннотаций от JBoss Seam до CDI (JEE6)

для @in этой заметка

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

мы можем использовать @Inject от CDI, но как установить имя контекста переменная для этого случая ?.

Для @out этой заметки

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

Я прочитал некоторые блог, и они говорят, что я могу использовать @Produces в КДИ, как мы можем установить область, до или после добавления этого этой заметки?

Я ценю любую помощь или любую полезную документацию.

ответ

2

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

8,1. Объем метода производителя

Объем метода производителя по умолчанию равен @Dependent, и поэтому он будет вызываться каждый раз, когда контейнер вводит это поле или любое другое поле, которое разрешает один и тот же метод-производитель. Таким образом, для каждого сеанса пользователя может быть несколько экземпляров объекта PaymentStrategy.

Чтобы изменить это поведение, мы можем добавить аннотацию @SessionScoped к методу.

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

Вы можете найти https://github.com/seam/migration, вики для этого файла репо и других в нем, чтобы быть полезно. – LightGuard

3

Боюсь, что нет такой вещи, как 1: 1 для совместимости @Out.

Технически, @Out в Seam 2 был реализован перехватчиком для всех вызовов метода - это оказалось довольно узким местом производительности.

В CDI большинство управляемых бобов проксировано, это делает технически невозможным осуществление выброса в пути 2.

Что вы можете сделать (ну, что вы на самом деле должны делать) проходит через все использований @Out и заменить его индивидуально с некоторой @Producer логикой. Посмотрите на this official example здесь. В Seam 2 вы бы отказали аутентифицированному пользователю в области сеанса, в CDI небольшой метод изготовления (почти) тот же.

Это следует надеяться дать вам хороший старт, не стесняйтесь задавать дополнительные вопросы :)