jsparrow 1.1.3 → 1.1.4

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.
@@ -0,0 +1,164 @@
1
+ # Libs directory definition
2
+ JEE_LIB_DIR = File.expand_path(File.dirname(__FILE__)) + '/javaee'
3
+
4
+ require 'java'
5
+ require "#{JEE_LIB_DIR}/jsparrow-essential.jar"
6
+ require "#{JEE_LIB_DIR}/javaee-1.5.jar"
7
+ require "#{JEE_LIB_DIR}/jms.jar"
8
+
9
+ module JSparrow
10
+ module JMS
11
+
12
+ module Session
13
+ #
14
+ # Sobrescreve metodos de instancia.
15
+ #
16
+ module OverrideMethods
17
+ def create_text_message(text_message)
18
+ enriches_message super(text_message)
19
+ end
20
+
21
+ def create_object_message(object_message)
22
+ enriches_message super(object_message)
23
+ end
24
+
25
+ def create_map_message
26
+ enriches_message super
27
+ end
28
+
29
+ def create_consumer(destination, criteria_for_receiving)
30
+ enriches_consumer super(destination, criteria_for_receiving)
31
+ end
32
+
33
+ # --- Private methods -- #
34
+ private
35
+
36
+ def enriches_message(message)
37
+ class << message
38
+ include Message::TypingMethods
39
+ include Message::CriteriaMethods
40
+ end
41
+
42
+ message
43
+ end
44
+
45
+ def enriches_consumer(consumer)
46
+ class << consumer
47
+ include Consumer::OverrideMethods
48
+ end
49
+
50
+ consumer
51
+ end
52
+ end
53
+ end
54
+
55
+ module Consumer
56
+ #
57
+ # Sobrescreve metodos de instancia.
58
+ #
59
+ module OverrideMethods
60
+ def receive(timeout)
61
+ received_message = super(timeout)
62
+
63
+ if received_message.nil?
64
+ received_message
65
+ else
66
+ enriches_message received_message
67
+ end
68
+ end
69
+
70
+ # --- Private methods -- #
71
+ private
72
+
73
+ def enriches_message(message)
74
+ class << message
75
+ include Message::TypingMethods
76
+ end
77
+
78
+ message
79
+ end
80
+ end
81
+ end
82
+
83
+ module Message
84
+ #
85
+ # Identifica o tipo de uma mensagem.
86
+ #
87
+ module TypingMethods
88
+ def is_text_message?
89
+ respond_to? :get_text
90
+ end
91
+
92
+ def is_object_message?
93
+ (respond_to? :get_object and !(respond_to? :get_long))
94
+ end
95
+
96
+ def is_map_message?
97
+ respond_to? :get_long
98
+ end
99
+ end
100
+
101
+ #
102
+ # Adiciona criterios a mensagem.
103
+ #
104
+ module CriteriaMethods
105
+ def add_criteria_to_reception(name, value)
106
+ set_string_property(name, value)
107
+ end
108
+ end
109
+ end
110
+ end
111
+
112
+ module JNDI
113
+ #
114
+ # Builder para construcao de contexto JNDI para conexao com o provedor
115
+ # de JMS.
116
+ #
117
+ class ContextBuilder
118
+ attr_accessor :jms_client_jar, :jndi_properties
119
+
120
+ def initialize(jms_client_jar, jndi_properties)
121
+ @jms_client_jar = jms_client_jar
122
+ @jndi_properties = jndi_properties
123
+ end
124
+
125
+ #
126
+ # Constroi um contexto JNDI inicial a partir das configuracoes atuais.
127
+ #
128
+ def build
129
+ # Carrega a biblioteca cliente do servidor de aplicacoes
130
+ require @jms_client_jar
131
+
132
+ InitialContext.new(to_jndi_environment_hashtable)
133
+ end
134
+
135
+ # --- Private methods --- #
136
+ private
137
+
138
+ #
139
+ # Cria um Hashtable Java contendo as configuracoes atuais.
140
+ #
141
+ def to_jndi_environment_hashtable
142
+ jndi_env = Hashtable.new
143
+
144
+ jndi_env.put(
145
+ InitialContext::INITIAL_CONTEXT_FACTORY,
146
+ @jndi_properties[:initial_context_factory])
147
+
148
+ jndi_env.put(
149
+ InitialContext::PROVIDER_URL,
150
+ @jndi_properties[:provider_url])
151
+
152
+ jndi_env.put(
153
+ InitialContext::SECURITY_PRINCIPAL,
154
+ @jndi_properties[:security_principal]) if @jndi_properties[:security_principal]
155
+
156
+ jndi_env.put(
157
+ InitialContext::SECURITY_CREDENTIALS,
158
+ @jndi_properties[:security_credentials]) if @jndi_properties[:security_credentials]
159
+
160
+ jndi_env
161
+ end
162
+ end
163
+ end
164
+ end
File without changes
File without changes
@@ -1,11 +1,7 @@
1
1
  $LOAD_PATH.unshift(File.dirname(File.expand_path(__FILE__)))
2
2
 
3
- # Bibliotecas necessarias usar JMS
4
- require 'jms.rb'
3
+ require 'javaee'
5
4
 
6
- # Bibliotecas do JSparrow
7
- require 'connection.rb'
8
- require 'client.rb'
9
- require 'listener.rb'
10
- require 'messaging.rb'
11
- require 'error.rb'
5
+ require 'connection'
6
+ require 'interaction'
7
+ require 'error'
@@ -14,11 +14,11 @@ JSparrow::Connection.configure do
14
14
  enable_queues :test_queue => 'TestQueue'
15
15
  end
16
16
 
17
- jms_client = JSparrow::Connection.new_client
17
+ jms_client = new_jsparrow_client
18
18
  jms_client.start
19
19
 
20
20
  jms_client.queue_sender(:test_queue).send_text_message('jsparrow rocks!') do |msg|
21
- msg.set_string_property('recipient', 'jsparrow-example')
21
+ msg.add_criteria_to_reception('recipient', 'jsparrow-example')
22
22
  end
23
23
 
24
24
  jms_client.queue_receiver(:test_queue).receive_message(
@@ -14,11 +14,11 @@ JSparrow::Connection.configure do
14
14
  enable_topics :test_topic => 'TestTopic'
15
15
  end
16
16
 
17
- jms_client = JSparrow::Connection.new_client
17
+ jms_client = new_jsparrow_client
18
18
  jms_client.start
19
19
 
20
20
  jms_client.topic_sender(:test_topic).send_text_message('jsparrow rocks!') do |msg|
21
- msg.set_string_property('recipient', 'jsparrow-example')
21
+ msg.add_criteria_to_reception('recipient', 'jsparrow-example')
22
22
  end
23
23
 
24
24
  jms_client.topic_receiver(:test_topic).receive_message(
@@ -1,12 +1,12 @@
1
1
  require File.dirname(File.expand_path(__FILE__)) + '/spec_helper.rb'
2
2
 
3
- describe JSparrow::Connection::Client do
3
+ describe JSparrow::Interactors::Client do
4
4
 
5
5
  subject do
6
- create_jms_client
6
+ new_jms_client
7
7
  end
8
8
 
9
- context 'When created' do
9
+ context 'when created' do
10
10
 
11
11
  it 'should be started and stoped' do
12
12
  subject.start
@@ -40,7 +40,7 @@ describe JSparrow::Connection::Client do
40
40
  end
41
41
  end
42
42
 
43
- context 'When started' do
43
+ context 'when started' do
44
44
 
45
45
  before(:all) do
46
46
  subject.start
@@ -6,7 +6,7 @@ describe JSparrow::Connection do
6
6
  configure_connection
7
7
  end
8
8
 
9
- context 'When configured' do
9
+ context 'when configured' do
10
10
 
11
11
  it 'should known a jms_client_jar' do
12
12
  subject.jms_client_jar.should_not be nil
@@ -33,15 +33,22 @@ describe JSparrow::Connection do
33
33
  end
34
34
 
35
35
  it 'should allow create a new Client' do
36
- jms_client = create_jms_client
36
+ jms_client = new_jms_client
37
37
 
38
- jms_client.class.should be JSparrow::Connection::Client
38
+ jms_client.class.should be JSparrow::Interactors::Client
39
39
  end
40
40
 
41
- it 'should allow create a new Listener' do
42
- jms_listener = create_jms_listener
41
+ it 'should allow create a new named Listener' do
42
+ jms_listener = new_named_jms_listener
43
43
 
44
- jms_listener.class.superclass.should be JSparrow::Connection::Listener
44
+ jms_listener.class.superclass.should be JSparrow::Interactors::Listener
45
+ end
46
+
47
+ it 'should allow create a new anonymous Listener' do
48
+ jms_listener = new_anonymous_jms_listener
49
+
50
+ jms_listener.class.should be JSparrow::Interactors::Listener
51
+ jms_listener.respond_to?(:on_receive_message).should be true
45
52
  end
46
53
  end
47
54
  end
@@ -1,19 +1,16 @@
1
1
  require File.dirname(File.expand_path(__FILE__)) + '/spec_helper.rb'
2
2
 
3
- describe JSparrow::Connection::Listener do
3
+ describe JSparrow::Interactors::Listener do
4
4
 
5
- subject do
6
- create_jms_listener
7
- end
5
+ context 'when inherited and created' do
8
6
 
9
- context 'When inherited for listening a queue' do
7
+ subject do
8
+ new_named_jms_listener
9
+ end
10
10
 
11
11
  it 'should listen to "test_queue" destination' do
12
12
  subject.listen_to_destination.should eql :queue => :test_queue
13
13
  end
14
- end
15
-
16
- context 'When inherited and created,' do
17
14
 
18
15
  it 'should be started and stoped' do
19
16
  subject.start_listening
@@ -26,6 +23,8 @@ describe JSparrow::Connection::Listener do
26
23
  end
27
24
 
28
25
  it 'should receive a message' do
26
+ subject.received_messages.size.should eql 0
27
+
29
28
  send_message_to_listener 'TestQueueListener'
30
29
 
31
30
  subject.start_listening
@@ -37,4 +36,40 @@ describe JSparrow::Connection::Listener do
37
36
  subject.stop_listening
38
37
  end
39
38
  end
39
+
40
+ context 'when anonymously created' do
41
+
42
+ subject do
43
+ new_anonymous_jms_listener
44
+ end
45
+
46
+ it 'should listen to "test_queue" destination' do
47
+ subject.listen_to_destination.should eql :queue => :test_queue
48
+ end
49
+
50
+ it 'should be started and stoped' do
51
+ subject.start_listening
52
+
53
+ subject.is_listening?.should be true
54
+
55
+ subject.stop_listening
56
+
57
+ subject.is_listening?.should be false
58
+ end
59
+
60
+ it 'should receive a message' do
61
+ subject.received_messages.size.should eql 0
62
+
63
+ send_message_to_listener 'anonymous'
64
+
65
+ subject.start_listening
66
+
67
+ sleep 1 # espera um pouquinho pra mensagem ser entregue
68
+
69
+ # verify if message was received
70
+ subject.received_messages.size.should eql 1
71
+
72
+ subject.stop_listening
73
+ end
74
+ end
40
75
  end
@@ -2,10 +2,10 @@ require File.dirname(File.expand_path(__FILE__)) + '/spec_helper.rb'
2
2
 
3
3
  describe JSparrow::Messaging do
4
4
 
5
- context 'When have a Sender and a Receiver for a Queue' do
5
+ context 'when have a Sender and a Receiver for a Queue' do
6
6
 
7
7
  before(:all) do
8
- @jms_client = create_jms_client
8
+ @jms_client = new_jms_client
9
9
  @jms_client.start
10
10
 
11
11
  @sender = @jms_client.queue_sender(:test_queue)
@@ -20,7 +20,7 @@ describe JSparrow::Messaging do
20
20
  my_text = 'Mensagem de texto enviada da spec'
21
21
 
22
22
  @sender.send_text_message(my_text) do |msg|
23
- msg.set_string_property('recipient', 'jsparrow-spec')
23
+ msg.add_criteria_to_reception('recipient', 'jsparrow-spec')
24
24
  end
25
25
 
26
26
  received_text = nil
@@ -37,7 +37,7 @@ describe JSparrow::Messaging do
37
37
  my_object << 'Obj1 enviado da spec'
38
38
 
39
39
  @sender.send_object_message(my_object) do |msg|
40
- msg.set_string_property('recipient', 'jsparrow-spec')
40
+ msg.add_criteria_to_reception('recipient', 'jsparrow-spec')
41
41
  end
42
42
 
43
43
  received_object = nil
@@ -53,7 +53,7 @@ describe JSparrow::Messaging do
53
53
  my_id_long = 1234567
54
54
 
55
55
  @sender.send_map_message do |msg|
56
- msg.set_string_property('recipient', 'jsparrow-spec')
56
+ msg.add_criteria_to_reception('recipient', 'jsparrow-spec')
57
57
  msg.set_long('id', my_id_long)
58
58
  end
59
59
 
@@ -70,7 +70,7 @@ describe JSparrow::Messaging do
70
70
  my_text = 'Mensagem de texto enviada da spec'
71
71
 
72
72
  @sender.send_text_message(my_text) do |msg|
73
- msg.set_string_property('recipient', 'jsparrow-spec')
73
+ msg.add_criteria_to_reception('recipient', 'jsparrow-spec')
74
74
  end
75
75
 
76
76
  received_text = nil
@@ -93,17 +93,17 @@ describe JSparrow::Messaging do
93
93
  @sender.send_messages do |session, producer|
94
94
  #--- TextMessage
95
95
  text_message = session.create_text_message(my_text)
96
- text_message.set_string_property('recipient', 'jsparrow-spec')
96
+ text_message.add_criteria_to_reception('recipient', 'jsparrow-spec')
97
97
  producer.send(text_message)
98
98
 
99
99
  #--- objectMessage
100
100
  object_message = session.create_object_message(my_object)
101
- object_message.set_string_property('recipient', 'jsparrow-spec')
101
+ object_message.add_criteria_to_reception('recipient', 'jsparrow-spec')
102
102
  producer.send(object_message)
103
103
 
104
104
  #--- MapMessage
105
105
  map_message = session.create_map_message
106
- map_message.set_string_property('recipient', 'jsparrow-spec')
106
+ map_message.add_criteria_to_reception('recipient', 'jsparrow-spec')
107
107
  map_message.set_long('id', my_id_long)
108
108
  producer.send(map_message)
109
109
 
@@ -4,18 +4,18 @@ require 'spec'
4
4
  require File.dirname(File.expand_path(__FILE__)) + '/../lib/jsparrow.rb'
5
5
 
6
6
  #
7
- # Modulo com metodos uteis para as specs.
7
+ # Helper methods for specs.
8
8
  #
9
9
  module JSparrowHelperMethods
10
10
 
11
11
  def configure_connection
12
12
  JSparrow::Connection.configure do
13
13
  use_jms_client_jar '/opt/openjms/lib/openjms-0.7.7-beta-1.jar'
14
-
14
+
15
15
  use_jndi_properties :initial_context_factory => 'org.exolab.jms.jndi.InitialContextFactory',
16
- :provider_url => 'tcp://localhost:3035'
17
- # :security_principal => 'user',
18
- # :security_credentials => 'password'
16
+ :provider_url => 'tcp://localhost:3035'
17
+ # :security_principal => 'user',
18
+ # :security_credentials => 'password'
19
19
 
20
20
  enable_connection_factories :queue_connection_factory => 'ConnectionFactory',
21
21
  :topic_connection_factory => 'ConnectionFactory'
@@ -26,27 +26,43 @@ module JSparrowHelperMethods
26
26
  end
27
27
  end
28
28
 
29
- def create_jms_client
29
+ def new_jms_client
30
30
  configure_connection
31
31
 
32
- JSparrow::Connection.new_client
32
+ new_jsparrow_client
33
33
  end
34
34
 
35
- def create_jms_listener
35
+ def new_named_jms_listener
36
36
  configure_connection
37
37
 
38
- JSparrow::Connection.new_listener :as => JSparrowHelperClasses::TestQueueListener
38
+ new_jsparrow_listener :as => JSparrowHelperClasses::TestQueueListener
39
+ end
40
+
41
+ def new_anonymous_jms_listener
42
+ listener = new_jsparrow_listener(
43
+ :listen_to => { :queue => :test_queue },
44
+ :receive_only_in_criteria => { :selector => "recipient = 'jsparrow-spec' and to_listener = 'anonymous'" }
45
+ ) do |received_message|
46
+
47
+ received_messages << received_message
48
+ end
49
+
50
+ def listener.received_messages
51
+ @received_messages ||= []
52
+ end
53
+
54
+ listener
39
55
  end
40
56
 
41
57
  def send_message_to_listener(listener_name)
42
- @jms_client = create_jms_client
58
+ @jms_client = new_jms_client
43
59
  @jms_client.start
44
60
 
45
- my_text = 'Mensagem de texto enviada da spec para o listener TestQueueListener'
61
+ my_text = "Mensagem de texto enviada da spec para o listener #{listener_name}"
46
62
 
47
63
  @jms_client.queue_sender(:test_queue).send_text_message(my_text) do |msg|
48
- msg.set_string_property('recipient', 'jsparrow-spec')
49
- msg.set_string_property('to_listener', listener_name)
64
+ msg.add_criteria_to_reception('recipient', 'jsparrow-spec')
65
+ msg.add_criteria_to_reception('to_listener', listener_name)
50
66
  end
51
67
 
52
68
  @jms_client.stop
@@ -54,11 +70,10 @@ module JSparrowHelperMethods
54
70
  end
55
71
 
56
72
  module JSparrowHelperClasses
57
-
58
73
  #
59
- # Listener da queue TestQueue
74
+ # Listener for test against "TestQueue" queue
60
75
  #
61
- class TestQueueListener < JSparrow::Connection::Listener
76
+ class TestQueueListener < JSparrow::Interactors::Listener
62
77
  listen_to :queue => :test_queue
63
78
 
64
79
  receive_only_in_criteria :selector => "recipient = 'jsparrow-spec' and to_listener = 'TestQueueListener'"
@@ -72,12 +87,13 @@ module JSparrowHelperClasses
72
87
  end
73
88
 
74
89
  def on_receive_message(received_message)
75
- @received_messages << received_messages
90
+ @received_messages << received_message
76
91
  end
77
92
  end
78
93
  end
94
+
79
95
  #
80
- # Enriquece a classe Spec::Example::ExampleGroup com o helper.
96
+ # Some steroids for Spec::Example::ExampleGroup.
81
97
  #
82
98
  class Spec::Example::ExampleGroup
83
99
  include JSparrowHelperMethods