¿Cómo uso @ ConversationScoped

Estoy escribiendo una aplicación JSF 2.0 y quiero usar anotaciones CDI en lugar de las anotaciones JSF "equivalentes". En otras palabras, @Model o @Named en lugar de @ManagedBean, y @Inject en lugar de @ ManagedProperty.

Lo único que no puedo hacer para trabajar es @ViewScoped, que es necesario para los componentes AJAX. La única solución confiable es usar @SessionScoped, que no es una buena práctica.

¿Cuál es la práctica correcta? Por mucho que busco, me confundo más.

Esto está en GlassFish 3.1.1, que entiendo tiene Weld 1.1.0 en él.

UPDATE: La forma original de esta pregunta decía que no podía hacer que @ConversationScoped funcionara. Desde entonces encontré mi error y conseguí que funcionara así:

@Model
@ConversationScoped
public class Abean implements Serializable {

@Inject Conversation conversation;

// stuff omitted for brevity

public String getSomething() {
    if (conversation.isTransient()) conversation.begin();
    return "something";
}

Esto parece hacer el truco. Sin embargo, ahora mi pregunta ha cambiado. ¿Dónde se supone que debes llamar a la conversación.end ()? ¿Tengo que escribir un filtro para detectar cuándo el usuario abandona la página? O si se deja solo, ¿cuándo sería elUna judí@ instancia será desreferenciada?

ACTUALIZACIÓN DEL SEGUNDO: Una muy buena discusión de @ConversationScoped de CDI encontréaquí

Todavía me queda el problema de cómo llamar a la conversación.end (). Mi bean proporciona respaldo con estado a un navegador de tabla de datos actualizado a través de AJAX, y el lugar óptimo para llamar al final () es cuando el usuario navega fuera de la página. Sin importar si escribo un filtro para monitorear las páginas, realmente no veo ninguna forma de hacerlo. Cualquier sugerencia de "mejores prácticas" es bienvenida.

Respuestas a la pregunta(2)

Su respuesta a la pregunta