Class: RServiceBus::ResourceManager

Inherits:
Object
  • Object
show all
Defined in:
lib/rservicebus/ResourceManager.rb

Overview

Coordinate Transactions across resources, handlers, and Sagas

Instance Method Summary collapse

Constructor Details

#initialize(stateManager, sagaStorage) ⇒ ResourceManager

Constructor



8
9
10
11
12
13
# File 'lib/rservicebus/ResourceManager.rb', line 8

def initialize( stateManager, sagaStorage )
    @appResources = Hash.new
    @currentResources = Hash.new
    @stateManager = stateManager
    @sagaStorage = sagaStorage
end

Instance Method Details

#add(name, res) ⇒ Object



15
16
17
# File 'lib/rservicebus/ResourceManager.rb', line 15

def add( name, res )
    @appResources[name] = res
end

#BeginObject



23
24
25
26
27
# File 'lib/rservicebus/ResourceManager.rb', line 23

def Begin
    @currentResources = Hash.new
    @stateManager.Begin
    @sagaStorage.Begin
end

#Commit(msgName) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
# File 'lib/rservicebus/ResourceManager.rb', line 40

def Commit( msgName )
    @stateManager.Commit
    @sagaStorage.Commit
    RServiceBus.rlog "HandlerManager.commitResourcesUsedToProcessMsg, #{msgName}"
    @currentResources.each do |k,v|
        RServiceBus.rlog "Commit resource, #{v.class.name}"
        v.Commit
        v.finished
    end
    
end

#get(name) ⇒ Object



29
30
31
32
33
34
35
36
37
38
# File 'lib/rservicebus/ResourceManager.rb', line 29

def get( name )
    if @currentResources[name].nil? then
        r = @appResources[name]
        r._connect
        r.Begin
        RServiceBus.rlog "Preparing resource: #{name}. Begin"
    end
    @currentResources[name] = @appResources[name]
    return @appResources[name]
end

#getAllObject



19
20
21
# File 'lib/rservicebus/ResourceManager.rb', line 19

def getAll
    return @appResources
end

#Rollback(msgName) ⇒ Object



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/rservicebus/ResourceManager.rb', line 52

def Rollback( msgName )
    @sagaStorage.Rollback
    RServiceBus.rlog "HandlerManager.rollbackResourcesUsedToProcessMsg, #{msgName}"
    @currentResources.each do |k,v|
        begin
            RServiceBus.rlog "Rollback resource, #{v.class.name}"
            v.Rollback
            v.finished
            rescue Exception => e1
            puts "Caught nested exception rolling back, #{v.class.name}, for msg, #{msgName}"
            puts '****'
            puts e1.message
            puts e1.backtrace
            puts '****'
        end
    end
    
end