jms4r 0.1.0-java → 0.2.0-java

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.0
data/jms4r.gemspec CHANGED
@@ -5,12 +5,12 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{jms4r}
8
- s.version = "0.1.0"
8
+ s.version = "0.2.0"
9
9
  s.platform = %q{java}
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.authors = ["Eric Monti"]
13
- s.date = %q{2009-12-10}
13
+ s.date = %q{2009-12-23}
14
14
  s.description = %q{A generalized JMS abstraction library for JRuby}
15
15
  s.email = %q{emonti@matasano.com}
16
16
  s.extra_rdoc_files = [
@@ -28,10 +28,12 @@ Gem::Specification.new do |s|
28
28
  "lib/jms4r.rb",
29
29
  "lib/jms4r/browser.rb",
30
30
  "lib/jms4r/listener.rb",
31
+ "lib/jms4r/message.rb",
31
32
  "lib/jms4r/receiver.rb",
32
33
  "lib/jms4r/sender.rb",
33
34
  "lib/jms4r/session.rb",
34
35
  "samples/activemq/activemq.rb",
36
+ "samples/activemq/amq_slurp",
35
37
  "test/jms4r_test.rb",
36
38
  "test/test_helper.rb"
37
39
  ]
data/lib/jms4r.rb CHANGED
@@ -1,7 +1,6 @@
1
- include Java
2
1
 
3
2
  module JMS
4
-
3
+ include Java
5
4
  end
6
5
 
7
6
  require 'jms4r/session.rb'
@@ -9,4 +8,5 @@ require 'jms4r/receiver.rb'
9
8
  require 'jms4r/browser.rb'
10
9
  require 'jms4r/sender.rb'
11
10
  require 'jms4r/listener.rb'
11
+ require 'jms4r/message.rb'
12
12
 
@@ -0,0 +1,47 @@
1
+
2
+ module JMS
3
+ include_class 'javax.jms.Message'
4
+
5
+ module Message
6
+ def props
7
+ @props ||= Properties.new(self)
8
+ end
9
+
10
+ class Properties
11
+ include Enumerable
12
+
13
+ def initialize(msg)
14
+ @msg = msg
15
+ end
16
+
17
+ def each_key(&block)
18
+ @msg.getPropertyNames().each &block
19
+ end
20
+
21
+ def <=> (a,b)
22
+ a[0] <=> b[0]
23
+ end
24
+
25
+ def each(&block)
26
+ each_key {|k| yield(k, @msg.getObjectProperty(k)) }
27
+ end
28
+
29
+ def keys
30
+ @msg.getPropertyNames().to_a
31
+ end
32
+
33
+ def [](key)
34
+ @msg.getObjectProperty(key)
35
+ end
36
+
37
+ def []=(k, v)
38
+ @msg.setObjectProperty(k, v)
39
+ end
40
+
41
+ def size
42
+ keys.size
43
+ end
44
+ end
45
+
46
+ end
47
+ end
@@ -9,12 +9,24 @@ module JMS
9
9
  @receiver = @sess.createReceiver(parent.queue(qname), sel)
10
10
  end
11
11
 
12
- def while_receive(timeout)
13
- while msg=@receiver.receive(timeout)
12
+ def while_receive(timeout=nil)
13
+ prc =
14
+ if(timeout == 0)
15
+ lambda {|t| @receiver.receive() }
16
+ elsif timeout.nil?
17
+ lambda {|t| @receiver.receiveNoWait() }
18
+ else
19
+ lambda {|t| @receiver.receive(t) }
20
+ end
21
+ while msg=prc.call(timeout)
14
22
  yield(msg)
15
23
  end
16
24
  end
17
25
 
26
+ def listen(&blk)
27
+ @receiver.setMessageListener( Listener.new(&blk) )
28
+ end
29
+
18
30
  def method_missing(*args)
19
31
  @receiver.__send__ *args
20
32
  end
data/lib/jms4r/session.rb CHANGED
@@ -47,6 +47,7 @@ module JMS
47
47
  @sess.createQueue(q)
48
48
  end
49
49
  end
50
+
50
51
  alias create_queue queue
51
52
 
52
53
  # This method is called to resolve a topic name string to a Topic object
@@ -61,6 +62,7 @@ module JMS
61
62
  @sess.createTopic(tname)
62
63
  end
63
64
  end
65
+
64
66
  alias create_topic topic
65
67
 
66
68
  # Creates a JMS Sender for a given queue which is
@@ -73,6 +75,7 @@ module JMS
73
75
  def create_sender(*args)
74
76
  Sender.new(self, *args)
75
77
  end
78
+ alias sender create_sender
76
79
 
77
80
  # Creates a JMS Receiver for a given queue which is used to 'consume'
78
81
  # or "receive and remove" messages from the queue.
@@ -89,6 +92,7 @@ module JMS
89
92
  end
90
93
  return r
91
94
  end
95
+ alias receiver create_receiver
92
96
 
93
97
  # Creates a JMS Receiver for a given queue.
94
98
  #
@@ -101,10 +105,14 @@ module JMS
101
105
  Browser.new(self, *args)
102
106
  end
103
107
 
108
+ alias browser create_browser
109
+
104
110
  def create_listener(&block)
105
111
  Listener.new(&block)
106
112
  end
107
113
 
114
+ alias listener create_listener
115
+
108
116
  # Attempts to compose a populated JMS message typed based on msg type.
109
117
  # Returns the message after it has been created (and populated with msg
110
118
  # data). In some cases, you may want finer grained control, in which case,
@@ -21,7 +21,7 @@ module ActiveMQ
21
21
  env.each {|k,v| e.put(k, v)} if env
22
22
 
23
23
  @ctx = javax.naming.InitialContext.new(e)
24
- @factory = ctx.lookup("ConnectionFactory")
24
+ @factory = @ctx.lookup("ConnectionFactory")
25
25
  @conn = @factory.createConnection()
26
26
  @sess = @conn.createSession(false, javax.jms.Session::AUTO_ACKNOWLEDGE)
27
27
  end
@@ -39,14 +39,27 @@ end
39
39
 
40
40
  if __FILE__ == $0
41
41
  require 'irb'
42
+
43
+ unless host=ARGV.shift
44
+ STDERR.puts "Usage: #{File.basename $0} host [port] [queue]"
45
+ exit 1
46
+ end
47
+
48
+ port = ARGV.shift || 61616
49
+ qname = ARGV.shift || 'loopback_test'
50
+
42
51
  @rcv, @snd, @brws = nil
43
- @sess = ActiveMQ::Session.new('192.168.11.70', 61616) do |this|
44
- qname = "loopback_test"
52
+ @sess = ActiveMQ::Session.new('192.168.11.70', port.to_i) do |this|
45
53
  @snd = this.create_sender(qname)
46
54
  @brws = this.create_browser(qname)
47
55
  @rcv = this.create_receiver(qname)
48
56
  end
49
57
 
58
+ STDERR.puts "@sess = #{@sess.inspect}",
59
+ "@rcv = #{@rcv.inspect}",
60
+ "@snd = #{@snd.inspect}",
61
+ "@brws= #{@brws.inspect}"
50
62
  IRB.start
51
63
 
52
64
  end
65
+
@@ -0,0 +1,86 @@
1
+ #!/usr/bin/env jruby
2
+
3
+ require 'optparse'
4
+ require 'activemq'
5
+
6
+ $consume = nil
7
+ $save=nil
8
+ $loop=nil
9
+ $list=nil
10
+
11
+ opts = OptionParser.new do |o|
12
+ o.banner = "Usage: #{File.basename $0} [options] url qname"
13
+
14
+ o.on_tail("-h", "--help", "Show this message") do
15
+ raise o.to_s
16
+ end
17
+
18
+ o.on("-c", "--[no-]consume", "Consume or just browse messages.",
19
+ " (Default: browse)") { |c| $consume = c }
20
+
21
+ o.on("-s", "--save=PATH", "Save serialized messages to PATH.",
22
+ " (named with put time as an id)") {|s| $save = s }
23
+
24
+ o.on("-l", "--[no-]loop", "Loops endlessly consuming messages") {|l| $loop=l }
25
+ o.on("-D", "--dump", "Lists queues and exits",
26
+ " (not implemented)") { $list=true }
27
+ end
28
+
29
+
30
+ begin
31
+ opts.parse!(ARGV)
32
+ raise opts.banner unless \
33
+ url=ARGV.shift and
34
+ ($list or qname=ARGV.shift) and
35
+ ARGV.shift.nil?
36
+ rescue
37
+ STDERR.puts $!
38
+ exit 1
39
+ end
40
+
41
+
42
+ # define a block method with which to slurp messages
43
+ def slurp(msg)
44
+ if $save
45
+ tstamp = (msg.props["MESSAGE_ID"] || Time.now.to_i)
46
+ fo = java.io.FileOutputStream.new(File.join($save, "#{tstamp}.ser"))
47
+ oo = java.io.ObjectOutputStream.new(fo)
48
+ oo.writeObject(msg)
49
+ oo.close
50
+ fo.close
51
+ end
52
+
53
+ puts "-="*30 + "-"
54
+ puts msg, msg.props.sort.map {|k,v| " #{k} = #{v}"}
55
+ puts "[*] Full Text:", msg.text if msg.respond_to?(:text)
56
+ puts
57
+ end
58
+
59
+ begin
60
+ # create our connection
61
+ sess = ActiveMQ::Session.new(url)
62
+
63
+ # lookup the queue name and get a 'destination'
64
+ queue = sess.lookup(qname)
65
+ rescue javax.naming.NameNotFoundException
66
+ sess.close if sess
67
+ STDERR.puts "Error: #{$!}"
68
+ exit 1
69
+ end
70
+
71
+ rcvr = sess.create_receiver(queue)
72
+ brws = sess.create_browser(queue)
73
+
74
+ # either consume or browse all messages in the queue
75
+ if $loop
76
+ puts "[*] Waiting for Messages (#{brws.messages.size} in queue):"
77
+ rcvr.while_receive 0, &method(:slurp)
78
+ elsif $consume
79
+ puts "[*] Consuming #{brws.messages.size} Messages:"
80
+ rcvr.while_receive nil, &method(:slurp)
81
+ else
82
+ puts "[*] Browsing #{brws.messages.size} Messages:"
83
+ brws.each_message &method(:slurp)
84
+ end
85
+
86
+ sess.close
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jms4r
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: java
6
6
  authors:
7
7
  - Eric Monti
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-12-10 00:00:00 -06:00
12
+ date: 2009-12-23 00:00:00 -06:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -33,10 +33,12 @@ files:
33
33
  - lib/jms4r.rb
34
34
  - lib/jms4r/browser.rb
35
35
  - lib/jms4r/listener.rb
36
+ - lib/jms4r/message.rb
36
37
  - lib/jms4r/receiver.rb
37
38
  - lib/jms4r/sender.rb
38
39
  - lib/jms4r/session.rb
39
40
  - samples/activemq/activemq.rb
41
+ - samples/activemq/amq_slurp
40
42
  - test/jms4r_test.rb
41
43
  - test/test_helper.rb
42
44
  has_rdoc: true