Class: Trinidad::Lifecycle::Host
- Inherits:
-
Object
- Object
- Trinidad::Lifecycle::Host
- Includes:
- Tomcat::LifecycleListener
- Defined in:
- lib/trinidad/lifecycle/lifecycle_listener_host.rb
Instance Attribute Summary collapse
-
#contexts ⇒ Object
readonly
Returns the value of attribute contexts.
Instance Method Summary collapse
- #check_monitors ⇒ Object
- #create_takeover(c) ⇒ Object
- #init_monitors ⇒ Object
-
#initialize(tomcat, *contexts) ⇒ Host
constructor
A new instance of Host.
- #lifecycleEvent(event) ⇒ Object
Constructor Details
#initialize(tomcat, *contexts) ⇒ Host
Returns a new instance of Host.
9 10 11 12 |
# File 'lib/trinidad/lifecycle/lifecycle_listener_host.rb', line 9 def initialize(tomcat, *contexts) @tomcat = tomcat @contexts = contexts end |
Instance Attribute Details
#contexts ⇒ Object (readonly)
Returns the value of attribute contexts.
7 8 9 |
# File 'lib/trinidad/lifecycle/lifecycle_listener_host.rb', line 7 def contexts @contexts end |
Instance Method Details
#check_monitors ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/trinidad/lifecycle/lifecycle_listener_host.rb', line 39 def check_monitors @contexts.each do |c| # double check monitor, capistrano removes it temporarily sleep(0.5) unless File.exist?(c[:monitor]) next unless File.exist?(c[:monitor]) if (mtime = File.mtime(c[:monitor])) > c[:mtime] && !c[:lock] c[:lock] = true c[:mtime] = mtime c[:context] = create_takeover(c) Thread.new { c[:context].start } end end end |
#create_takeover(c) ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/trinidad/lifecycle/lifecycle_listener_host.rb', line 54 def create_takeover(c) web_app = c[:app] old_context = c[:context] context = Trinidad::Tomcat::StandardContext.new context.name = rand.to_s context.path = old_context.path context.doc_base = web_app.web_app_dir context.add_lifecycle_listener Trinidad::Tomcat::Tomcat::DefaultWebXmlListener.new config = Trinidad::Tomcat::ContextConfig.new config.default_web_xml = 'org/apache/catalina/startup/NO_DEFAULT_XML' context.add_lifecycle_listener config Trinidad::Extensions.configure_webapp_extensions(web_app.extensions, @tomcat, context) web_app.generate_class_loader context.add_lifecycle_listener(web_app.define_lifecycle) context.add_lifecycle_listener(Trinidad::Lifecycle::Takeover.new(c)) old_context.parent.add_child context context end |
#init_monitors ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/trinidad/lifecycle/lifecycle_listener_host.rb', line 25 def init_monitors @contexts.each do |c| monitor = c[:monitor] opts = File.exist?(monitor) ? 'r' : 'w+' unless File.exist?(dir = File.dirname(monitor)) Dir.mkdir dir end file = File.new(monitor, opts) c[:mtime] = file.mtime end end |
#lifecycleEvent(event) ⇒ Object
14 15 16 17 18 19 20 21 22 23 |
# File 'lib/trinidad/lifecycle/lifecycle_listener_host.rb', line 14 def lifecycleEvent(event) host = event.lifecycle case event.type when Trinidad::Tomcat::Lifecycle::BEFORE_START_EVENT init_monitors when Trinidad::Tomcat::Lifecycle::PERIODIC_EVENT check_monitors end end |