trinidad 0.6.0 → 0.7.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 +4 -0
- data/README.rdoc +2 -0
- data/Rakefile +1 -0
- data/VERSION +1 -1
- data/lib/trinidad/core_ext.rb +16 -1
- data/lib/trinidad/rackup_web_app.rb +1 -1
- data/lib/trinidad/rails_web_app.rb +1 -1
- data/lib/trinidad/server.rb +77 -32
- data/lib/trinidad/web_app.rb +26 -10
- data/spec/trinidad/server_spec.rb +26 -0
- data/spec/trinidad/web_app_spec.rb +12 -5
- metadata +3 -3
data/History.txt
CHANGED
data/README.rdoc
CHANGED
@@ -33,6 +33,8 @@ The server can also be configured from a yaml file. If a file is not especified,
|
|
33
33
|
|
34
34
|
You can also specify a default web.xml to config your web application. By default the server tries to load the file <em>config/web.xml</em> but you can modify this path adding the option <em>default_web_xml</em> within your configuration file.
|
35
35
|
|
36
|
+
Other <a href="http://wiki.github.com/calavera/trinidad/advanced-configuration">advanced options</a> can be found in the wiki.
|
37
|
+
|
36
38
|
== Copyright
|
37
39
|
|
38
40
|
Copyright (c) 2009 David Calavera<calavera@apache.org>. See LICENSE for details.
|
data/Rakefile
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.7.0
|
data/lib/trinidad/core_ext.rb
CHANGED
@@ -29,4 +29,19 @@ Hash.class_eval do
|
|
29
29
|
end
|
30
30
|
end
|
31
31
|
end
|
32
|
-
|
32
|
+
|
33
|
+
def deep_key?(key)
|
34
|
+
exist = false
|
35
|
+
|
36
|
+
keys.each do |k|
|
37
|
+
if self[k].is_a? Hash
|
38
|
+
exist = self[k].deep_key? key
|
39
|
+
break
|
40
|
+
end
|
41
|
+
|
42
|
+
exist = (k == key)
|
43
|
+
end
|
44
|
+
|
45
|
+
exist
|
46
|
+
end
|
47
|
+
end
|
@@ -3,7 +3,7 @@ module Trinidad
|
|
3
3
|
|
4
4
|
def add_init_params
|
5
5
|
super
|
6
|
-
@context.addParameter('rails.env',
|
6
|
+
@context.addParameter('rails.env', environment.to_s) unless @context.findParameter('rails.env')
|
7
7
|
@context.addParameter('rails.root', '/') unless @context.findParameter('rails.root')
|
8
8
|
end
|
9
9
|
|
data/lib/trinidad/server.rb
CHANGED
@@ -12,44 +12,52 @@ module Trinidad
|
|
12
12
|
:default_web_xml => 'config/web.xml',
|
13
13
|
:port => 3000,
|
14
14
|
:jruby_min_runtimes => 1,
|
15
|
-
:jruby_max_runtimes => 5
|
16
|
-
:ssl => {
|
17
|
-
:keystore => 'ssl/keystore',
|
18
|
-
:keystorePass => 'waduswadus'
|
19
|
-
}
|
15
|
+
:jruby_max_runtimes => 5
|
20
16
|
}
|
21
17
|
end
|
22
18
|
|
23
19
|
def initialize(config = {})
|
24
20
|
load_config(config)
|
25
21
|
load_tomcat_server
|
26
|
-
|
22
|
+
create_web_apps
|
27
23
|
end
|
28
24
|
|
29
25
|
def load_config(config)
|
30
|
-
@config =
|
31
|
-
|
32
|
-
|
26
|
+
@config = default_options.deep_merge(config)
|
27
|
+
add_default_web_app!(@config)
|
28
|
+
|
29
|
+
configure_ssl!(@config)
|
33
30
|
end
|
34
31
|
|
35
32
|
def load_tomcat_server
|
36
33
|
@tomcat = Trinidad::Tomcat::Tomcat.new
|
37
34
|
@tomcat.setPort(@config[:port].to_i)
|
35
|
+
@tomcat.setBaseDir(Dir.pwd)
|
38
36
|
|
39
37
|
add_ssl_connector if ssl_enabled?
|
40
38
|
add_ajp_connector if ajp_enabled?
|
41
39
|
end
|
42
40
|
|
43
|
-
def
|
44
|
-
|
41
|
+
def create_web_apps
|
42
|
+
@config[:web_apps].each do |name, app|
|
43
|
+
unless app[:context_path]
|
44
|
+
app[:context_path] = name.to_s == 'default' ? '/' : "/#{name.to_s}"
|
45
|
+
end
|
46
|
+
app[:web_app_dir] = Dir.pwd unless app.has_key?(:web_app_dir)
|
47
|
+
|
48
|
+
tomcat_app = @tomcat.addWebapp(app[:context_path].to_s, app[:web_app_dir])
|
49
|
+
# tomcat_app.setDocBase(app[:web_app_dir])
|
50
|
+
|
51
|
+
web_app = WebApp.create(tomcat_app, @config, app)
|
45
52
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
53
|
+
web_app.load_default_web_xml
|
54
|
+
web_app.add_rack_filter
|
55
|
+
web_app.add_context_loader
|
56
|
+
web_app.add_init_params
|
57
|
+
web_app.add_web_dir_resources
|
51
58
|
|
52
|
-
|
59
|
+
web_app.add_rack_context_listener
|
60
|
+
end
|
53
61
|
end
|
54
62
|
|
55
63
|
def add_service_connector(options, protocol = nil)
|
@@ -59,7 +67,7 @@ module Trinidad
|
|
59
67
|
|
60
68
|
connector.scheme = opts.delete(:scheme) if opts[:scheme]
|
61
69
|
connector.secure = opts.delete(:secure) || false
|
62
|
-
connector.port = opts.delete(:port)
|
70
|
+
connector.port = opts.delete(:port).to_i
|
63
71
|
|
64
72
|
options.each do |key, value|
|
65
73
|
connector.setProperty(key.to_s, value.to_s)
|
@@ -73,26 +81,28 @@ module Trinidad
|
|
73
81
|
end
|
74
82
|
|
75
83
|
def add_ssl_connector
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
84
|
+
@config[:web_apps].each do |name, app|
|
85
|
+
options = app[:ssl].merge({
|
86
|
+
:scheme => 'https',
|
87
|
+
:secure => true,
|
88
|
+
:SSLEnabled => 'true',
|
89
|
+
})
|
90
|
+
add_service_connector(options)
|
82
91
|
|
83
|
-
|
92
|
+
create_default_keystore(app) unless File.exist?(app[:ssl][:keystore])
|
93
|
+
end
|
84
94
|
end
|
85
95
|
|
86
96
|
def ssl_enabled?
|
87
|
-
|
97
|
+
@config.has_key?(:ssl) || @config[:web_apps].deep_key?(:ssl)
|
88
98
|
end
|
89
99
|
|
90
100
|
def ajp_enabled?
|
91
|
-
|
101
|
+
@config.has_key?(:ajp)
|
92
102
|
end
|
93
103
|
|
94
|
-
def create_default_keystore
|
95
|
-
keystore_file = java.io.File.new(
|
104
|
+
def create_default_keystore(config)
|
105
|
+
keystore_file = java.io.File.new(config[:ssl][:keystore])
|
96
106
|
|
97
107
|
if (!keystore_file.parent_file.exists() &&
|
98
108
|
!keystore_file.parent_file.mkdir())
|
@@ -105,9 +115,9 @@ module Trinidad
|
|
105
115
|
"-keyalg", "RSA",
|
106
116
|
"-validity", "365",
|
107
117
|
"-storepass", "key",
|
108
|
-
"-keystore",
|
109
|
-
"-storepass",
|
110
|
-
"-keypass",
|
118
|
+
"-keystore", config[:ssl][:keystore],
|
119
|
+
"-storepass", config[:ssl][:keystorePass],
|
120
|
+
"-keypass", config[:ssl][:keystorePass]]
|
111
121
|
|
112
122
|
Trinidad::Tomcat::KeyTool.main(keytool_args.to_java(:string))
|
113
123
|
end
|
@@ -116,5 +126,40 @@ module Trinidad
|
|
116
126
|
@tomcat.start
|
117
127
|
@tomcat.getServer().await
|
118
128
|
end
|
129
|
+
|
130
|
+
private
|
131
|
+
|
132
|
+
def add_default_web_app!(config)
|
133
|
+
if (!config.has_key?(:web_apps))
|
134
|
+
default_app = if (config.has_key?(:rackup))
|
135
|
+
{:rackup => config[:rackup]}
|
136
|
+
else
|
137
|
+
{
|
138
|
+
:context_path => config[:context_path] || '/',
|
139
|
+
:web_app_dir => config[:web_app_dir] || Dir.pwd
|
140
|
+
}
|
141
|
+
end
|
142
|
+
|
143
|
+
config.merge!({
|
144
|
+
:web_apps => {
|
145
|
+
:default => default_app
|
146
|
+
}
|
147
|
+
})
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
def configure_ssl!(config)
|
152
|
+
if config.has_key?(:ssl) || config[:web_apps].deep_key?(:ssl)
|
153
|
+
if (config.has_key?(:ssl))
|
154
|
+
config[:ssl][:keystore] ||= 'ssl/keystore'
|
155
|
+
config[:ssl][:keystorePass] ||= 'waduswadus'
|
156
|
+
end
|
157
|
+
|
158
|
+
config[:web_apps].each do |name, app|
|
159
|
+
app[:ssl] = config[:ssl] unless app.has_key?(:ssl)
|
160
|
+
app[:ssl][:keystore] = File.join(app[:web_app_dir], app[:ssl][:keystore]) if app.has_key?(:ssl)
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|
119
164
|
end
|
120
165
|
end
|
data/lib/trinidad/web_app.rb
CHANGED
@@ -2,13 +2,14 @@ module Trinidad
|
|
2
2
|
class WebApp
|
3
3
|
attr_reader :context, :config
|
4
4
|
|
5
|
-
def self.create(context, config)
|
6
|
-
|
5
|
+
def self.create(context, config, app)
|
6
|
+
app.has_key?(:rackup) ? RackupWebApp.new(context, config, app) : RailsWebApp.new(context, config, app)
|
7
7
|
end
|
8
8
|
|
9
|
-
def initialize(context, config)
|
9
|
+
def initialize(context, config, app)
|
10
10
|
@context = context
|
11
11
|
@config = config
|
12
|
+
@app = app
|
12
13
|
end
|
13
14
|
|
14
15
|
def add_rack_filter
|
@@ -17,10 +18,9 @@ module Trinidad
|
|
17
18
|
filter_def.setFilterName('RackFilter')
|
18
19
|
filter_def.setFilterClass('org.jruby.rack.RackFilter')
|
19
20
|
|
20
|
-
pattern = @config[:context_path][-1..-1] != '/' ? @config[:context_path] : @config[:context_path][0..-2]
|
21
21
|
filter_map = Trinidad::Tomcat::FilterMap.new
|
22
22
|
filter_map.setFilterName('RackFilter')
|
23
|
-
filter_map.addURLPattern(
|
23
|
+
filter_map.addURLPattern('/*')
|
24
24
|
|
25
25
|
@context.addFilterDef(filter_def)
|
26
26
|
@context.addFilterMap(filter_map)
|
@@ -49,7 +49,7 @@ module Trinidad
|
|
49
49
|
end
|
50
50
|
|
51
51
|
def add_web_dir_resources
|
52
|
-
@context.setDocBase(File.join(@
|
52
|
+
@context.setDocBase(File.join(@app[:web_app_dir], public_root)) if File.exist?(File.join(@app[:web_app_dir], public_root))
|
53
53
|
end
|
54
54
|
|
55
55
|
def add_rack_context_listener
|
@@ -59,7 +59,7 @@ module Trinidad
|
|
59
59
|
end
|
60
60
|
|
61
61
|
def add_application_libs(class_loader)
|
62
|
-
resources_dir = File.join(@
|
62
|
+
resources_dir = File.join(@app[:web_app_dir], libs_dir, '**', '*.jar')
|
63
63
|
|
64
64
|
Dir[resources_dir].each do |resource|
|
65
65
|
class_loader.addURL(java.io.File.new(resource).to_url)
|
@@ -67,12 +67,12 @@ module Trinidad
|
|
67
67
|
end
|
68
68
|
|
69
69
|
def add_application_classes(class_loader)
|
70
|
-
resources_dir = File.join(@
|
70
|
+
resources_dir = File.join(@app[:web_app_dir], classes_dir)
|
71
71
|
class_loader.addURL(java.io.File.new(resources_dir).to_url)
|
72
72
|
end
|
73
73
|
|
74
74
|
def load_default_web_xml
|
75
|
-
default_web_xml = File.expand_path(File.join(@
|
75
|
+
default_web_xml = File.expand_path(File.join(@app[:web_app_dir], default_web_xml_file))
|
76
76
|
|
77
77
|
if File.exist?(default_web_xml)
|
78
78
|
@context.setDefaultWebXml(default_web_xml)
|
@@ -103,7 +103,23 @@ module Trinidad
|
|
103
103
|
end
|
104
104
|
|
105
105
|
def public_root
|
106
|
-
@context.findParameter('public.root') || @config[:public] || 'public'
|
106
|
+
@context.findParameter('public.root') || @app[:public] || @config[:public] || 'public'
|
107
|
+
end
|
108
|
+
|
109
|
+
def libs_dir
|
110
|
+
@app[:libs_dir] || @config[:libs_dir]
|
111
|
+
end
|
112
|
+
|
113
|
+
def classes_dir
|
114
|
+
@app[:classes_dir] || @config[:classes_dir]
|
115
|
+
end
|
116
|
+
|
117
|
+
def default_web_xml_file
|
118
|
+
@app[:default_web_xml] || @config[:default_web_xml]
|
119
|
+
end
|
120
|
+
|
121
|
+
def environment
|
122
|
+
@app[:environment] || @config[:environment]
|
107
123
|
end
|
108
124
|
end
|
109
125
|
end
|
@@ -39,4 +39,30 @@ describe Trinidad::Server do
|
|
39
39
|
server.tomcat.service.findConnectors().should have(1).connectors
|
40
40
|
server.tomcat.service.findConnectors()[0].protocol.should == 'AJP/1.3'
|
41
41
|
end
|
42
|
+
|
43
|
+
it "loads one application for each option present into :web_apps" do
|
44
|
+
server = Trinidad::Server.new({
|
45
|
+
:web_apps => {
|
46
|
+
:mock1 => {
|
47
|
+
:context_path => '/mock1',
|
48
|
+
:web_app_dir => File.join(File.dirname(__FILE__), '..', 'web_app_mock')
|
49
|
+
},
|
50
|
+
:mock2 => {
|
51
|
+
:context_path => '/mock2',
|
52
|
+
:web_app_dir => File.join(File.dirname(__FILE__), '..', 'web_app_mock')
|
53
|
+
}
|
54
|
+
}
|
55
|
+
})
|
56
|
+
|
57
|
+
server.tomcat.host.findChildren().should have(2).web_apps
|
58
|
+
server.tomcat.host.findChildren().each do |child|
|
59
|
+
puts child.getPath()
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
it "loads the default application from the current directory if :web_apps is not present" do
|
64
|
+
server = Trinidad::Server.new({:web_app_dir => File.join(File.dirname(__FILE__), '..', 'web_app_mock')})
|
65
|
+
|
66
|
+
server.tomcat.host.findChildren().should have(1).web_apps
|
67
|
+
end
|
42
68
|
end
|
@@ -4,24 +4,31 @@ describe Trinidad::WebApp do
|
|
4
4
|
before do
|
5
5
|
@tomcat = Trinidad::Tomcat::Tomcat.new
|
6
6
|
@tomcat_web_app = @tomcat.addWebapp('/', File.dirname(__FILE__) + '/../../')
|
7
|
+
@app = {
|
8
|
+
:web_app_dir => File.join(File.dirname(__FILE__), '..', 'web_app_mock'),
|
9
|
+
:context_path => '/'
|
10
|
+
}
|
7
11
|
@config = {
|
8
12
|
:libs_dir => 'lib',
|
9
13
|
:classes_dir => 'classes',
|
10
14
|
:default_web_xml => 'config/web.xml',
|
11
|
-
:web_app_dir => File.join(File.dirname(__FILE__), '..', 'web_app_mock'),
|
12
15
|
:jruby_min_runtimes => 2,
|
13
16
|
:jruby_max_runtimes => 6,
|
14
|
-
:
|
17
|
+
:web_apps => {
|
18
|
+
:default => @app
|
19
|
+
}
|
15
20
|
}
|
16
|
-
@web_app = Trinidad::RailsWebApp.new(@tomcat_web_app, @config)
|
21
|
+
@web_app = Trinidad::RailsWebApp.new(@tomcat_web_app, @config, @app)
|
17
22
|
end
|
18
23
|
|
19
24
|
it "creates a RailsWebApp if rackup option is not present" do
|
20
|
-
Trinidad::WebApp.create(@tomcat_web_app, @config).is_a?(Trinidad::RailsWebApp).should be_true
|
25
|
+
Trinidad::WebApp.create(@tomcat_web_app, @config, @app).is_a?(Trinidad::RailsWebApp).should be_true
|
21
26
|
end
|
22
27
|
|
23
28
|
it "creates a RackupWebApp if rackup option is present" do
|
24
|
-
|
29
|
+
rackup_app = {:rackup => 'config.ru'}
|
30
|
+
@config.deep_merge({:web_apps => {:default => rackup_app}})
|
31
|
+
Trinidad::WebApp.create(@tomcat_web_app, @config, rackup_app).is_a?(Trinidad::RackupWebApp).should be_true
|
25
32
|
end
|
26
33
|
|
27
34
|
it "should load custom jars" do
|
metadata
CHANGED
@@ -67,15 +67,15 @@ requirements: []
|
|
67
67
|
|
68
68
|
authors:
|
69
69
|
- David Calavera
|
70
|
-
date: 2009-11-
|
70
|
+
date: 2009-11-30 23:00:00 +00:00
|
71
71
|
platform: ruby
|
72
72
|
test_files:
|
73
73
|
- spec/spec_helper.rb
|
74
|
-
- spec/trinidad/command_line_parser_spec.rb
|
75
74
|
- spec/trinidad/server_spec.rb
|
75
|
+
- spec/trinidad/command_line_parser_spec.rb
|
76
76
|
- spec/trinidad/web_app_spec.rb
|
77
77
|
version: !ruby/object:Gem::Version
|
78
|
-
version: 0.
|
78
|
+
version: 0.7.0
|
79
79
|
require_paths:
|
80
80
|
- lib
|
81
81
|
dependencies:
|