2011-07-03 6 views
8

Studiando JSR-299, ho letto la sezione 5.1 del Weld reference che spiega come funzionano gli ambiti in CDI. Apparentemente, il contesto è un concetto strettamente correlato all'ambito. Ho capito un po 'di ciò che ognuno è, ma non è molto chiaramente separato nella mia mente e mi sento tentato persino di usare le parole in modo intercambiabile.La differenza tra contesto e ambito in CDI - e Java in assoluto

Qual è la differenza tra ambito e contesto? Qual è la relazione tra i due concetti?

Mi aspetto una risposta nel dominio CDI, ma è un dubbio che ho su Java in generale, dal momento che i concetti sono utilizzati anche in altri contesti. In realtà, una risposta che spiega i concetti nel contesto di CDI, Java e in generale otterrebbe più punti - se potessi darli.

risposta

6

Ogni ambito ha un contesto separato.

Il contesto è un contenitore per i fagioli che sono stati definiti con il rispettivo ambito.

Ecco perché le implementazioni di contesto portano il nome del campo di applicazione - ApplicationContext, DependentContext, RequestContext, ecc

Questo è un dettaglio di implementazione in realtà - come un utente di CDI si dovrebbe conoscere solo sugli ambiti (perché la si definisce per i tuoi fagioli) e l'implementazione decide dove posizionare i bean e come gestirne il ciclo di vita.

+1

Buon punto. Consentitemi di aggiungere che in Seam 2 ** context ** era il concetto di cui l'utente era a conoscenza ('@ In',' @ Out'), mentre in CDI ** scope ** è la strada da percorrere. Questo è certamente un cambiamento di prospettiva. –

+0

Dove posso leggere di più su queste classi Context (Javadoc o altra documentazione)? – Puce

+0

http://docs.oracle.com/javaee/6/tutorial/doc/giwhb.html – Bozho

2

La mia comprensione è che l'ambito si riferisce a dove è possibile accedere a un oggetto, mentre il contesto enumera gli oggetti a cui è possibile accedere da un punto particolare nell'esecuzione del programma. (Cioè, parliamo della portata di un oggetto, e del contesto in qualche punto particolare nell'esecuzione del programma.)

Matematicamente parlando, entrambi descrivono la relazione di accesso, ma la guardano in direzioni diverse.

+0

probabilmente più preciso dire l'ambito di una variabile * * – irreputable

+0

Mentre sono d'accordo con quello in generale, ciò sarebbe fuorviante quando si parla di CDI, poiché CDI definisce veramente gli ambiti per gli oggetti, non le variabili. (In CDI, un oggetto viene eseguito al di fuori dell'ambito (e quindi distrutto) completamente indipendente da qualsiasi variabile che lo indichi). – meriton

+0

non 'variabile' in senso Java, ma in senso generale. se due sessioni possono condividere un oggetto, non è corretto parlare * dell'ambito * della sessione dell'oggetto * *. – irreputable

1

In primo luogo, abbiamo concetti nella nostra testa come applicazioni, sessioni, richieste. Usiamo il concetto di sessione nei seguenti esempi.

Se consideriamo che un'esecuzione è in corso per una determinata sessione, diremo che la sessione è parte del contesto dell'esecuzione; oppure, è il contesto di sessione dell'esecuzione.

Una sessione ha alcune variabili, ad es. userName; diremo che la sessione è lo scopo di queste variabili.

Poiché entrambi puntano alla stessa sessione, possono generare confusione. Ad esempio,

get the userName from the session context 
get the userName from the session scope 

entrambi suonano bene, perché stiamo parlando di un'esecuzione su una variabile.

L'esempio seguente è intelligibile per la definizione del campo di applicazione

the scope of the injected bean is Session 

ma non abbiamo difficoltà a comprendere ciò che sta realmente accadendo. Se lo vogliamo, possiamo espanderlo fino a quando si basa su usi basilari delle parole; non lo facciamo perché sarà molto prolisso.

Un autore affronta il difficile compito di impacchettare le parole in modo succinto, ma si aspetta che i lettori in qualche modo capiscano il significato complesso.I testi sul contesto e l'ambito appaiono di solito incomprensibili per coloro che non hanno capito i concetti.

I nomi API sono ancora più difficili da trovare, perché i codici non sono frasi inglesi. Context o Scope sono praticamente intercambiabili. Se c'è solo un oggetto che rappresenta una sessione, la classe probabilmente dovrebbe essere denominata solo Session. Se dividiamo la parte sulla manipolazione delle variabili, quella parte può essere chiamata SessionScope. Tuttavia, il significato di SessionContext è troppo elusivo, il meglio che possiamo dire, dal solo nome, è che si tratta di qualcosa di una sessione - il "contesto" qui è praticamente un'espirazione.

+0

Il mio problema è esattamente quello di spiegare quali sono i contesti e gli ambiti in un articolo. Sia la tua spiegazione che quella del Meriton hanno senso per me e sembrano parlare più o meno della stessa cosa, anche se ho trovato la sua spiegazione più allineata a ciò che "sento". La mia speranza era di ottenere alcune definizioni standard, largamente adottate, ma a quanto pare dovrò scegliere la mia definizione, sfortunatamente ... – brandizzi

Problemi correlati