Class: Trinidad::Lifecycle::Host::RollingReload
- Inherits:
-
Object
- Object
- Trinidad::Lifecycle::Host::RollingReload
- Defined in:
- lib/trinidad/lifecycle/host/rolling_reload.rb
Overview
Rolls a new context that replaces the current one on reloads.
Defined Under Namespace
Classes: Takeover
Class Method Summary collapse
-
.logger ⇒ Object
log into the same location as context.reload does :.
Instance Method Summary collapse
-
#initialize(server) ⇒ RollingReload
constructor
A new instance of RollingReload.
- #reload!(app_holder) ⇒ Object
Constructor Details
#initialize(server) ⇒ RollingReload
Returns a new instance of RollingReload.
8 9 10 |
# File 'lib/trinidad/lifecycle/host/rolling_reload.rb', line 8 def initialize(server) @server = server end |
Class Method Details
.logger ⇒ Object
log into the same location as context.reload does :
39 40 41 |
# File 'lib/trinidad/lifecycle/host/rolling_reload.rb', line 39 def self.logger # log into the same location as context.reload does : Trinidad::Logging::LogFactory.getLog('org.apache.catalina.core.StandardContext') end |
Instance Method Details
#reload!(app_holder) ⇒ Object
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/trinidad/lifecycle/host/rolling_reload.rb', line 12 def reload!(app_holder) web_app, old_context = app_holder.web_app, app_holder.context logger = self.class.logger logger.info "Context with name [#{old_context.name}] has started rolling" web_app.reset! # force a new class loader + re-read state (from config) no_host = org.apache.catalina.Host.impl {} # do not add to parent yet new_context = @server.add_web_app(web_app, no_host) new_context.add_lifecycle_listener(Takeover.new(old_context)) # Tomcat requires us to have unique names for its containers : new_context.name = "#{old_context.name}-#{java.lang.System.currentTimeMillis}" app_holder.context = new_context Thread.new do begin logger.debug "Starting a new Context for [#{new_context.path}]" old_context.parent.add_child new_context # NOTE: likely starts! new_context.start unless new_context.state_name =~ /START/i logger.info "Context with name [#{old_context.name}] has completed rolling" ensure app_holder.unlock end end false # not yet reloaded do not release lock end |