trinidad 1.3.5 → 1.4.0.RC

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,42 +0,0 @@
1
- Hash.class_eval do
2
- # Merges self with another hash, recursively.
3
- #
4
- # This code was lovingly stolen from some random gem:
5
- # http://gemjack.com/gems/tartan-0.1.1/classes/Hash.html
6
- #
7
- # Thanks to whoever made it.
8
- def deep_merge(hash)
9
- target = dup
10
-
11
- hash.keys.each do |key|
12
- if hash[key].is_a? Hash and self[key].is_a? Hash
13
- target[key] = target[key].deep_merge(hash[key])
14
- next
15
- end
16
-
17
- value = hash[key]
18
- value.strip! if value.respond_to?(:strip!)
19
- target[key] = value
20
- end
21
-
22
- target
23
- end
24
-
25
- def deep_merge!(second)
26
- second.each_pair do |k,v|
27
- if self[k].is_a?(Hash) and second[k].is_a?(Hash)
28
- self[k].deep_merge!(second[k])
29
- else
30
- self[k] = second[k]
31
- end
32
- end
33
- end
34
-
35
- def symbolize!
36
- keys.each do |key|
37
- self[key].symbolize! if self[key].is_a?(Hash)
38
- self[key.to_sym] = self.delete(key)
39
- end
40
- self
41
- end
42
- end
@@ -1,88 +0,0 @@
1
- module Trinidad
2
- module Lifecycle
3
- class Base
4
- include Trinidad::Tomcat::LifecycleListener
5
- attr_reader :webapp
6
-
7
- def initialize(webapp)
8
- @webapp = webapp
9
- @configured_logger = false
10
- end
11
-
12
- def lifecycleEvent(event)
13
- if Trinidad::Tomcat::Lifecycle::BEFORE_START_EVENT == event.type
14
- context = event.lifecycle
15
- configure_defaults(context)
16
- end
17
- end
18
-
19
- def configure_defaults(context)
20
- remove_defaults(context)
21
- configure_logging
22
- end
23
-
24
- def remove_defaults(context)
25
- context.remove_welcome_file('index.jsp')
26
- context.remove_welcome_file('index.htm')
27
- context.remove_welcome_file('index.html')
28
-
29
- jsp_servlet = context.find_child('jsp')
30
- context.remove_child(jsp_servlet) if jsp_servlet
31
-
32
- context.remove_servlet_mapping('*.jspx')
33
- context.remove_servlet_mapping('*.jsp')
34
-
35
- context.process_tlds = false
36
- context.xml_validation = false
37
- end
38
-
39
- def configure_logging
40
- return if @configured_logger
41
-
42
- log_path = File.join(@webapp.work_dir, 'log', "#{@webapp.environment}.log")
43
- log_file = java.io.File.new(log_path)
44
-
45
- unless log_file.exists
46
- log_file.parent_file.mkdirs
47
- log_file.create_new_file
48
- end
49
-
50
- jlogging = java.util.logging
51
-
52
- file_handler = jlogging.FileHandler.new(log_path, true)
53
-
54
- out_handler = jlogging.ConsoleHandler.new
55
- out_handler.set_output_stream JRuby.runtime.out
56
-
57
- err_handler = jlogging.ConsoleHandler.new
58
- err_handler.set_output_stream JRuby.runtime.err
59
-
60
- logger = jlogging.Logger.get_logger("")
61
-
62
- log_level = @webapp.log
63
- unless %w{ALL CONFIG FINE FINER FINEST INFO OFF SEVERE WARNING}.include?(log_level)
64
- puts "Invalid log level #{log_level}, using default: INFO"
65
- log_level = 'INFO'
66
- end
67
-
68
- level = jlogging.Level.parse(log_level)
69
-
70
- console_handler = logger.handlers.first
71
- logger.remove_handler(console_handler)
72
-
73
- logger.add_handler(file_handler)
74
- logger.add_handler(out_handler)
75
- logger.add_handler(err_handler)
76
-
77
- logger.handlers.each do |handler|
78
- handler.level = level
79
- handler.formatter = Trinidad::LogFormatter.new
80
- end
81
-
82
- logger.level = level
83
-
84
- @configured_logger = true
85
- end
86
- end
87
- end
88
- end
@@ -1,84 +0,0 @@
1
- module Trinidad
2
- module Lifecycle
3
- class Default < Base
4
- def configure_defaults(context)
5
- super
6
- deployment_descriptor = configure_deployment_descriptor(context)
7
- unless deployment_descriptor
8
- configure_rack_servlet(context)
9
- configure_rack_listener(context)
10
- end
11
- configure_init_params(context)
12
- configure_context_loader(context)
13
- end
14
-
15
- def configure_deployment_descriptor(context)
16
- if descriptor = @webapp.default_deployment_descriptor
17
- listeners = context.findLifecycleListeners
18
- context_config = listeners && listeners.find do |listener|
19
- listener.is_a?(Trinidad::Tomcat::ContextConfig)
20
- end
21
-
22
- unless context_config
23
- context_config = Trinidad::Tomcat::ContextConfig.new
24
- context.addLifecycleListener(context_config)
25
- end
26
-
27
- context_config.setDefaultWebXml(descriptor)
28
- end
29
- descriptor
30
- end
31
-
32
- def configure_rack_servlet(context)
33
- wrapper = context.create_wrapper
34
- if @webapp.servlet[:instance]
35
- wrapper.servlet = @webapp.servlet[:instance]
36
- else
37
- wrapper.servlet_class = @webapp.servlet[:class]
38
- end
39
- wrapper.name = @webapp.servlet[:name]
40
-
41
- context.add_child(wrapper)
42
- context.add_servlet_mapping('/*', wrapper.name)
43
- end
44
-
45
- def configure_rack_listener(context)
46
- context.addApplicationListener(@webapp.rack_listener) unless @webapp.servlet[:instance]
47
- end
48
-
49
- def configure_init_params(context)
50
- @webapp.init_params.each do |name, value|
51
- context.addParameter(name, value)
52
- end
53
- end
54
-
55
- def configure_context_loader(context)
56
- class_loader = @webapp.class_loader
57
-
58
- add_application_jars(class_loader)
59
- add_application_java_classes(class_loader)
60
-
61
- loader = Trinidad::Tomcat::WebappLoader.new(class_loader)
62
- loader.container = context
63
- context.loader = loader
64
- end
65
-
66
- def add_application_jars(class_loader)
67
- return unless @webapp.libs_dir
68
-
69
- resources_dir = File.join(@webapp.web_app_dir, @webapp.libs_dir, '**', '*.jar')
70
-
71
- Dir[resources_dir].each do |resource|
72
- class_loader.addURL(java.io.File.new(resource).to_url)
73
- end
74
- end
75
-
76
- def add_application_java_classes(class_loader)
77
- return unless @webapp.classes_dir
78
-
79
- resources_dir = File.join(@webapp.web_app_dir, @webapp.classes_dir)
80
- class_loader.addURL(java.io.File.new(resources_dir).to_url)
81
- end
82
- end
83
- end
84
- end
@@ -1,81 +0,0 @@
1
- module Trinidad
2
- module Lifecycle
3
-
4
- class Host
5
- include Trinidad::Tomcat::LifecycleListener
6
-
7
- attr_reader :contexts
8
-
9
- def initialize(tomcat, *contexts)
10
- @tomcat = tomcat
11
- @contexts = contexts
12
- end
13
-
14
- def lifecycleEvent(event)
15
- host = event.lifecycle
16
-
17
- case event.type
18
- when Trinidad::Tomcat::Lifecycle::BEFORE_START_EVENT
19
- init_monitors
20
- when Trinidad::Tomcat::Lifecycle::PERIODIC_EVENT
21
- check_monitors
22
- end
23
- end
24
-
25
- def init_monitors
26
- @contexts.each do |c|
27
- monitor = c[:monitor]
28
- opts = File.exist?(monitor) ? 'r' : 'w+'
29
-
30
- unless File.exist?(dir = File.dirname(monitor))
31
- Dir.mkdir dir
32
- end
33
-
34
- file = File.new(monitor, opts)
35
- c[:mtime] = file.mtime
36
- end
37
- end
38
-
39
- def check_monitors
40
- @contexts.each do |c|
41
- # double check monitor, capistrano removes it temporarily
42
- sleep(0.5) unless File.exist?(c[:monitor])
43
- next unless File.exist?(c[:monitor])
44
-
45
- if (mtime = File.mtime(c[:monitor])) > c[:mtime] && !c[:lock]
46
- c[:lock] = true
47
- c[:mtime] = mtime
48
- c[:context] = create_takeover(c)
49
- Thread.new { c[:context].start }
50
- end
51
- end
52
- end
53
-
54
- def create_takeover(c)
55
- web_app = c[:app]
56
- old_context = c[:context]
57
-
58
- context = Trinidad::Tomcat::StandardContext.new
59
- context.name = rand.to_s
60
- context.path = old_context.path
61
- context.doc_base = web_app.web_app_dir
62
-
63
- context.add_lifecycle_listener Trinidad::Tomcat::Tomcat::DefaultWebXmlListener.new
64
-
65
- config = Trinidad::Tomcat::ContextConfig.new
66
- config.default_web_xml = 'org/apache/catalina/startup/NO_DEFAULT_XML'
67
- context.add_lifecycle_listener config
68
-
69
- Trinidad::Extensions.configure_webapp_extensions(web_app.extensions, @tomcat, context)
70
-
71
- web_app.generate_class_loader
72
- context.add_lifecycle_listener(web_app.define_lifecycle)
73
- context.add_lifecycle_listener(Trinidad::Lifecycle::Takeover.new(c))
74
-
75
- old_context.parent.add_child context
76
-
77
- context
78
- end
79
- end
80
- end
81
- end
@@ -1,43 +0,0 @@
1
- module Trinidad
2
- module Lifecycle
3
- class War < Base
4
- def lifecycleEvent(event)
5
- case event.type
6
- when Trinidad::Tomcat::Lifecycle::AFTER_STOP_EVENT
7
- destroy_expanded_app
8
- when Trinidad::Tomcat::Lifecycle::BEFORE_START_EVENT
9
- expand_app(event.lifecycle)
10
- end
11
-
12
- super
13
- end
14
-
15
- def configure_defaults(context)
16
- super
17
- configure_class_loader(context)
18
- end
19
-
20
- def configure_class_loader(context)
21
- loader = Trinidad::Tomcat::WebappLoader.new(@webapp.class_loader)
22
- loader.container = context
23
- context.loader = loader
24
- end
25
-
26
- def destroy_expanded_app
27
- require 'fileutils'
28
- FileUtils.rm_rf @webapp.web_app_dir.gsub(/\.war$/, '')
29
- end
30
-
31
- def expand_app(context)
32
- if !File.exist?(context.doc_base)
33
- host = context.parent
34
- war_file = java.io.File.new(@webapp.web_app_dir)
35
- war = java.net.URL.new("jar:" + war_file.toURI.toURL.to_s + "!/")
36
- path_name = File.basename(context.doc_base)
37
-
38
- Trinidad::Tomcat::ExpandWar.expand(host, war, path_name)
39
- end
40
- end
41
- end
42
- end
43
- end
@@ -1,25 +0,0 @@
1
- module Trinidad
2
- module Lifecycle
3
- class Takeover
4
- include Trinidad::Tomcat::LifecycleListener
5
- def initialize(old)
6
- @old = old
7
- end
8
-
9
- def lifecycleEvent(event)
10
- if event.type == Trinidad::Tomcat::Lifecycle::AFTER_START_EVENT
11
- begin
12
- name = @old[:context].name
13
-
14
- @old[:context].stop
15
- @old[:context].destroy
16
-
17
- event.lifecycle.name = name
18
- ensure
19
- @old.delete(:lock)
20
- end
21
- end
22
- end
23
- end
24
- end
25
- end
@@ -1,18 +0,0 @@
1
- module Trinidad
2
- class LogFormatter < Java::JavaUtilLogging::Formatter
3
- def initialize(format = "yyyy-MM-dd HH:mm:ss")
4
- @format = Java::JavaText::SimpleDateFormat.new format
5
- calendar = Java::JavaUtil::GregorianCalendar.new
6
- calendar.time_zone = Java::JavaUtil::SimpleTimeZone.new(0, 'UTC')
7
- @format.calendar = calendar
8
- end
9
-
10
- def format(record)
11
- timestamp = @format.format(Java::JavaUtil::Date.new record.millis)
12
- level = record.level.name
13
- message = record.message.chomp
14
-
15
- "#{timestamp} #{level}: #{message}\n"
16
- end
17
- end
18
- end
@@ -1,16 +0,0 @@
1
- module Trinidad
2
- class RackupWebApp < WebApp
3
-
4
- def init_params
5
- super
6
- if rackup_path = rackup
7
- rackup_path = File.join(rackup_path, 'config.ru') if File.directory?(rackup_path)
8
- add_parameter_unless_exist('rackup.path', rackup_path)
9
- add_parameter_unless_exist('rack.env', environment.to_s)
10
- end
11
- @params
12
- end
13
-
14
- def context_listener; 'org.jruby.rack.RackServletContextListener'; end
15
- end
16
- end
@@ -1,13 +0,0 @@
1
- module Trinidad
2
- class RailsWebApp < WebApp
3
-
4
- def init_params
5
- super
6
- add_parameter_unless_exist 'rails.env', environment.to_s
7
- add_parameter_unless_exist 'rails.root', '/'
8
- @params
9
- end
10
-
11
- def context_listener; 'org.jruby.rack.rails.RailsServletContextListener'; end
12
- end
13
- end
@@ -1,19 +0,0 @@
1
- module Trinidad
2
- class WarWebApp < WebApp
3
- def context_path
4
- super.gsub(/\.war$/, '')
5
- end
6
-
7
- def work_dir
8
- File.join(web_app_dir.gsub(/\.war$/, ''), 'WEB-INF')
9
- end
10
-
11
- def monitor
12
- File.expand_path(web_app_dir)
13
- end
14
-
15
- def define_lifecycle
16
- Trinidad::Lifecycle::War.new(self)
17
- end
18
- end
19
- end