trinidad 1.3.5 → 1.4.0.RC

Sign up to get free protection for your applications and to get access to all the features.
@@ -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