leandrosilva-sparrow 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 Leandro Silva
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,7 @@
1
+ = sparrow
2
+
3
+ Sparrow is a JMS client (JRuby based).
4
+
5
+ == Copyright
6
+
7
+ Copyright (c) 2009 Leandro Silva. See LICENSE for details.
data/Rakefile ADDED
@@ -0,0 +1,49 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "sparrow"
8
+ gem.summary = %Q{Sparrow is a JMS client (JRuby based)}
9
+ gem.email = "leandrodoze@gmail.com"
10
+ gem.homepage = "http://github.com/leandrosilva/sparrow"
11
+ gem.authors = ["Leandro Silva"]
12
+ gem.files = FileList["[A-Z]*", "{lib,spec}/**/*"]
13
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
14
+ end
15
+ rescue LoadError
16
+ puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
17
+ end
18
+
19
+ require 'rake/rdoctask'
20
+ Rake::RDocTask.new do |rdoc|
21
+ rdoc.rdoc_dir = 'rdoc'
22
+ rdoc.title = 'sparrow'
23
+ rdoc.options << '--line-numbers' << '--inline-source'
24
+ rdoc.rdoc_files.include('README*')
25
+ rdoc.rdoc_files.include('lib/**/*.rb')
26
+ end
27
+
28
+ require 'rake/testtask'
29
+ Rake::TestTask.new(:test) do |test|
30
+ test.libs << 'lib' << 'test'
31
+ test.pattern = 'test/**/*_test.rb'
32
+ test.verbose = false
33
+ end
34
+
35
+ begin
36
+ require 'rcov/rcovtask'
37
+ Rcov::RcovTask.new do |test|
38
+ test.libs << 'test'
39
+ test.pattern = 'test/**/*_test.rb'
40
+ test.verbose = true
41
+ end
42
+ rescue LoadError
43
+ task :rcov do
44
+ abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
45
+ end
46
+ end
47
+
48
+
49
+ task :default => :test
data/VERSION.yml ADDED
@@ -0,0 +1,4 @@
1
+ ---
2
+ :minor: 0
3
+ :major: 1
4
+ :patch: 0
data/lib/connection.rb ADDED
@@ -0,0 +1,157 @@
1
+ # Classes java usadas nesse arquivo
2
+ import 'java.util.Hashtable'
3
+ import 'javax.naming.InitialContext'
4
+
5
+ module Sparrow
6
+ module JMS
7
+ module Connection
8
+
9
+ #
10
+ # Configura��es necess�rias para que clientes JMS se conectem
11
+ # ao servidor de aplica��es Java EE via JNDI Context.
12
+ #
13
+ class Properties
14
+ attr_accessor :client_jar_file,
15
+ :initial_context_factory, :provider_url,
16
+ :security_principal, :security_credentials
17
+
18
+ #
19
+ # Cria um Hashtable Java contendo as configura��es atuais.
20
+ #
21
+ def to_jndi_environment_hashtable
22
+ jndi_env = Hashtable.new
23
+
24
+ jndi_env.put(
25
+ InitialContext::INITIAL_CONTEXT_FACTORY, @initial_context_factory)
26
+
27
+ jndi_env.put(
28
+ InitialContext::PROVIDER_URL, @provider_url)
29
+
30
+ jndi_env.put(
31
+ InitialContext::SECURITY_PRINCIPAL, @security_principal)
32
+
33
+ jndi_env.put(
34
+ InitialContext::SECURITY_CREDENTIALS, @security_credentials)
35
+
36
+ jndi_env
37
+ end
38
+
39
+ #
40
+ # Constroi um contexto JNDI inicial a partir das configura��es atuais.
41
+ #
42
+ def build_jndi_context
43
+ # Carrega a biblioteca cliente do servidor de aplica��es
44
+ require @client_jar_file
45
+
46
+ InitialContext.new(to_jndi_environment_hashtable)
47
+ end
48
+ end
49
+
50
+ #
51
+ # Cliente JMS que possibilita a conex�o com o servidor de aplica��es Java EE
52
+ # que prov� o servi�o JMS.
53
+ #
54
+ class Client
55
+ attr_reader :properties
56
+
57
+ def initialize(&configurator)
58
+ @properties = Properties.new
59
+
60
+ begin
61
+ configurator.call(@properties)
62
+
63
+ @jndi_context = properties.build_jndi_context
64
+ rescue => cause
65
+ raise ClientInitializationError.new(@properties, cause)
66
+ end
67
+
68
+ # Conex�es, filas, t�picos, senders e receivers que ser�o habilitados
69
+ @connection_factories = {}
70
+ @queues = {}
71
+ @queue_senders = {}
72
+ @queue_receivers = {}
73
+ @topics = {}
74
+ @topic_senders = {}
75
+ @topic_receivers = {}
76
+ end
77
+
78
+ def enable_connection_factories(jndi_names={})
79
+ jndi_names.each_pair do |key, jndi_name|
80
+ @connection_factories[key] = @jndi_context.lookup(jndi_name)
81
+ end
82
+ end
83
+
84
+ def queue_connection_factory
85
+ @connection_factories[:queue_connection_factory]
86
+ end
87
+
88
+ def topic_connection_factory
89
+ @connection_factories[:topic_connection_factory]
90
+ end
91
+
92
+ def enable_queues(jndi_names={})
93
+ jndi_names.each do |key, jndi_name|
94
+ @queues[key] = @jndi_context.lookup(jndi_name)
95
+ end
96
+ end
97
+
98
+ def queue_enabled?(queue_name)
99
+ @queues.include?(queue_name)
100
+ end
101
+
102
+ def queue(queue_name)
103
+ raise NameError, "Queue '#{queue_name}' does not exist." unless queue_enabled?(queue_name)
104
+
105
+ @queues[queue_name]
106
+ end
107
+
108
+ def queue_sender(queue_name)
109
+ @queue_senders[queue_name] ||=
110
+ Messaging::Sender.new(queue_connection_factory, queue(queue_name))
111
+ end
112
+
113
+ def queue_receiver(queue_name)
114
+ @queue_receivers[queue_name] ||=
115
+ Messaging::Receiver.new(queue_connection_factory, queue(queue_name))
116
+ end
117
+
118
+ def enable_topics(jndi_names={})
119
+ jndi_names.each do |key, jndi_name|
120
+ @topics[key] = @jndi_context.lookup(jndi_name)
121
+ end
122
+ end
123
+
124
+ def topic_enabled?(topic_name)
125
+ @topics.include?(topic_name)
126
+ end
127
+
128
+ def topic(topic_name)
129
+ raise NameError, "Topic '#{topic_name}' does not exist." unless topic_enabled?(topic_name)
130
+
131
+ @topics[topic_name]
132
+ end
133
+
134
+ def topic_sender(topic_name)
135
+ @topic_senders[topic_name] ||=
136
+ Messaging::Sender.new(topic_connection_factory, topic(topic_name))
137
+ end
138
+
139
+ def topic_receiver(topic_name)
140
+ @topic_receivers[topic_name] ||=
141
+ Messaging::Receiver.new(topic_connection_factory, topic(topic_name))
142
+ end
143
+ end
144
+
145
+ class ClientInitializationError < StandardError
146
+ attr_reader :properties, :cause
147
+
148
+ def initialize(properties, cause)
149
+ super("Could not open connection to the server. Verify the properties's properties.")
150
+
151
+ @properties = properties
152
+ @cause = cause
153
+ end
154
+ end
155
+ end
156
+ end
157
+ end
Binary file
data/lib/jee/jms.jar ADDED
Binary file
Binary file
data/lib/jee.rb ADDED
@@ -0,0 +1,14 @@
1
+ # Defini��o do diret�rios onde est�o as libs
2
+ JEE_LIB_DIR = File.expand_path(File.dirname(__FILE__)) + '/jee'
3
+
4
+ # Antes de qualquer outra, a fundamental
5
+ require 'java'
6
+
7
+ # Biblioteca essencial de integra��o com JMS
8
+ require "#{JEE_LIB_DIR}/sparrow-essential.jar"
9
+
10
+ # Biblioteca Java EE principal
11
+ require "#{JEE_LIB_DIR}/javaee-1.5.jar"
12
+
13
+ # Biblioteca da API JMS
14
+ require "#{JEE_LIB_DIR}/jms.jar"
data/lib/messaging.rb ADDED
@@ -0,0 +1,230 @@
1
+ # Classes java usadas nesse arquivo
2
+ import 'javax.jms.Session'
3
+ import 'javax.jms.MessageListener'
4
+
5
+ module Sparrow
6
+ module JMS
7
+ module Messaging
8
+
9
+ #
10
+ # Tempo padr�o de timeout no recebimento de mensagens = 1 milesegundo.
11
+ #
12
+ DEFAULT_RECEIVER_TIMEOUT = 1000
13
+
14
+ #
15
+ # Classe base para mensageiros, que enviam ou recebem mensagens, tanto
16
+ # para filas ou t�picos.
17
+ #
18
+ class Base
19
+ def initialize(connection_factory, destination)
20
+ # F�brica de conex�es JMS
21
+ @connection_factory = connection_factory
22
+
23
+ # Destino JMS para envio ou recebimento de mensagens
24
+ @destination = destination
25
+ end
26
+ end
27
+
28
+ #
29
+ # Emissor de mensagens.
30
+ #
31
+ class Sender < Base
32
+ def send_text_message(text)
33
+ send_message do |session|
34
+ text_message = session.create_text_message(text)
35
+
36
+ # Se houver uma bloco para tratamento da mensagem
37
+ if block_given?
38
+ yield(text_message)
39
+ end
40
+
41
+ text_message
42
+ end
43
+ end
44
+
45
+ def send_object_message(object)
46
+ send_message do |session|
47
+ object_message = session.create_object_message(object)
48
+
49
+ # Se houver uma bloco para tratamento da mensagem
50
+ if block_given?
51
+ yield(object_message)
52
+ end
53
+
54
+ object_message
55
+ end
56
+ end
57
+
58
+ def send_map_message
59
+ send_message do |session|
60
+ map_message = session.create_map_message
61
+
62
+ # Se houver uma bloco para tratamento da mensagem
63
+ if block_given?
64
+ yield(map_message)
65
+ end
66
+
67
+ map_message
68
+ end
69
+ end
70
+
71
+ def send_messages(&message_sender)
72
+ # Cria uma conex�o, uma sess�o e um emissor de qualquer tipo de mensagem
73
+ connection = @connection_factory.create_connection
74
+ session = connection.create_session(true, Session::AUTO_ACKNOWLEDGE)
75
+ producer = session.create_producer(@destination)
76
+
77
+ # Passa o controle que trata a emiss�o de mensagens
78
+ message_sender.call(session, producer)
79
+
80
+ # Fecha a conex�o
81
+ connection.close
82
+ end
83
+
84
+ # --- Private methods --- #
85
+ private
86
+
87
+ def send_message(&message_creator)
88
+ # Cria uma conex�o, uma sess�o e um emissor de qualquer tipo de mensagem
89
+ connection = @connection_factory.create_connection
90
+ session = connection.create_session(true, Session::AUTO_ACKNOWLEDGE)
91
+ producer = session.create_producer(@destination)
92
+
93
+ # Obtem uma mensagem (TextMessage, ObjectMessage ou MapMessage) do criador especifico
94
+ message = message_creator.call(session)
95
+
96
+ # Envia a mensagem
97
+ producer.send(message)
98
+
99
+ # Commita a sess�o e fecha a conex�o
100
+ session.commit
101
+ connection.close
102
+ end
103
+ end
104
+
105
+ #
106
+ # Receptor de mensagens.
107
+ #
108
+ class Receiver < Base
109
+ def receive_message(criteria_for_receiving = {:timeout => DEFAULT_RECEIVER_TIMEOUT, :selector => ''}, &message_handler)
110
+ # Cria uma conex�o, uma sess�o e um consumidor de qualquer tipo de mensagem
111
+ connection = @connection_factory.create_connection
112
+ session = connection.create_session(false, Session::AUTO_ACKNOWLEDGE)
113
+ consumer = session.create_consumer(@destination, criteria_for_receiving[:selector])
114
+
115
+ # Prepara a conex�o para receber mensagens
116
+ connection.start
117
+
118
+ # Inicia o recebimento de mensagens
119
+ timeout = criteria_for_receiving[:timeout] || DEFAULT_RECEIVER_TIMEOUT
120
+
121
+ while (received_message = consumer.receive(timeout))
122
+ # Inclui o modulo de identifica��o de mensagem, util para o message_handler
123
+ class << received_message
124
+ include MessageType
125
+ end
126
+
127
+ # Delega o tratamento da mensagem para o bloco recebido
128
+ message_handler.call(received_message)
129
+ end
130
+
131
+ # Fecha a conex�o
132
+ connection.close
133
+ end
134
+ end
135
+
136
+ #
137
+ # Ouvintes de mensagens.
138
+ #
139
+ # TODO: Completar a implementa��o. Ainda n�o est� legal.
140
+ #
141
+ class Listener < Base
142
+ include MessageListener
143
+
144
+ def initialize(connection_factory, destination)
145
+ super(connection_factory, destination)
146
+ end
147
+
148
+ def criteria_for_receiving(criteria = {:timeout => DEFAULT_RECEIVER_TIMEOUT, :selector => ''})
149
+ # Valor default para timeout, caso n�o tenha sido informado
150
+ @criteria_for_receiving[:timeout] = criteria[:timeout] || DEFAULT_RECEIVER_TIMEOUT
151
+ end
152
+
153
+ #
154
+ # Nome pelo qual este listener ser� conhecido.
155
+ #
156
+ # Invariavelmente deve ser re-implementado nas subclasses.
157
+ #
158
+ def name
159
+ raise Utils::Exception::AbstractMethodError.new('name')
160
+ end
161
+
162
+ #
163
+ # Destino JMS que ser� escutado.
164
+ #
165
+ # Invariavelmente deve ser re-implementado nas subclasses.
166
+ #
167
+ def destination_name
168
+ raise Utils::Exception::AbstractMethodError.new('destination_name')
169
+ end
170
+
171
+ #
172
+ # Inicia a escuta de mensagens.
173
+ #
174
+ def start_listening
175
+ # Cria uma conex�o, uma sess�o e um consumidor de qualquer tipo de mensagem
176
+ connection = @connection_factory.create_connection
177
+ session = connection.create_session(false, Session::AUTO_ACKNOWLEDGE)
178
+ consumer = session.create_consumer(@destination, @criteria_for_receiving[:selector])
179
+
180
+ # Registra-se como ouvinte
181
+ consumer.message_listener = self
182
+
183
+ # inicia a escuta de mensagens
184
+ connection.start
185
+ end
186
+
187
+ #
188
+ # Faz o enriquecimento do objeto mensagem e delega para o m�todo on_receive_message
189
+ # que, implementado pelas subclasses, efetivamente trata a mensagem.
190
+ #
191
+ # N�o deve ser re-implementado por subclasses.
192
+ #
193
+ def on_message(received_message)
194
+ class << received_message
195
+ include MessageType
196
+ end
197
+
198
+ on_receive_message(received_message)
199
+ end
200
+
201
+ #
202
+ # � executado todas as vezes que chega uma mensagem que atenda aos crit�rios
203
+ # definido para este listener (na vari�vel de inst�ncia @criteria).
204
+ #
205
+ # Invariavelmente deve ser re-implementado nas subclasses.
206
+ #
207
+ def on_receive_message(received_message)
208
+ raise Utils::Exception::AbstractMethodError.new('on_receive_message')
209
+ end
210
+ end
211
+ end
212
+
213
+ #
214
+ # Identifica o tipo de uma mensagem.
215
+ #
216
+ module MessageType
217
+ def is_text_message?
218
+ respond_to? :get_text
219
+ end
220
+
221
+ def is_object_message?
222
+ (respond_to? :get_object and !(respond_to? :get_long))
223
+ end
224
+
225
+ def is_map_message?
226
+ respond_to? :get_long
227
+ end
228
+ end
229
+ end
230
+ end
data/lib/sparrow.rb ADDED
@@ -0,0 +1,9 @@
1
+ $LOAD_PATH.unshift(File.dirname(File.expand_path(__FILE__)))
2
+
3
+ # Bibliotecas Java necessárias
4
+ require 'jee.rb'
5
+
6
+ # Bibliotecas sparrow
7
+ require 'connection.rb'
8
+ require 'messaging.rb'
9
+ require 'utils.rb'
data/lib/utils.rb ADDED
@@ -0,0 +1,11 @@
1
+ module Sparrow
2
+ module Utils
3
+ module Exception
4
+ class AbstractMethodError < StandardError
5
+ def initialize(method_name)
6
+ super("The '#{self.class}##{method_name}' is a abstract method. Definition is a subclass responsibility.")
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,72 @@
1
+ require File.dirname(File.expand_path(__FILE__)) + '/spec_helper.rb'
2
+
3
+ #
4
+ # Cen�rio de configura��o do cliente JMS, quando s�o informadas as propriedades de ambiente
5
+ # para conex�o com o servidor de aplica��es e a inicializa��o do contexto JNDI inicial,
6
+ # onde est�o criadas as connection factories, queues e topics.
7
+ #
8
+ describe Sparrow::JMS::Connection::Client, ', quando esta sendo configurado,' do
9
+
10
+ before(:all) do
11
+ @jms_client = create_jms_client
12
+ end
13
+
14
+ it 'deveria permitir habilitar uma connection factory especifica para queues' do
15
+ @jms_client.enable_connection_factories(
16
+ :queue_connection_factory => 'jms/PardalQCF'
17
+ )
18
+
19
+ @jms_client.queue_connection_factory.should_not be nil
20
+ end
21
+
22
+ it 'deveria permitir habilitar uma connection factory especifica para topics' do
23
+ @jms_client.enable_connection_factories(
24
+ :topic_connection_factory => 'jms/PardalTCF'
25
+ )
26
+
27
+ @jms_client.topic_connection_factory.should_not be nil
28
+ end
29
+
30
+ it 'deveria permitir habilitar uma Queue especifica' do
31
+ @jms_client.enable_queues(
32
+ :pardal_queue => 'jms/PardalQueue'
33
+ )
34
+
35
+ @jms_client.queue_enabled?(:pardal_queue).should eql true
36
+ end
37
+
38
+ it 'deveria permitir habilitar um Topic especifico' do
39
+ @jms_client.enable_topics(
40
+ :pardal_topic => 'jms/PardalTopic'
41
+ )
42
+
43
+ @jms_client.topic_enabled?(:pardal_topic).should eql true
44
+ end
45
+ end
46
+
47
+ #
48
+ # Cen�rio p�s-configura��o do cliente JMS, quando as queues e os t�picos j� devem estar
49
+ # dispon�veis, e ent�o � poss�vel obter sender/receiver para elas.
50
+ #
51
+ describe Sparrow::JMS::Connection::Client, ', depois de ter sido configurado,' do
52
+
53
+ before(:all) do
54
+ @jms_client = create_and_setup_jms_client
55
+ end
56
+
57
+ it 'deveria possibilitar obter um Sender para uma Queue especifica' do
58
+ @jms_client.queue_sender(:pardal_queue).should_not be nil
59
+ end
60
+
61
+ it 'deveria possibilitar obter um Receiver para uma Queue especifica' do
62
+ @jms_client.queue_receiver(:pardal_queue).should_not be nil
63
+ end
64
+
65
+ it 'deveria possibilitar obter um Sender para um Topic especifico' do
66
+ @jms_client.topic_sender(:pardal_topic).should_not be nil
67
+ end
68
+
69
+ it 'deveria possibilitar obter um Receiver para um Topic especifico' do
70
+ @jms_client.topic_receiver(:pardal_topic).should_not be nil
71
+ end
72
+ end
@@ -0,0 +1,132 @@
1
+ require File.dirname(File.expand_path(__FILE__)) + '/spec_helper.rb'
2
+
3
+ #
4
+ # Cen�rio p�s-obten��o de um Sender e um Receiver, quando deve ser poss�vel enviar e
5
+ # receber mensagens de tr�s tipos (Texto, Objeto e Mapa) de uma queue especifica,
6
+ # individualmente ou em lote.
7
+ #
8
+ describe Sparrow::JMS::Messaging, ', quando tem um Sender e um Receiver para uma Queue especifica,' do
9
+
10
+ before(:all) do
11
+ jms_client = create_and_setup_jms_client
12
+
13
+ @sender = jms_client.queue_sender(:pardal_queue)
14
+ @receiver = jms_client.queue_receiver(:pardal_queue)
15
+ end
16
+
17
+ it 'deveria possibilitar enviar uma mensagem de texto e recebe-la' do
18
+ my_text = 'Mensagem de texto enviada da spec'
19
+
20
+ @sender.send_text_message(my_text) do |msg|
21
+ msg.set_string_property('recipient', 'sparrow-spec')
22
+ end
23
+
24
+ received_text = nil
25
+
26
+ @receiver.receive_message(:selector => "recipient = 'sparrow-spec'") do |msg|
27
+ received_text = msg.text
28
+ end
29
+
30
+ received_text.should eql my_text
31
+ end
32
+
33
+ it 'deveria possibilitar enviar um objeto e recebe-lo' do
34
+ my_object = java.util.ArrayList.new
35
+ my_object << 'Obj1 enviado da spec'
36
+
37
+ @sender.send_object_message(my_object) do |msg|
38
+ msg.set_string_property('recipient', 'sparrow-spec')
39
+ end
40
+
41
+ received_object = nil
42
+
43
+ @receiver.receive_message(:selector => "recipient = 'sparrow-spec'") do |msg|
44
+ received_object = msg.object
45
+ end
46
+
47
+ received_object.should eql my_object
48
+ end
49
+
50
+ it 'deveria possibilitar enviar uma mensagem mapa e recebe-la' do
51
+ my_id_long = 1234567
52
+
53
+ @sender.send_map_message do |msg|
54
+ msg.set_string_property('recipient', 'sparrow-spec')
55
+ msg.set_long('id', my_id_long)
56
+ end
57
+
58
+ received_id_long = nil
59
+
60
+ @receiver.receive_message(:selector => "recipient = 'sparrow-spec'") do |msg|
61
+ received_id_long = msg.get_long('id')
62
+ end
63
+
64
+ received_id_long.should eql my_id_long
65
+ end
66
+
67
+ it 'deveria possibilitar enviar varias mensagens de qualquer tipo e recebe-las' do
68
+ my_text = 'Mensagem de texto enviada da spec'
69
+
70
+ my_object = java.util.ArrayList.new
71
+ my_object << 'Obj1 enviado da spec'
72
+
73
+ my_id_long = 1234567
74
+
75
+ @sender.send_messages do |session, producer|
76
+ #--- TextMessage
77
+ text_message = session.create_text_message(my_text)
78
+ text_message.set_string_property('recipient', 'sparrow-spec')
79
+ producer.send(text_message)
80
+
81
+ #--- objectMessage
82
+ object_message = session.create_object_message(my_object)
83
+ object_message.set_string_property('recipient', 'sparrow-spec')
84
+ producer.send(object_message)
85
+
86
+ #--- MapMessage
87
+ map_message = session.create_map_message
88
+ map_message.set_string_property('recipient', 'sparrow-spec')
89
+ map_message.set_long('id', my_id_long)
90
+ producer.send(map_message)
91
+
92
+ # Commita as tr�s mensagens enviadas na sess�o
93
+ session.commit
94
+ end
95
+
96
+ received_text = nil
97
+ received_object = nil
98
+ received_id_long = nil
99
+
100
+ @receiver.receive_message(:timeout => 1000, :selector => "recipient = 'sparrow-spec'") do |msg|
101
+ if msg.is_text_message?
102
+ received_text = msg.text
103
+ end
104
+
105
+ if msg.is_object_message?
106
+ received_object = msg.object
107
+ end
108
+
109
+ if msg.is_map_message?
110
+ received_id_long = msg.get_long('id')
111
+ end
112
+ end
113
+
114
+ received_text.should eql my_text
115
+ received_object.should eql my_object
116
+ received_id_long.should eql my_id_long
117
+ end
118
+ end
119
+
120
+ #
121
+ # Cen�rio p�s-configura��o do cliente JMS, quando deve ser poss�vel escutar mensagens
122
+ # atrav�s de objetos listeners.
123
+ #
124
+ describe Sparrow::JMS::Messaging::Listener,
125
+ ', quando um Listener se registra para escutar uma Queue especifica,' do
126
+
127
+ before(:all) do
128
+ jms_client = create_and_setup_jms_client
129
+ end
130
+
131
+ it 'deveria possibilitar escutar mensagens atraves de um listener'
132
+ end
@@ -0,0 +1,54 @@
1
+ require 'rubygems'
2
+ require 'spec'
3
+
4
+ require File.dirname(File.expand_path(__FILE__)) + '/../lib/sparrow.rb'
5
+
6
+ #
7
+ # M�dulo com m�todos uteis para as propertiess.
8
+ #
9
+ module SparrowHelperMethods
10
+
11
+ #
12
+ # Apenas cria, mas n�o faz o setup do cliente JMS.
13
+ #
14
+ def create_jms_client
15
+ jms_client = Sparrow::JMS::Connection::Client.new do |properties|
16
+ properties.client_jar_file = '/home/leandro/Desenvolvimento/java/servers/oc4j_extended_101330/j2ee/home/oc4jclient.jar'
17
+ properties.initial_context_factory = 'oracle.j2ee.naming.ApplicationClientInitialContextFactory'
18
+ properties.provider_url = 'ormi://localhost:23791'
19
+ properties.security_principal = 'oc4jadmin'
20
+ properties.security_credentials = 'welcome'
21
+ end
22
+ end
23
+
24
+ #
25
+ # Cria e faz o setup do cliente JMS, habilitando os connection factories, queues e topics
26
+ # que ele pode usar.
27
+ #
28
+ def create_and_setup_jms_client
29
+ jms_client = create_jms_client
30
+
31
+ jms_client.enable_connection_factories(
32
+ :queue_connection_factory => 'jms/PardalQCF',
33
+ :topic_connection_factory => 'jms/PardalTCF'
34
+ )
35
+
36
+ jms_client.enable_queues(
37
+ :pardal_queue => 'jms/PardalQueue'
38
+ )
39
+
40
+ jms_client.enable_topics(
41
+ :pardal_topic => 'jms/PardalTopic'
42
+ )
43
+
44
+ # Pronto para ser usado!
45
+ jms_client
46
+ end
47
+ end
48
+
49
+ #
50
+ # Enriquece a classe Spec::Example::ExampleGroup com o helper.
51
+ #
52
+ class Spec::Example::ExampleGroup
53
+ include SparrowHelperMethods
54
+ end
metadata ADDED
@@ -0,0 +1,70 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: leandrosilva-sparrow
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Leandro Silva
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-03-07 00:00:00 -08:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description:
17
+ email: leandrodoze@gmail.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README.rdoc
24
+ - LICENSE
25
+ files:
26
+ - LICENSE
27
+ - VERSION.yml
28
+ - README.rdoc
29
+ - Rakefile
30
+ - lib/jee.rb
31
+ - lib/utils.rb
32
+ - lib/sparrow.rb
33
+ - lib/messaging.rb
34
+ - lib/connection.rb
35
+ - lib/jee
36
+ - lib/jee/sparrow-essential.jar
37
+ - lib/jee/jms.jar
38
+ - lib/jee/javaee-1.5.jar
39
+ - spec/spec_helper.rb
40
+ - spec/messaging_spec.rb
41
+ - spec/connection_spec.rb
42
+ has_rdoc: true
43
+ homepage: http://github.com/leandrosilva/sparrow
44
+ post_install_message:
45
+ rdoc_options:
46
+ - --inline-source
47
+ - --charset=UTF-8
48
+ require_paths:
49
+ - lib
50
+ required_ruby_version: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: "0"
55
+ version:
56
+ required_rubygems_version: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: "0"
61
+ version:
62
+ requirements: []
63
+
64
+ rubyforge_project:
65
+ rubygems_version: 1.2.0
66
+ signing_key:
67
+ specification_version: 2
68
+ summary: Sparrow is a JMS client (JRuby based)
69
+ test_files: []
70
+