mailbox 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,5 @@
1
1
  ---
2
2
  :major: 0
3
3
  :minor: 2
4
- :patch: 1
4
+ :patch: 2
5
5
  :build:
@@ -0,0 +1,9 @@
1
+ module Mailbox
2
+ class DaemonThreadFactory
3
+ def newThread(r)
4
+ thread = java.lang.Thread.new r;
5
+ thread.set_daemon true;
6
+ return thread;
7
+ end
8
+ end
9
+ end
@@ -11,6 +11,7 @@ require 'rubygems'
11
11
  require 'jretlang'
12
12
 
13
13
  require File.dirname(__FILE__) + '/synchronized'
14
+ require File.dirname(__FILE__) + '/daemon_thread_factory'
14
15
 
15
16
  module Mailbox
16
17
  include Synchronized
@@ -24,7 +25,7 @@ module Mailbox
24
25
  end
25
26
 
26
27
  def verbose_output_to method_name
27
- @verbose_target = method_name
28
+ @__verbose_target__ = method_name
28
29
  end
29
30
 
30
31
  class << self
@@ -33,6 +34,7 @@ module Mailbox
33
34
  #
34
35
  # <b>*** Intended for synchronous unit testing of concurrent apps***</b>
35
36
  attr_accessor :synchronous
37
+
36
38
  end
37
39
 
38
40
  private
@@ -54,10 +56,11 @@ module Mailbox
54
56
 
55
57
  def __synchronous_fiber__
56
58
  executor = JRL::SynchronousDisposingExecutor.new
57
- fiber = JRL::Fibers::ThreadFiber.new executor, "#{self.class.name} #{self.object_id} Mailbox synchronous", true
59
+ JRL::Fibers::ThreadFiber.new executor, "#{self.class.name} #{self.object_id} Mailbox synchronous", true
58
60
  end
59
61
 
60
62
  def __create_fiber__
63
+ return self.class.__fiber_factory__.create if self.class.__fiber_factory__
61
64
  JRL::Fibers::ThreadFiber.new( JRL::RunnableExecutorImpl.new, "#{self.class.name} #{self.object_id} Mailbox", true )
62
65
  end
63
66
 
@@ -90,8 +93,17 @@ module Mailbox
90
93
  @replyable = params[:replyable]
91
94
  @timeout = params[:timeout].nil? ? -1 : params[:timeout] * 1000
92
95
  @exception = params[:exception]
96
+
93
97
  @mailslot = true
94
98
  end
99
+
100
+ def mailbox_thread_pool_size(count)
101
+ @__fiber_factory__ = JRL::Fibers::PoolFiberFactory.new(JRL::Concurrent::Executors.new_fixed_thread_pool(count, DaemonThreadFactory.new))
102
+ end
103
+
104
+ def __fiber_factory__
105
+ @__fiber_factory__ ||= nil
106
+ end
95
107
 
96
108
  private
97
109
 
@@ -118,14 +130,14 @@ module Mailbox
118
130
  exception_method, @exception = @exception, nil
119
131
  define_method method_name do |*args|
120
132
 
121
- self.send(@verbose_target, "enqueued #{method_name}") if defined? @verbose_target
133
+ self.send(@__verbose_target__, "enqueued #{method_name}") if defined? @__verbose_target__
122
134
 
123
135
  result = nil
124
136
  latch = JRL::Concurrent::CountDownLatch.new(1) if replyable
125
137
 
126
138
  __fiber__.execute do
127
139
  begin
128
- self.send(@verbose_target, "dequeued #{method_name}") if defined? @verbose_target
140
+ self.send(@__verbose_target__, "dequeued #{method_name}") if defined? @__verbose_target__
129
141
  result = self.send(:"__#{method_name}__", *args )
130
142
  rescue Exception => ex
131
143
  raise if exception_method.nil?
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{mailbox}
8
- s.version = "0.2.1"
8
+ s.version = "0.2.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Joel Friedman", "Patrick Farley"]
12
- s.date = %q{2010-04-21}
12
+ s.date = %q{2010-04-29}
13
13
  s.description = %q{Mailbox is a JRuby module that simplifies concurrency and is backed by JVM threads.}
14
14
  s.email = %q{asher.friedman@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -25,6 +25,7 @@ Gem::Specification.new do |s|
25
25
  "example/log_example.rb",
26
26
  "example/parallel_each_example.rb",
27
27
  "example/ping_pong_example.rb",
28
+ "lib/daemon_thread_factory.rb",
28
29
  "lib/mailbox.rb",
29
30
  "lib/synchronized.rb",
30
31
  "mailbox.gemspec",
@@ -38,6 +38,18 @@
38
38
  </component>
39
39
  <component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false" />
40
40
  <component name="IdProvider" IDEtalkID="2A4BC5ABDEB6DBFA33020D902AA1570C" />
41
+ <component name="InspectionProjectProfileManager">
42
+ <profiles>
43
+ <profile version="1.0" is_locked="false">
44
+ <option name="myName" value="Project Default" />
45
+ <option name="myLocal" value="false" />
46
+ <inspection_tool class="RubyArgCount" enabled="false" level="ERROR" enabled_by_default="false" />
47
+ </profile>
48
+ </profiles>
49
+ <option name="PROJECT_PROFILE" value="Project Default" />
50
+ <option name="USE_PROJECT_PROFILE" value="true" />
51
+ <version value="1.0" />
52
+ </component>
41
53
  <component name="JavadocGenerationManager">
42
54
  <option name="OUTPUT_DIRECTORY" />
43
55
  <option name="OPTION_SCOPE" value="protected" />
@@ -22,6 +22,27 @@ class MailboxTest < Test::Unit::TestCase
22
22
  assert_not_equal JThread.current_thread.name, thread_info[:name]
23
23
  end
24
24
 
25
+ def test_mailslot_supports_threadpool_based_fibers
26
+ klass = Class.new do
27
+ include Mailbox
28
+ mailbox_thread_pool_size 2
29
+
30
+
31
+ mailslot
32
+ def test_method(latch, thread_info)
33
+ thread_info[:name] = JThread.current_thread.name
34
+ latch.count_down
35
+ end
36
+ end
37
+
38
+ thread_info = {}
39
+ latch = Latches::CountDownLatch.new( 1 )
40
+ klass.new.test_method(latch, thread_info)
41
+
42
+ assert( latch.await( 1, Latches::TimeUnit::SECONDS ), "Timed out" )
43
+ assert_not_equal JThread.current_thread.name, thread_info[:name]
44
+ end
45
+
25
46
  def test_can_set_mailslot_to_callback_on_exception
26
47
  klass = Class.new do
27
48
  include Mailbox
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 2
8
- - 1
9
- version: 0.2.1
8
+ - 2
9
+ version: 0.2.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Joel Friedman
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-04-21 00:00:00 -05:00
18
+ date: 2010-04-29 00:00:00 -05:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -60,6 +60,7 @@ files:
60
60
  - example/log_example.rb
61
61
  - example/parallel_each_example.rb
62
62
  - example/ping_pong_example.rb
63
+ - lib/daemon_thread_factory.rb
63
64
  - lib/mailbox.rb
64
65
  - lib/synchronized.rb
65
66
  - mailbox.gemspec