Postar e receber objetos serializados com Sevlet (via Swing + URLConnection) - RESOLVIDO!!  XML
Índice dos Fóruns » Desenvolvimento Web
Autor Mensagem
dooda
JavaChild
[Avatar]

Membro desde: 26/12/2006 16:05:19
Mensagens: 146
Localização: Cascavel-PR
Offline

Olá pessoal, depois de muito procurar sobre minha duvida ate consegui desenvolver alguma coisa, mas ainda não está como quero...

Tenho uma aplicação desktop com swing que se comunica com app web via Servlets usando o URLConnection ok?!
mais ou menos assim:

Eis a classe parser...

Meu servlet, le isso des-serializa o "param" para Bairro, executa uma pesquisa, serializa retorna o objeto novamente...

A questão é:
Consigo fazer isso de forma mais elegante? postando/gravando diretamente em bytes? como o upload de um arquivo eu acho...
Tambem penso que com params String, caso eu venha usar um List<?> serializado pode haver problemas com tamanho e os caracteres da codificação...

Não quero usar XML, nem EJB (pois uso Tomcat somente e a aplicação é relativamente simples)...
e uso URLConnection pois quanto menor ficar o jar da aplicação no cliente é melhor...

Alguem sugere algo ??

Obrigado desde já!!

This message was edited 1 time. Last update was at 07/04/2010 14:58:22


=)
[Email] [WWW] [MSN]
dooda
JavaChild
[Avatar]

Membro desde: 26/12/2006 16:05:19
Mensagens: 146
Localização: Cascavel-PR
Offline

ops, se eu postei no forum errado, pois swing e tals... se preferirem, pode mover...

=)
[Email] [WWW] [MSN]
plic_ploc
JavaChild

Membro desde: 11/06/2006 18:55:12
Mensagens: 137
Localização: Ibitinga - SP
Offline

E ai dooda!

Vou te passar um exemplo simples e objetivo que irá solucionar seu problema!

MyObject:


Servlet:


Requisição:


Usei : jgates.sourceforge.net

Java MVC - Brutos framework
Faça o download de um WebChat feito usando o Brutos MVC
dooda
JavaChild
[Avatar]

Membro desde: 26/12/2006 16:05:19
Mensagens: 146
Localização: Cascavel-PR
Offline

Obrigado Mr. plic_ploc mas para a "postagem" no servlet qual seria a sugestão usando JSON então?

poss no servlet receber com:


e na postagem como envio o objeto? via parametro ainda? ou da pra escreve no outputStream da URLConnection?

Obrigado por enquanto...

=)
[Email] [WWW] [MSN]
plic_ploc
JavaChild

Membro desde: 11/06/2006 18:55:12
Mensagens: 137
Localização: Ibitinga - SP
Offline

Nesse outro exemplo, o objeto é enviado ao servlet e o servlet devolve o objeto.

Requisição:


Servlet:

Java MVC - Brutos framework
Faça o download de um WebChat feito usando o Brutos MVC
dooda
JavaChild
[Avatar]

Membro desde: 26/12/2006 16:05:19
Mensagens: 146
Localização: Cascavel-PR
Offline

Obrigdo novamente, com teu exemplo, consegui usando a propria classe de parses com Base64 que eu ja estava usando...



assim já melhorou bastante, qualquer avanço, posto aqui novamene...

vallew's

=)
[Email] [WWW] [MSN]
dooda
JavaChild
[Avatar]

Membro desde: 26/12/2006 16:05:19
Mensagens: 146
Localização: Cascavel-PR
Offline

Finalmente com um pouco mais de estudos cheguei ao resultado que gostaria sem nenhuma biblioteca/jar a mais...

Meu servlet ficou assim:


Meu programa teste ficou assim:


e o "Bairro" é apenas um POJO que implementa Serializable...

O resultado pra mim ficou perfeito, será que pode haver algum problema nesse tipo de comunicação?

Por enquanto esta ótimo assim!
Vallew...

=)
[Email] [WWW] [MSN]
rfsilva
Thread.start()
[Avatar]

Membro desde: 25/02/2009 14:04:32
Mensagens: 25
Localização: Vitória-ES
Offline

dooda wrote:Finalmente com um pouco mais de estudos cheguei ao resultado que gostaria sem nenhuma biblioteca/jar a mais...

Meu servlet ficou assim:


Meu programa teste ficou assim:


e o "Bairro" é apenas um POJO que implementa Serializable...

O resultado pra mim ficou perfeito, será que pode haver algum problema nesse tipo de comunicação?

Por enquanto esta ótimo assim!
Vallew...


Oi dooda!

Vc recebeu algum feedback a respeito de possíveis problemas com esse tipo de comunicação? Estou prestes a adotar essa ideia, e queria saber a respeito!
Obrigado!
Rodrigo

Eu nunca morri na minha vida, pois sou computeiro, não desisto nunca!!! Por isso, sobreviveremos até a morte!!!
[MSN]
dooda
JavaChild
[Avatar]

Membro desde: 26/12/2006 16:05:19
Mensagens: 146
Localização: Cascavel-PR
Offline

Cara!!! o que posso te afirmar com certeza é que trabalhei em outro projeto que tratava tudo com .xml e num projeto pessoal que esta funcionamento ate hoje.

Este modelo de comunicação, que foi um pouco aprimorado, funciona mais do que perfeitamente... estamos muito satisfeitos com os resultados e não mudaríamos não.

No modelo abaixo todas as classes que navegam pela nuvem, usamos externalização ou invés de serialização, pelo fato de heranças e muitos objetos e atrbiutos inuteis nas classes comuns, então na externalização, nós definimos como e quais campos serão transmitidos basicamente...

Tambem usamos um Objeto genérico para transmissão, uma especie de classe protocolo e ao enviar para a nuvem tambem compactamos usando o GZip. Então compartilhamos entre client e server o mesmo jar assinado que é comum entre eles...

Enfim, com isso conseguimos trafegar arrays de bytes entre os dois e assim transmitir arquivos com umas melhoras aqui e acolá. O que ressalto é que em nosso projeto funciona mais do que bem, e alguns trechos de codigos e comunicação foram projetados já pensando nesse ambiente.

Fizemos testes de carga no server, uso de banda, etc etc com JBoss 5 ainda, e tudo se mostrou mto bom pra nós...

Poste suas experiencias e considerações assim que tive-las...
Um grande abraço!!

=)
[Email] [WWW] [MSN]
mateus.cordeiro
JavaChild
[Avatar]

Membro desde: 06/07/2011 23:39:47
Mensagens: 128
Localização: São Paulo - SP
Offline

Dooda,
Muito bom esse material que vc disponibilizou, porem to com um problema aqui.

Quando eu rodo o Servlet e o teste.class do mesmo projeto, funciona de boa tranquilo!

Agora o problema está sendo quando eu rodo o tomcat com o servlet e tento acessar de um outro projeto em swing.
No debug ele vai ate essa linha:

ObjectInputStream ois = new ObjectInputStream(conn.getInputStream());

Depois ele retorna erro = null e eu não to conseguindo resolver isso;

Segue meu servlet:


Segue o class que faz a conexao com servlet de dentro de um swing:


Obrigado

This message was edited 1 time. Last update was at 08/02/2012 12:57:18


VIVA O GUJ!
dooda
JavaChild
[Avatar]

Membro desde: 26/12/2006 16:05:19
Mensagens: 146
Localização: Cascavel-PR
Offline

Ola Mateus,

Que bom que o material lhe foi util, é isso que mantém o GUJ =), vamos ao seu caso.

Noto que na linha que da o erro no teu client swing você esta tentando recuperar o InputStream da conexão. Porém no teu servlet você escreve com WriteUTF8();
Não consigo testar aqui no servico, mas tente assim:



O bacana dessa solução é trafegar os objetos serializados tanto pra envio quanto pra recebimento, uma dica, que usamos aqui, é um Objeto Protocolo, que que é enviado e recebido, ele contem alguns atributos como Classe, Método, Parametros, Sucesso, Mensagem etc...

Posta ai o resultado...
Abraço!


=)
[Email] [WWW] [MSN]
mateus.cordeiro
JavaChild
[Avatar]

Membro desde: 06/07/2011 23:39:47
Mensagens: 128
Localização: São Paulo - SP
Offline

Amigo,
Ainda está dando o mesmo erro:

java.io.EOFException
at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2280)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2749)
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:779)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:279)
at digitacao.EnviarObjeto.enviando(EnviarObjeto.java:39)

VIVA O GUJ!
dooda
JavaChild
[Avatar]

Membro desde: 26/12/2006 16:05:19
Mensagens: 146
Localização: Cascavel-PR
Offline

Mateus,

Tambem não consigo confirmar isso pra ti, vejo que no teu client vc usa java.net.URLConnection, em meu comunicador uso java.net.HttpURLConnection.

E ai abrir a conexão, faço o cast dai



Tambem confirme se ele escreve mesmo no output no servlet



Veja lá...
abraço!

=)
[Email] [WWW] [MSN]
mateus.cordeiro
JavaChild
[Avatar]

Membro desde: 06/07/2011 23:39:47
Mensagens: 128
Localização: São Paulo - SP
Offline

Apenas p saber, eu criei um objeto no projeto do servlet e outro no projeto do swgin os dois assim:



Está correto?

VIVA O GUJ!
dooda
JavaChild
[Avatar]

Membro desde: 26/12/2006 16:05:19
Mensagens: 146
Localização: Cascavel-PR
Offline

hmm, não sei se era esse teu problema,

Mas você deve ter um objeto só, ou seja, um terceiro projeto com este teu "Objeto" então vc exporta o jar, e usa ele tanto no client/swing como no server/servlet.

Vai tentando, qualquer progresso, posta ai.
=)

=)
[Email] [WWW] [MSN]
 
Índice dos Fóruns » Desenvolvimento Web
Ir para:   
Powered by JForum 2.1.8 © JForum Team