trinidad 0.9.12 → 1.0.0

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.
data/History.txt CHANGED
@@ -1,3 +1,10 @@
1
+ == 1.0.0 (2010-11-04)
2
+
3
+ * Warbler support
4
+ * Add APR listener to run under native connectors
5
+ * fixes #24: setting address doesn't affect listening socket
6
+ * fix issues configuring the logger out of the lifecycle listener
7
+
1
8
  == 0.9.12 (2010-10-21)
2
9
 
3
10
  * fix problems loading tomcat classes from rack application
@@ -30,6 +30,8 @@ module Trinidad
30
30
  end
31
31
 
32
32
  if default_options.has_key?(:config)
33
+ default_options[:config] = File.expand_path(default_options[:config], default_options[:web_app_dir] || Dir.pwd)
34
+
33
35
  config_options = YAML.load_file(default_options[:config])
34
36
  default_options.deep_merge!(config_options.symbolize!)
35
37
  end
@@ -31,10 +31,10 @@ module Trinidad
31
31
 
32
32
  def load_tomcat_server
33
33
  @tomcat = Trinidad::Tomcat::Tomcat.new
34
+ @tomcat.base_dir = Dir.pwd
34
35
  @tomcat.hostname = @config[:address]
35
36
  @tomcat.server.address = @config[:address]
36
37
  @tomcat.port = @config[:port].to_i
37
- @tomcat.base_dir = Dir.pwd
38
38
  @tomcat.host.app_base = @config[:apps_base] || Dir.pwd
39
39
  @tomcat.enable_naming
40
40
 
@@ -46,6 +46,11 @@ module Trinidad
46
46
  end
47
47
 
48
48
  def create_web_apps
49
+ create_from_web_apps
50
+ create_from_apps_base
51
+ end
52
+
53
+ def create_from_web_apps
49
54
  if @config[:web_apps]
50
55
  @config[:web_apps].each do |name, app_config|
51
56
  app_config[:context_path] ||= (name.to_s == 'default' ? '/' : "/#{name.to_s}")
@@ -54,11 +59,17 @@ module Trinidad
54
59
  create_web_app(app_config)
55
60
  end
56
61
  end
62
+ end
63
+
64
+ def create_from_apps_base
57
65
  if @config[:apps_base]
58
- apps_path = Dir.glob(File.join(@config[:apps_base], '*')).select {|path| !(path =~ /tomcat\.8080$/) }
66
+ apps_path = Dir.glob(File.join(@config[:apps_base], '*')).
67
+ select {|path| !(path =~ /tomcat\.\d+$/) }
68
+
69
+ apps_path.reject! {|path| apps_path.include?(path + '.war') }
59
70
 
60
71
  apps_path.each do |path|
61
- if File.directory?(path)
72
+ if (File.directory?(path) || path =~ /\.war$/)
62
73
  name = File.basename(path)
63
74
  app_config = {
64
75
  :context_path => (name == 'default' ? '/' : "/#{name.to_s}"),
@@ -72,19 +83,19 @@ module Trinidad
72
83
  end
73
84
 
74
85
  def create_web_app(app_config)
75
- app_context = @tomcat.addWebapp(app_config[:context_path], app_config[:web_app_dir])
76
- remove_defaults(app_context)
86
+ web_app = WebApp.create(@config, app_config)
87
+
88
+ app_context = @tomcat.addWebapp(web_app.context_path, web_app.web_app_dir)
89
+ app_context.work_dir = web_app.work_dir
77
90
 
78
- web_app = WebApp.create(@config, app_config)
79
- configure_logging(web_app)
91
+ Trinidad::Extensions.configure_webapp_extensions(web_app.extensions, @tomcat, app_context)
80
92
 
81
- Trinidad::Extensions.configure_webapp_extensions(web_app.extensions, @tomcat, app_context)
82
- app_context.add_lifecycle_listener(WebAppLifecycleListener.new(web_app))
93
+ lifecycle = web_app.war? ? Lifecycle::War.new(web_app) : Lifecycle::Default.new(web_app)
94
+ app_context.add_lifecycle_listener(lifecycle)
83
95
  end
84
96
 
85
97
  def add_service_connector(options, protocol = nil)
86
98
  connector = Trinidad::Tomcat::Connector.new(protocol)
87
-
88
99
  opts = options.dup
89
100
 
90
101
  connector.scheme = opts.delete(:scheme) if opts[:scheme]
@@ -124,11 +135,16 @@ module Trinidad
124
135
  end
125
136
 
126
137
  def add_http_connector
127
- options = @config[:http]
138
+ options = @config[:http] || {}
139
+ options[:address] ||= @config[:address] if @config[:address] != 'localhost'
128
140
  options[:port] = @config[:port]
129
141
  options[:protocol_handler] = 'org.apache.coyote.http11.Http11NioProtocol' if options[:nio]
130
142
 
131
- connector = add_service_connector(options, options[:protocol_handler])
143
+ if options[:apr]
144
+ @tomcat.server.add_lifecycle_listener(Trinidad::Tomcat::AprLifecycleListener.new)
145
+ end
146
+
147
+ connector = add_service_connector(options, options[:protocol_handler] || 'HTTP/1.1')
132
148
  @tomcat.connector = connector
133
149
  end
134
150
 
@@ -141,7 +157,7 @@ module Trinidad
141
157
  end
142
158
 
143
159
  def http_configured?
144
- @config.has_key?(:http)
160
+ @config.has_key?(:http) || @config[:address] != 'localhost'
145
161
  end
146
162
 
147
163
  def create_default_keystore(config)
@@ -184,51 +200,5 @@ module Trinidad
184
200
  config[:web_apps] = { :default => default_app }
185
201
  end
186
202
  end
187
-
188
- def remove_defaults(app_context)
189
- default_servlet = app_context.find_child('default')
190
- app_context.remove_child(default_servlet) if default_servlet
191
-
192
- jsp_servlet = app_context.find_child('jsp')
193
- app_context.remove_child(jsp_servlet) if jsp_servlet
194
-
195
- app_context.remove_servlet_mapping('/')
196
- app_context.remove_servlet_mapping('*.jspx')
197
- app_context.remove_servlet_mapping('*.jsp')
198
-
199
- app_context.process_tlds = false
200
- end
201
-
202
- def configure_logging(web_app)
203
- log_path = File.join(web_app.web_app_dir, 'log', "#{web_app.environment}.log")
204
- log_file = java.io.File.new(log_path)
205
-
206
- unless log_file.exists
207
- log_file.parent_file.mkdirs
208
- log_file.create_new_file
209
- end
210
-
211
- jlogging = java.util.logging
212
-
213
- log_handler = jlogging.FileHandler.new(log_path, true)
214
- logger = jlogging.Logger.get_logger("")
215
-
216
- log_level = web_app.log
217
- unless %w{ALL CONFIG FINE FINER FINEST INFO OFF SEVERE WARNING}.include?(log_level)
218
- puts "Invalid log level #{log_level}, using default: INFO"
219
- log_level = 'INFO'
220
- end
221
-
222
- level = jlogging.Level.parse(log_level)
223
-
224
- logger.handlers.each do |handler|
225
- handler.level = level
226
- end
227
-
228
- logger.level = level
229
-
230
- log_handler.formatter = jlogging.SimpleFormatter.new
231
- logger.add_handler(log_handler)
232
- end
233
203
  end
234
204
  end
@@ -0,0 +1,11 @@
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
+ end
11
+ end
@@ -3,7 +3,16 @@ module Trinidad
3
3
  attr_reader :config, :app_config, :class_loader, :servlet
4
4
 
5
5
  def self.create(config, app_config)
6
- rackup?(app_config) ? RackupWebApp.new(config, app_config) : RailsWebApp.new(config, app_config)
6
+ war?(app_config) ? WarWebApp.new(config, app_config) :
7
+ rackup?(app_config) ? RackupWebApp.new(config, app_config) : RailsWebApp.new(config, app_config)
8
+ end
9
+
10
+ def self.rackup?(app_config)
11
+ app_config.has_key?(:rackup) || !Dir['WEB-INF/**/config.ru'].empty?
12
+ end
13
+
14
+ def self.war?(app_config)
15
+ app_config[:context_path] =~ /\.war$/
7
16
  end
8
17
 
9
18
  def initialize(config, app_config, servlet_class = 'org.jruby.rack.RackServlet', servlet_name = 'RackServlet')
@@ -30,7 +39,7 @@ module Trinidad
30
39
 
31
40
  def default_deployment_descriptor
32
41
  @deployment_descriptor ||= if default_web_xml
33
- file = File.expand_path(File.join(web_app_dir, default_web_xml))
42
+ file = File.expand_path(File.join(work_dir, default_web_xml))
34
43
  File.exist?(file) ? file : nil
35
44
  end
36
45
  end
@@ -53,7 +62,7 @@ module Trinidad
53
62
  @app_config[:public] || @config[:public] || 'public'
54
63
  end
55
64
 
56
- %w{web_app_dir libs_dir classes_dir default_web_xml environment
65
+ %w{context_path web_app_dir libs_dir classes_dir default_web_xml environment
57
66
  jruby_min_runtimes jruby_max_runtimes rackup log}.each do |method_name|
58
67
  define_method method_name do
59
68
  sym = method_name.to_sym
@@ -69,6 +78,9 @@ module Trinidad
69
78
  end
70
79
  end
71
80
 
81
+ def war?; WebApp.war?(app_config); end
82
+ def work_dir; web_app_dir; end
83
+
72
84
  protected
73
85
  def add_parameter_unless_exist(param_name, param_value)
74
86
  @params[param_name] = param_value unless web_context_param(param_name)
@@ -80,7 +92,7 @@ module Trinidad
80
92
  @web_xml ||=
81
93
  begin
82
94
  require 'rexml/document'
83
- REXML::Document.new( File.read(default_deployment_descriptor) )
95
+ REXML::Document.new(File.read(default_deployment_descriptor))
84
96
  rescue REXML::ParseException => e
85
97
  puts "WARNING: invalid deployment descriptor:[#{default_deployment_descriptor}]"
86
98
  puts e.message
@@ -102,9 +114,5 @@ module Trinidad
102
114
  end
103
115
  @servlet = {:class => servlet_class, :name => servlet_name}
104
116
  end
105
-
106
- def self.rackup?(app_config)
107
- app_config.has_key?(:rackup) || !Dir['WEB-INF/**/config.ru'].empty?
108
- end
109
117
  end
110
118
  end
data/lib/trinidad.rb CHANGED
@@ -15,12 +15,14 @@ require 'trinidad/extensions'
15
15
  require 'trinidad/command_line_parser'
16
16
  require 'trinidad/jars'
17
17
  require 'trinidad/server'
18
- require 'trinidad/web_app_lifecycle_listener'
18
+ require 'trinidad/lifecycle/lifecycle_listener_base'
19
+ require 'trinidad/lifecycle/lifecycle_listener_default'
20
+ require 'trinidad/lifecycle/lifecycle_listener_war'
19
21
  require 'trinidad/web_app'
20
22
  require 'trinidad/rails_web_app'
21
23
  require 'trinidad/rackup_web_app'
22
-
24
+ require 'trinidad/war_web_app'
23
25
 
24
26
  module Trinidad
25
- VERSION = '0.9.12'
27
+ VERSION = '1.0.0'
26
28
  end
metadata CHANGED
@@ -1,151 +1,136 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trinidad
3
3
  version: !ruby/object:Gem::Version
4
- hash: 35
5
4
  prerelease: false
6
5
  segments:
7
- - 0
8
- - 9
9
- - 12
10
- version: 0.9.12
6
+ - 1
7
+ - 0
8
+ - 0
9
+ version: 1.0.0
11
10
  platform: ruby
12
11
  authors:
13
- - David Calavera
12
+ - David Calavera
14
13
  autorequire:
15
14
  bindir: bin
16
15
  cert_chain: []
17
16
 
18
- date: 2010-10-22 00:00:00 +02:00
17
+ date: 2010-11-04 00:00:00 -07:00
19
18
  default_executable: trinidad
20
19
  dependencies:
21
- - !ruby/object:Gem::Dependency
22
- name: trinidad_jars
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- hash: 19
30
- segments:
31
- - 0
32
- - 3
33
- - 0
34
- version: 0.3.0
35
- type: :runtime
36
- version_requirements: *id001
37
- - !ruby/object:Gem::Dependency
38
- name: jruby-rack
39
- prerelease: false
40
- requirement: &id002 !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ">="
44
- - !ruby/object:Gem::Version
45
- hash: 19
46
- segments:
47
- - 1
48
- - 0
49
- - 2
50
- version: 1.0.2
51
- type: :runtime
52
- version_requirements: *id002
53
- - !ruby/object:Gem::Dependency
54
- name: rspec
55
- prerelease: false
56
- requirement: &id003 !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- hash: 3
62
- segments:
63
- - 0
64
- version: "0"
65
- type: :development
66
- version_requirements: *id003
67
- - !ruby/object:Gem::Dependency
68
- name: mocha
69
- prerelease: false
70
- requirement: &id004 !ruby/object:Gem::Requirement
71
- none: false
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- hash: 3
76
- segments:
77
- - 0
78
- version: "0"
79
- type: :development
80
- version_requirements: *id004
81
- - !ruby/object:Gem::Dependency
82
- name: fakefs
83
- prerelease: false
84
- requirement: &id005 !ruby/object:Gem::Requirement
85
- none: false
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- hash: 3
90
- segments:
91
- - 0
92
- version: "0"
93
- type: :development
94
- version_requirements: *id005
20
+ - !ruby/object:Gem::Dependency
21
+ name: trinidad_jars
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ - 3
30
+ - 0
31
+ version: 0.3.0
32
+ type: :runtime
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: jruby-rack
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ segments:
42
+ - 1
43
+ - 0
44
+ - 2
45
+ version: 1.0.2
46
+ type: :runtime
47
+ version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
49
+ name: rspec
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ segments:
56
+ - 0
57
+ version: "0"
58
+ type: :development
59
+ version_requirements: *id003
60
+ - !ruby/object:Gem::Dependency
61
+ name: mocha
62
+ prerelease: false
63
+ requirement: &id004 !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ segments:
68
+ - 0
69
+ version: "0"
70
+ type: :development
71
+ version_requirements: *id004
72
+ - !ruby/object:Gem::Dependency
73
+ name: fakefs
74
+ prerelease: false
75
+ requirement: &id005 !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ segments:
80
+ - 0
81
+ version: "0"
82
+ type: :development
83
+ version_requirements: *id005
95
84
  description: Trinidad allows you to run a rails or rackup applications within an embedded Apache Tomcat container
96
85
  email: calavera@apache.org
97
86
  executables:
98
- - trinidad
87
+ - trinidad
99
88
  extensions: []
100
89
 
101
90
  extra_rdoc_files:
102
- - README.rdoc
103
- - LICENSE
91
+ - README.rdoc
92
+ - LICENSE
104
93
  files:
105
- - bin/trinidad
106
- - lib/trinidad.rb
107
- - History.txt
108
- - LICENSE
109
- - README.rdoc
110
- - lib/trinidad/command_line_parser.rb
111
- - lib/trinidad/core_ext.rb
112
- - lib/trinidad/extensions.rb
113
- - lib/trinidad/rackup_web_app.rb
114
- - lib/trinidad/rails_web_app.rb
115
- - lib/trinidad/server.rb
116
- - lib/trinidad/web_app.rb
117
- - lib/trinidad/web_app_lifecycle_listener.rb
94
+ - bin/trinidad
95
+ - lib/trinidad.rb
96
+ - History.txt
97
+ - LICENSE
98
+ - README.rdoc
99
+ - lib/trinidad/command_line_parser.rb
100
+ - lib/trinidad/core_ext.rb
101
+ - lib/trinidad/extensions.rb
102
+ - lib/trinidad/rackup_web_app.rb
103
+ - lib/trinidad/rails_web_app.rb
104
+ - lib/trinidad/server.rb
105
+ - lib/trinidad/war_web_app.rb
106
+ - lib/trinidad/web_app.rb
118
107
  has_rdoc: true
119
108
  homepage: http://github.com/calavera/trinidad
120
109
  licenses: []
121
110
 
122
111
  post_install_message:
123
112
  rdoc_options:
124
- - --charset=UTF-8
113
+ - --charset=UTF-8
125
114
  require_paths:
126
- - lib
115
+ - lib
127
116
  required_ruby_version: !ruby/object:Gem::Requirement
128
- none: false
129
117
  requirements:
130
- - - ">="
131
- - !ruby/object:Gem::Version
132
- hash: 3
133
- segments:
134
- - 0
135
- version: "0"
118
+ - - ">="
119
+ - !ruby/object:Gem::Version
120
+ segments:
121
+ - 0
122
+ version: "0"
136
123
  required_rubygems_version: !ruby/object:Gem::Requirement
137
- none: false
138
124
  requirements:
139
- - - ">="
140
- - !ruby/object:Gem::Version
141
- hash: 3
142
- segments:
143
- - 0
144
- version: "0"
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ segments:
128
+ - 0
129
+ version: "0"
145
130
  requirements: []
146
131
 
147
132
  rubyforge_project: trinidad
148
- rubygems_version: 1.3.7
133
+ rubygems_version: 1.3.6
149
134
  signing_key:
150
135
  specification_version: 2
151
136
  summary: Simple library to run rails applications into an embedded Tomcat
@@ -1,88 +0,0 @@
1
- module Trinidad
2
- class WebAppLifecycleListener
3
- include Trinidad::Tomcat::LifecycleListener
4
-
5
- attr_reader :context
6
-
7
- def initialize(webapp)
8
- @webapp = webapp
9
- end
10
-
11
- def lifecycleEvent(event)
12
- if Trinidad::Tomcat::Lifecycle::BEFORE_START_EVENT == event.type
13
- init_defaults(event.lifecycle)
14
- end
15
- end
16
-
17
- def init_defaults(context)
18
- @context = context
19
-
20
- deployment_descriptor = configure_deployment_descriptor
21
- unless deployment_descriptor
22
- configure_rack_servlet
23
- configure_rack_listener
24
- end
25
- configure_init_params
26
- configure_context_loader
27
- end
28
-
29
- def configure_deployment_descriptor
30
- if descriptor = @webapp.default_deployment_descriptor
31
- @context.setDefaultWebXml(descriptor)
32
-
33
- context_config = Trinidad::Tomcat::ContextConfig.new
34
- context_config.setDefaultWebXml(descriptor)
35
-
36
- @context.addLifecycleListener(context_config)
37
- end
38
- descriptor
39
- end
40
-
41
- def configure_rack_servlet
42
- wrapper = @context.create_wrapper
43
- wrapper.servlet_class = @webapp.servlet[:class]
44
- wrapper.name = @webapp.servlet[:name]
45
-
46
- @context.add_child(wrapper)
47
- @context.add_servlet_mapping('/*', wrapper.name)
48
- end
49
-
50
- def configure_rack_listener
51
- @context.addApplicationListener(@webapp.rack_listener)
52
- end
53
-
54
- def configure_init_params
55
- @webapp.init_params.each do |name, value|
56
- @context.addParameter(name, value)
57
- end
58
- end
59
-
60
- def configure_context_loader
61
- class_loader = @webapp.class_loader
62
-
63
- add_application_jars(class_loader)
64
- add_application_java_classes(class_loader)
65
-
66
- loader = Trinidad::Tomcat::WebappLoader.new(class_loader)
67
- loader.container = @context
68
- @context.loader = loader
69
- end
70
-
71
- def add_application_jars(class_loader)
72
- return unless @webapp.libs_dir
73
-
74
- resources_dir = File.join(@webapp.web_app_dir, @webapp.libs_dir, '**', '*.jar')
75
-
76
- Dir[resources_dir].each do |resource|
77
- class_loader.addURL(java.io.File.new(resource).to_url)
78
- end
79
- end
80
-
81
- def add_application_java_classes(class_loader)
82
- return unless @webapp.classes_dir
83
-
84
- resources_dir = File.join(@webapp.web_app_dir, @webapp.classes_dir)
85
- class_loader.addURL(java.io.File.new(resources_dir).to_url)
86
- end
87
- end
88
- end