Usando o Data Management do FDS através de um sevlet
Estamos fazendo alguns protótipos para celular usando o Flash Lite (em breve em Demos) e um dos requisitos desses protótipos seria atualizar uma interface Flex em tempo real. Já havíamos usado a funcionalidade do Data Management em alguns projetos, mas em todos eles o próprio Flex foi o gerador e o consumor das informações, ou seja, o update, delete e insert dos Assembler partiam de uma interface Flex para o servidor e automaticamente o FDS diparava os selects (fills) para os clientes conectados a um determinado destination. Neste caso, os exemplos da Adobe funcionam normalmente e podemos nos basear na documentação para fazer as aplicações. Mas e se eu quisesse usar o Data Management e tivesse um .jsp ou um servlet processando minhas requisições?
A documentação do FDS é falha neste ponto, mas encontramos uma luz no fim do túnel no JavaDoc da API do FDS. Pudemos entender como podemos criar uma transação do Data Mangement usando a classe flex.data.DataServiceTransaction. Veja o exemplo do método doGet de um servlet que cria uma transação:
-
public void doGet(HttpServletRequest request, HttpServletResponse response)
-
-
//parametors url
-
-
//cria objeto
-
Produto produto = new Produto();
-
produto.setNome(nome);
-
-
//inicia uma transacao do FDS
-
DataServiceTransaction dt = DataServiceTransaction.begin(true);
-
-
//instancia a classe que sera responsavel por insert, delete, update
-
ServicosAssembler servicos = new ServicosAssembler();
-
-
if (action.equals("u")){
-
//cria um item de update na transacao do FDS
-
dt.updateItem("servletpush", produto, null, null);
-
//atualiza o item no BD
-
servicos.updateItem(null, produto, null);
-
}else if(action.equals("i")){
-
//cria um item de insert na transacao do FDS
-
dt.createItem("servletpush", produto);
-
//insere o item no BD
-
servicos.createItem(produto);
-
}else if(action.equals("d")){
-
//cria um item de delete na transacao do FDS
-
dt.deleteItem("servletpush", produto);
-
//deleta o item no BD
-
servicos.deleteItem(produto);
-
}
-
-
//comita a transacao
-
//o fill sera disparado neste momento
-
dt.commit();
-
-
}
Veja que temos que chamar o método estático begin() da classe DataServiceTransaction para iniciar uma transação. Caso estivéssemos em um processamento que tivesse partido do próprio Flex (já em uma transação do FDS), ou seja, tivéssemos em uma classe que foi chamada através do Assembler do FDS, poderíamos instanciar a transação da seguinte maneira: DataServiceTransaction.getCurrentDataServiceTransaction().
Para que a interface seja atualizada em tempo real, chamamos os métodos updateItem, createItem ou deleteItem do DataServiceTransaction. Estes métodos apenas criarão as mensagens que serão consumidas pela interface Flex quando o método fill do Assembler for executado, ou seja, estes métodos não disparam um change para o Assembler . Dessa forma, temos que atualizar o dado fisicamente e utilizamos os métodos do próprio Assembler para fazer isso. No final, damos um commit() da transação, para que o fill seja executado automaticamente para os clientes conectados ao destination (no caso "servletpush").
O uso do Data Management é bem interessante em alguns casos e espero escrever mais sobre ele em breve. Para entender melhor este post é necessário um conhecimento prévio do Data Services. Entranto achei muito importante, pois não exsite nada disso escrito na documentação.
Um comentário para “Usando o Data Management do FDS através de um sevlet”
Boa noite.
Sou programador Java e gostaria de saber, na sua opinião, por onde posso começar a desenvolver com flex + java.Tenho tentado fazer a comunicação do java com o flex , mais não tenho obtido êxito.Já fiz um cadastro com RoR + flex e foi muito rápido.
Estou com a IDE Eclipse com o plugin do flex e já criei um projeto java + flex Native para integrar os dois,mas em termos de comunicação ???Não sei o que usar (BlazeDS, OpenAMF ou Flex Data Server)Qual abordagem seria a mais indicada para pequenas aplicações??
Grato!!
Adicionar comentário
Boa noite.
Sou programador Java e gostaria de saber, na sua opinião, por onde posso começar a desenvolver com flex + java.Tenho tentado fazer a comunicação do java com o flex , mais não tenho obtido êxito.Já fiz um cadastro com RoR + flex e foi muito rápido.
Estou com a IDE Eclipse com o plugin do flex e já criei um projeto java + flex Native para integrar os dois,mas em termos de comunicação ???Não sei o que usar (BlazeDS, OpenAMF ou Flex Data Server)Qual abordagem seria a mais indicada para pequenas aplicações??
Grato!!

