Como uso o @ ConversationScoped

Estou escrevendo um aplicativo JSF 2.0 e quero usar anotações CDI em vez das anotações JSF "equivalentes". Em outras palavras, @Model ou @Named em vez de @ManagedBean e @Inject em vez de @ ManagedProperty.

A única coisa que não consigo trabalhar é o @ViewScoped, necessário para os componentes AJAX. A única solução alternativa confiável é usar o @SessionScoped, o que não é uma boa prática.

Qual é a prática correta? Por mais que eu procure, fico mais confuso.

Este é o GlassFish 3.1.1, que eu entendo possui o Weld 1.1.

UPDATE: A forma original desta pergunta dizia que não conseguia que o @ConversationScoped funcionasse. Desde então, encontrei o meu erro e o fiz funcionar da seguinte maneira:

@Model
@ConversationScoped
public class Abean implements Serializable {

@Inject Conversation conversation;

// stuff omitted for brevity

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

Isso parece fazer o truque. No entanto, agora minha pergunta foi alterada. Para onde exatamente você deveria ligar para conversação.end ()? Preciso escrever um filtro para detectar quando o usuário sai da página? Ou, se for deixado sozinho, quando o Abean instância ser de-referenciada?

EGUNDA ATUALIZAÇÃO: Uma discussão muito boa sobre o @ConversationScoped da CDI que encontreiaqui

Ainda me resta o problema de como ligar para o serviço conversion.end (). Meu bean fornece suporte estatal a um navegador de tabela de dados atualizado via AJAX, e o local ideal para chamar end () é quando o usuário navega para fora da página. Por menos que escreva um filtro para monitorar as páginas, não vejo realmente nenhuma maneira de fazer isso. Qualquer sugestão de "prática recomendada" é bem-vind