torquebox-stomp 2.3.2 → 3.0.0.beta1
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/lib/torquebox/stomp/ext/subscriber.rb +25 -0
- data/lib/torquebox/stomp/jms_stomplet.rb +37 -34
- data/lib/torquebox/stomp/rack/stilts-stomp-client-js.js +904 -237
- data/lib/torquebox-stomp.rb +1 -0
- data/licenses/cc0-1.0.txt +121 -0
- metadata +15 -14
- data/licenses/lgpl-2.1.txt +0 -502
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
|
|
2
|
+
# Copyright 2008-2013 Red Hat, Inc, and individual contributors.
|
|
3
|
+
#
|
|
4
|
+
# This is free software; you can redistribute it and/or modify it
|
|
5
|
+
# under the terms of the GNU Lesser General Public License as
|
|
6
|
+
# published by the Free Software Foundation; either version 2.1 of
|
|
7
|
+
# the License, or (at your option) any later version.
|
|
8
|
+
#
|
|
9
|
+
# This software is distributed in the hope that it will be useful,
|
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
12
|
+
# Lesser General Public License for more details.
|
|
13
|
+
#
|
|
14
|
+
# You should have received a copy of the GNU Lesser General Public
|
|
15
|
+
# License along with this software; if not, write to the Free
|
|
16
|
+
# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
|
17
|
+
# 02110-1301 USA, or see the FSF site: http://www.fsf.org.
|
|
18
|
+
|
|
19
|
+
module org.projectodd.stilts.stomplet::Subscriber
|
|
20
|
+
|
|
21
|
+
def [](name)
|
|
22
|
+
self.getParameter( name.to_s )
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
end
|
|
@@ -19,41 +19,33 @@ module TorqueBox
|
|
|
19
19
|
module Stomp
|
|
20
20
|
class JmsStomplet
|
|
21
21
|
|
|
22
|
-
include TorqueBox::Injectors
|
|
23
|
-
|
|
24
22
|
def initialize()
|
|
25
|
-
@connection_factory = fetch( 'xa-connection-factory' )
|
|
23
|
+
@connection_factory = TorqueBox.fetch( 'xa-connection-factory' )
|
|
26
24
|
@subscriptions = {}
|
|
27
25
|
end
|
|
28
|
-
|
|
29
|
-
def xa_resources
|
|
30
|
-
|
|
31
|
-
end
|
|
32
|
-
|
|
26
|
+
|
|
27
|
+
#def xa_resources
|
|
28
|
+
# @xa_resources
|
|
29
|
+
#end
|
|
30
|
+
|
|
33
31
|
def configure(stomplet_config)
|
|
34
|
-
@connection = @connection_factory.
|
|
32
|
+
@connection = @connection_factory.create_xa_connection
|
|
35
33
|
@connection.start
|
|
36
|
-
@session = @connection.create_session
|
|
34
|
+
@session = @connection.create_session( false )
|
|
37
35
|
@xa_resources = [ @session.xa_resource ]
|
|
38
36
|
end
|
|
39
|
-
|
|
37
|
+
|
|
40
38
|
def destroy
|
|
41
39
|
@session.close
|
|
42
40
|
@connection.close
|
|
43
41
|
end
|
|
44
42
|
|
|
45
|
-
# -----
|
|
46
|
-
# -----
|
|
47
|
-
|
|
48
43
|
def on_unsubscribe(subscriber)
|
|
49
44
|
subscriptions = @subscriptions.delete( subscriber )
|
|
50
45
|
(subscriptions || []).each do |subscription|
|
|
51
46
|
subscription.close
|
|
52
47
|
end
|
|
53
48
|
end
|
|
54
|
-
|
|
55
|
-
# -----
|
|
56
|
-
# -----
|
|
57
49
|
|
|
58
50
|
def queue(name)
|
|
59
51
|
jms_session = @session.jms_session
|
|
@@ -69,30 +61,30 @@ module TorqueBox
|
|
|
69
61
|
return queue(name) if ( type.to_sym == :queue )
|
|
70
62
|
topic(name)
|
|
71
63
|
end
|
|
72
|
-
|
|
73
|
-
def subscribe_to(subscriber, destination, selector=nil)
|
|
64
|
+
|
|
65
|
+
def subscribe_to(subscriber, destination, selector=nil, options={})
|
|
74
66
|
jms_session = @session.jms_session
|
|
75
67
|
java_destination = @session.java_destination( destination )
|
|
76
68
|
consumer = @session.jms_session.create_consumer( java_destination.to_java, selector )
|
|
77
|
-
consumer.message_listener = MessageListener.new( subscriber )
|
|
69
|
+
consumer.message_listener = MessageListener.new( subscriber, options )
|
|
78
70
|
@subscriptions[ subscriber ] ||= []
|
|
79
71
|
@subscriptions[ subscriber ] << consumer
|
|
80
72
|
end
|
|
81
|
-
|
|
82
|
-
def send_to(destination, stomp_message, headers={})
|
|
73
|
+
|
|
74
|
+
def send_to(destination, stomp_message, headers={}, options={})
|
|
83
75
|
jms_session = @session.jms_session
|
|
84
76
|
java_destination = @session.java_destination( destination )
|
|
85
|
-
|
|
77
|
+
|
|
86
78
|
producer = @session.jms_session.create_producer( java_destination.to_java )
|
|
87
79
|
|
|
88
|
-
case ( stomp_message )
|
|
80
|
+
case ( stomp_message )
|
|
89
81
|
when org.projectodd.stilts.stomp::StompMessage
|
|
90
82
|
content = stomp_message.content_as_string
|
|
91
83
|
else
|
|
92
|
-
content = stomp_message
|
|
84
|
+
content = stomp_message
|
|
93
85
|
end
|
|
94
86
|
|
|
95
|
-
encoded_message = TorqueBox::Messaging::Message.new( @session.jms_session, content )
|
|
87
|
+
encoded_message = TorqueBox::Messaging::Message.new( @session.jms_session, content, options[:encoding] )
|
|
96
88
|
jms_message = encoded_message.jms_message
|
|
97
89
|
|
|
98
90
|
if ( stomp_message.is_a?( org.projectodd.stilts.stomp::StompMessage ) )
|
|
@@ -110,26 +102,37 @@ module TorqueBox
|
|
|
110
102
|
|
|
111
103
|
producer.send( jms_message )
|
|
112
104
|
end
|
|
113
|
-
|
|
105
|
+
|
|
106
|
+
# @api private
|
|
114
107
|
class MessageListener
|
|
115
108
|
include javax.jms.MessageListener
|
|
116
|
-
|
|
117
|
-
def initialize(subscriber)
|
|
109
|
+
|
|
110
|
+
def initialize(subscriber, options={})
|
|
118
111
|
@subscriber = subscriber
|
|
112
|
+
@encoding = options[:encoding]
|
|
119
113
|
end
|
|
120
|
-
|
|
114
|
+
|
|
121
115
|
def onMessage(jms_message)
|
|
122
|
-
|
|
116
|
+
content = TorqueBox::Messaging::Message.new( jms_message ).decode
|
|
117
|
+
( content = TorqueBox::Codecs.encode( content, @encoding ) ) if @encoding
|
|
118
|
+
stomp_message = TorqueBox::Stomp::Message.new( content )
|
|
123
119
|
jms_message.property_names.each do |name|
|
|
124
120
|
value = jms_message.getObjectProperty( name ).to_s
|
|
125
121
|
stomp_message.headers.put( name.to_s.to_java( java.lang.String ), value.to_java( java.lang.String) ) if value
|
|
126
122
|
end
|
|
123
|
+
if ( stomp_message.headers[ 'content-type' ] == nil )
|
|
124
|
+
if ( @encoding == :json )
|
|
125
|
+
stomp_message.headers.put( "content-type", "application/json" )
|
|
126
|
+
else
|
|
127
|
+
stomp_message.headers.put( "content-type", "text/plain" )
|
|
128
|
+
end
|
|
129
|
+
end
|
|
127
130
|
@subscriber.send( stomp_message )
|
|
128
131
|
end
|
|
129
|
-
|
|
132
|
+
|
|
130
133
|
end
|
|
131
|
-
|
|
134
|
+
|
|
132
135
|
end
|
|
133
136
|
|
|
134
137
|
end
|
|
135
|
-
end
|
|
138
|
+
end
|