JMS - Message Passando ArrayList e String de uma vez  XML
Índice dos Fóruns » Java Enterprise Edition (Java EE)
Autor Mensagem
maquiavelbona
JWizard
[Avatar]

Membro desde: 29/06/2006 09:06:51
Mensagens: 2447
Localização: São Paulo - SP
Offline

Bom dia a todos.

Estou com um problema meio sério. Tenho um sistema já implementado e funcionando com JMS e passando as mensagens com MapMessage normalmente, só que agora eu preciso que junto desse mapa seja enviado um ArrayList contendo certos valores e em outra classe seja recebido todos os valores separadamente.

Na documentação da API do J2EE, eu tenho como opções ou mandar um MapMessage com minhas informações mas só aceita ou tipos primitivos ou objetos wrappers como eles definem na documentação, "objetos primitivos objetivados", ou um ObjectMessage, mas aí só consigo mandar um objeto por vez. Não posso simplesmente colocar as mensagens e o ArrayList em um outro objeto e mandar por ObjectMessage pois assim geraria muita mudança de código em outras classes que já estão funcionando perfeitamente.

As soluções mais viáveis seriam ou conseguir mandar um MapMessage e um ObjectMessage e o receptor conseguir pegar os dois valores ao mesmo tempo, ou construir um Message na qual possa receber ambos os valores.

Só que no primeiro caso não consegui nem sair do zero, no segundo caso, consegui entender com implementar Message mas tem certos métodos que não sei quais seriam os passos que seriam executados(em especial acknowledge(), todos os métodos que trabalham com o header da mensagem e todos os métodos que trabalham com o properties da mensagem).

Desculpe escrever uma carta mas eu acho que consegui colocar todos os pontos em que pensei e que acho que são úteis. Obrigado antecipadamente por qualquer colaboração.

----------------------------------------------------------------
"Within a few years a simple and inexpensive device, readily carried about, will enable one to receive on land or sea the principal news, to hear a speech, a lecture, a song or play of a musical instrument, conveyed from any other region of the globe. "
Nikola Tesla - A means for furthering Peace (1905)

"Gedanken ohne Inhalt sind leer, Anschauungen ohne Begriffe sind blind."
Immanuel Kant - Kritik der reinen Vernunft (1781)
maquiavelbona
JWizard
[Avatar]

Membro desde: 29/06/2006 09:06:51
Mensagens: 2447
Localização: São Paulo - SP
Offline

Nenhuma alma caridosa irá me ajudar?

----------------------------------------------------------------
"Within a few years a simple and inexpensive device, readily carried about, will enable one to receive on land or sea the principal news, to hear a speech, a lecture, a song or play of a musical instrument, conveyed from any other region of the globe. "
Nikola Tesla - A means for furthering Peace (1905)

"Gedanken ohne Inhalt sind leer, Anschauungen ohne Begriffe sind blind."
Immanuel Kant - Kritik der reinen Vernunft (1781)
Luca
Moderador
[Avatar]

Membro desde: 06/09/2002 14:30:10
Mensagens: 5810
Localização: São Paulo/SP ou Paraty/RJ
Offline

Olá

maquiavelbona wrote:Nenhuma alma caridosa irá me ajudar?


Não é de bom tom fazer isto.

Sobre sua tentativa de usar o que o JMS não permite em MapMessage...

Tutorial J2EE wrote:
Message Bodies

The JMS API defines five message body formats, also called message types, which allow you to send and to receive data in many different forms and provide compatibility with existing messaging formats. Table 33-2 describes these message types.

Table 33-2 JMS Message Types

* TextMessage - A java.lang.String object (for example, the contents of an Extensible Markup Language file).

* MapMessage - A set of name-value pairs, with names as String objects and values as primitive types in the Java programming language. The entries can be accessed sequentially by enumerator or randomly by name. The order of the entries is undefined.

* BytesMessage - A stream of uninterpreted bytes. This message type is for literally encoding a body to match an existing message format.

* StreamMessage - A stream of primitive values in the Java programming language, filled and read sequentially.

* ObjectMessage - A Serializable object in the Java programming language.

* Message - Nothing. Composed of header fields and properties only. This message type is useful when a message body is not required.


The JMS API provides methods for creating messages of each type and for filling in their contents. For example, to create and send a TextMessage, you might use the following statements:

TextMessage message = session.createTextMessage();
message.setText(msg_text); // msg_text is a String
producer.send(message);

At the consuming end, a message arrives as a generic Message object and must be cast to the appropriate message type. You can use one or more getter methods to extract the message contents.


Se você usa o ActimeMQ, há uma extensão que permite enviar Map ou List


Mas em todos os casos é possível transformar seu ArrayList em um array de bytes ou em uma String. Do outro lado, ao receber a mensagem, basta decodificar.

[]s
Luca

Dare Obasanjo (Program Manager at Microsoft)
"The folks I know from across the industry who have to build large scale Web services on the Web today at Google, Yahoo!, Facebook, Windows Live, Amazon, etc are using RESTful Web services. The only times I encounter someone with good things to say about WS-* is if it is their job to pimp these technologies or they have already "invested" in WS-* and want to defend that investment."


CEP, JMS, JMX e coisas afins (ou não)
http://lucabastos.blogspot.com/
[Email] [WWW]
maquiavelbona
JWizard
[Avatar]

Membro desde: 29/06/2006 09:06:51
Mensagens: 2447
Localização: São Paulo - SP
Offline

Desculpe, é que passaram-se mais de 3 dias e já estava sem esperança de resposta.

Aqui usa-se JORAM da ObjectWeb.

Então, eu já tinha feito isso que tu me sugeriste, colocar em uma array e passar dentro do MapMessage, só que não é o ideal, pois essa classe que eu desenvolvi recebe chamadas diferentes de vários outros códigos já feitos e funcionais com outras classes. O que era idealizado que todos esses códigos quando acessassem a minha classe, mandasse junto com o MapMessage, uma ArrayList com algumas URLs que deveriam ser trabalhadas, que já estão implementadas mas não funcionais. Mas como uma construção assim( passando argumentos vários por strings) não daria unidade nem padrão ao projeto(que prioriza uso de objetos complexos ao invés de argumentos aglomerados numa String). A minha intenção nunca foi inventar e sim tentar resolver da melhor maneira possível esse meu causo.

Obrigada pela ajuda Luca, e desculpe quaisquer coisas que possa a ter parecido minha ultima mensagem.

Até mais!

----------------------------------------------------------------
"Within a few years a simple and inexpensive device, readily carried about, will enable one to receive on land or sea the principal news, to hear a speech, a lecture, a song or play of a musical instrument, conveyed from any other region of the globe. "
Nikola Tesla - A means for furthering Peace (1905)

"Gedanken ohne Inhalt sind leer, Anschauungen ohne Begriffe sind blind."
Immanuel Kant - Kritik der reinen Vernunft (1781)
Luca
Moderador
[Avatar]

Membro desde: 06/09/2002 14:30:10
Mensagens: 5810
Localização: São Paulo/SP ou Paraty/RJ
Offline

Olá

Acho que as mensagens devem ser o mais simples possível. E parece que esta também foi a idéia de quem criou a API. Talvez você tenha mesmo que modificar todo o código.

Se você quiser entender melhor a classe MapMessage do Joram veja o arquivo fonte em:
http://www.kickjava.com/src/org/objectweb/joram/client/jms/MapMessage.java.htm

[]s
Luca

Dare Obasanjo (Program Manager at Microsoft)
"The folks I know from across the industry who have to build large scale Web services on the Web today at Google, Yahoo!, Facebook, Windows Live, Amazon, etc are using RESTful Web services. The only times I encounter someone with good things to say about WS-* is if it is their job to pimp these technologies or they have already "invested" in WS-* and want to defend that investment."


CEP, JMS, JMX e coisas afins (ou não)
http://lucabastos.blogspot.com/
[Email] [WWW]
maquiavelbona
JWizard
[Avatar]

Membro desde: 29/06/2006 09:06:51
Mensagens: 2447
Localização: São Paulo - SP
Offline

Opa!

Vou dar uma analizada no código da Message e ver como poderia alterar para ver se posso mandar o que eu quero sem problemas.

Muitíssimo obrigado por ter me ajudado.

Abraços!
Marcos Iriarte

----------------------------------------------------------------
"Within a few years a simple and inexpensive device, readily carried about, will enable one to receive on land or sea the principal news, to hear a speech, a lecture, a song or play of a musical instrument, conveyed from any other region of the globe. "
Nikola Tesla - A means for furthering Peace (1905)

"Gedanken ohne Inhalt sind leer, Anschauungen ohne Begriffe sind blind."
Immanuel Kant - Kritik der reinen Vernunft (1781)
 
Índice dos Fóruns » Java Enterprise Edition (Java EE)
Ir para:   
Powered by JForum 2.1.8 © JForum Team