2012-04-11 18 views
5

Stiamo migrando la nostra app da JBoss Seam a CDI (JEE6), quindi stiamo cambiando alcune anotazioni come @In e @Out, ci sono molte informazioni che abbiamo trovato utili , ma abbiamo alcuni problemi cercando di trovare il modo di sostituire anotations con particolari modelli:modifica anotations da JBoss Seam a CDI (JEE6)

per @In anotation

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

possiamo usare @Inject dalla CDI, ma come impostare il nome del contesto variabile per questo caso?

Per l'anotation @Out

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

Ho letto alcuni blog e dicono che posso usare @Produces nel CDI, come possiamo impostare il campo di applicazione, prima o dopo l'aggiunta di questo anotation?

Apprezzo qualsiasi aiuto o documentazione utile.

risposta

2

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

8,1. Ambito del metodo produttore

L'ambito del metodo produttore è impostato su @Dependent e quindi verrà chiamato ogni volta che il contenitore inietta questo campo o qualsiasi altro campo che risolve lo stesso metodo produttore. Pertanto, potrebbero esserci più istanze dell'oggetto PaymentStrategy per ogni sessione utente.

Per modificare questo comportamento, è possibile aggiungere un'annotazione @SessionScoped al metodo.

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

Si possono trovare https://github.com/seam/migration, il wiki per che i file di pronti contro termine e le altre in essa di essere utile. – LightGuard

3

temo non v'è nulla di simile come un 1: 1 per la compatibilità @Out.

Tecnicamente, @Out in Seam 2 è stato realizzato da un intercettore per tutte le chiamate di metodo: si è trattato di un collo di bottiglia piuttosto prestazionale.

In CDI, la maggior parte dei bean gestiti è proxy, ciò rende tecnicamente impossibile implementare l'outjection in Seam 2 way.

Cosa si può fare (o meglio, quello che effettivamente devi fare) sta attraversando tutti gli utilizzi di @Out e sostituirlo individualmente con una logica @Producer. Dai un'occhiata a this official example qui. In Seam 2, avresti espulso l'utente autenticato alla sessione-scope, in CDI un piccolo metodo di produzione ha (quasi) lo stesso.

quindi si spera che vi darà un buon inizio, non esitate a chiedere ulteriori domande :)