trinidad_lifecycle_extension 0.3.0 → 0.4.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/README.md +35 -14
- data/lib/trinidad_lifecycle_extension.rb +34 -16
- data/lib/trinidad_lifecycle_extension/version.rb +1 -1
- data/spec/{fixtures/fake_listeners.rb → lifecycle/fake.rb} +1 -14
- data/spec/lifecycle/more.rb +10 -0
- data/spec/listeners/server_1.rb +9 -0
- data/spec/listeners/server_2.rb +11 -0
- data/spec/listeners/web_app.rb +7 -0
- data/spec/trinidad_lifecycle_extension_spec.rb +29 -4
- data/trinidad_lifecycle_extension.gemspec +5 -3
- metadata +10 -8
- data/History.txt +0 -5
- data/trinidad-libs/tomcat-catalina-jmx-remote.jar +0 -0
data/README.md
CHANGED
@@ -2,11 +2,14 @@
|
|
2
2
|
|
3
3
|
This extension allows you to add lifecycle listeners (written in ruby) to the
|
4
4
|
[Trinidad](https://github.com/trinidad/trinidad/) server container as well as to
|
5
|
-
|
5
|
+
deployed web application contexts running on top of it.
|
6
6
|
|
7
|
-
This extension
|
8
|
-
|
9
|
-
|
7
|
+
This extension no longer bundles the **catalina-jmx-remote.jar** and thus for
|
8
|
+
configuring remote JMX monitoring capabilities using the `JmxRemoteLifecycleListener`
|
9
|
+
you will need to provide and load the Java class (e.g. by downloading and
|
10
|
+
loading the .jar). Alternatively, there's a separate
|
11
|
+
[trinidad_jmx_remote_extension](http://github.com/kares/trinidad_jmx_remote_extension)
|
12
|
+
for enabling JMX with SSH if that's all you're looking for here.
|
10
13
|
|
11
14
|
## Install
|
12
15
|
|
@@ -31,7 +34,7 @@ the path to the directory where the listener .rb files are located e.g. :
|
|
31
34
|
# ...
|
32
35
|
extensions:
|
33
36
|
lifecycle:
|
34
|
-
|
37
|
+
listeners_path: "lib/lifecycle" # defaults to lib/lifecycle
|
35
38
|
```
|
36
39
|
|
37
40
|
Trinidad will try to require the *.rb files from the lifecycle directory and
|
@@ -81,15 +84,32 @@ they will be instantiated and configured as listeners e.g. :
|
|
81
84
|
module Trinidad
|
82
85
|
module Lifecycle
|
83
86
|
module Server
|
84
|
-
|
87
|
+
SECURITY_SETUP = org.apache.catalina.security.SecurityListener
|
85
88
|
end
|
86
89
|
end
|
87
90
|
end
|
88
91
|
```
|
89
92
|
|
93
|
+
Of you may sub-class them and perform desired setup when instantiated :
|
94
|
+
|
95
|
+
```ruby
|
96
|
+
module Trinidad
|
97
|
+
module Lifecycle
|
98
|
+
module Server
|
99
|
+
class UserSecurity < org.apache.catalina.security.SecurityListener
|
100
|
+
def initialize
|
101
|
+
setCheckedOsUsers('root,public,nobody')
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
```
|
108
|
+
|
109
|
+
|
90
110
|
### WebApp Lifecycle Listener
|
91
111
|
|
92
|
-
The very same
|
112
|
+
The very same rules apply as for the Server listeners above except that we add
|
93
113
|
listener classes under the `Trinidad::Lifecycle::WebApp` module e.g. :
|
94
114
|
|
95
115
|
```ruby
|
@@ -114,20 +134,21 @@ module Trinidad
|
|
114
134
|
end
|
115
135
|
```
|
116
136
|
|
117
|
-
Lifecycle listeners might be exported as configured instances as well e.g. :
|
137
|
+
Lifecycle listeners might be exported as (configured) instances as well e.g. :
|
118
138
|
|
119
139
|
```ruby
|
120
140
|
module Trinidad
|
121
141
|
module Lifecycle
|
122
|
-
module
|
142
|
+
module WebApp
|
123
143
|
|
124
|
-
def self.
|
125
|
-
|
126
|
-
|
127
|
-
|
144
|
+
def self.configure_jre_memory_leak_prevention_listener
|
145
|
+
listener = org.apache.catalina.core.JreMemoryLeakPreventionListener.new
|
146
|
+
listener.setGcDaemonProtection(true)
|
147
|
+
listener.setUrlCacheProtection(true)
|
148
|
+
listener
|
128
149
|
end
|
129
150
|
|
130
|
-
|
151
|
+
MEMORY_LEAK_LISTENER = self.configure_jre_memory_leak_prevention_listener
|
131
152
|
|
132
153
|
end
|
133
154
|
end
|
@@ -14,13 +14,22 @@ module Trinidad
|
|
14
14
|
@@_constants = self.constants.dup
|
15
15
|
|
16
16
|
def self.listeners
|
17
|
+
listener_constants.map do |name|
|
18
|
+
const = self.const_get(name)
|
19
|
+
const.is_a?(Class) ? const.new : const
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.listener_constants
|
17
24
|
listeners = self.constants - @@_constants
|
18
25
|
listeners.map! do |name|
|
19
26
|
const = self.const_get(name)
|
20
27
|
if const.is_a?(Class) && const.included_modules.include?(Listener)
|
21
|
-
|
28
|
+
name
|
22
29
|
elsif const.is_a?(Listener)
|
23
|
-
|
30
|
+
name
|
31
|
+
else
|
32
|
+
nil
|
24
33
|
end
|
25
34
|
end
|
26
35
|
listeners.compact
|
@@ -33,13 +42,29 @@ module Trinidad
|
|
33
42
|
module Extensions
|
34
43
|
module Lifecycle
|
35
44
|
|
45
|
+
DEFAULT_LISTENERS_PATH = 'lib/lifecycle'
|
46
|
+
|
47
|
+
protected
|
48
|
+
|
49
|
+
def listeners_path(type = nil)
|
50
|
+
options[:listeners_path] || options[:path] || DEFAULT_LISTENERS_PATH
|
51
|
+
end
|
52
|
+
|
36
53
|
private
|
37
54
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
55
|
+
LOAD_METHOD = :load
|
56
|
+
|
57
|
+
def init_listeners(base_mod, listeners_path, container)
|
58
|
+
# allow listeners_path to be a glob itself :
|
59
|
+
load_files = Dir.glob(listeners_path)
|
60
|
+
if load_files.size == 0 ||
|
61
|
+
( load_files.size == 1 && File.directory?(load_files[0]) )
|
62
|
+
load_files = Dir.glob(File.join(listeners_path, '*.rb'))
|
63
|
+
end
|
64
|
+
|
65
|
+
load_files.each { |rb_file| send LOAD_METHOD, rb_file }
|
42
66
|
|
67
|
+
# e.g. Trinidad::Lifecycle::Server.listeners
|
43
68
|
base_mod.listeners.each do |listener|
|
44
69
|
container.add_lifecycle_listener listener
|
45
70
|
end
|
@@ -51,7 +76,7 @@ module Trinidad
|
|
51
76
|
include Lifecycle
|
52
77
|
|
53
78
|
def configure(tomcat)
|
54
|
-
init_listeners(
|
79
|
+
init_listeners(Trinidad::Lifecycle::Server, listeners_path(:server), tomcat.server)
|
55
80
|
end
|
56
81
|
|
57
82
|
end
|
@@ -59,18 +84,11 @@ module Trinidad
|
|
59
84
|
class LifecycleWebAppExtension < WebAppExtension
|
60
85
|
include Lifecycle
|
61
86
|
|
62
|
-
def configure(
|
63
|
-
init_listeners(
|
87
|
+
def configure(context)
|
88
|
+
init_listeners(Trinidad::Lifecycle::WebApp, listeners_path(:webapp), context)
|
64
89
|
end
|
65
90
|
|
66
91
|
end
|
67
|
-
|
68
|
-
class LifecycleOptionsExtension < OptionsExtension
|
69
|
-
def configure(parser, default_options)
|
70
|
-
default_options[:extensions] ||= {}
|
71
|
-
default_options[:extensions][:lifecycle] = {}
|
72
|
-
end
|
73
|
-
end
|
74
92
|
|
75
93
|
end
|
76
94
|
end
|
@@ -1,35 +1,22 @@
|
|
1
1
|
module Trinidad
|
2
2
|
module Lifecycle
|
3
3
|
module Server
|
4
|
-
|
5
|
-
CONSTANT = 42
|
6
|
-
|
4
|
+
ANSWER = 42
|
7
5
|
class FakeStart < Base
|
8
|
-
|
9
6
|
def start
|
10
7
|
put "#{self.inspect} start"
|
11
8
|
end
|
12
|
-
|
13
9
|
end
|
14
|
-
|
15
|
-
USER_CONFIG = org.apache.catalina.startup.UserConfig
|
16
|
-
|
17
10
|
end
|
18
11
|
module WebApp
|
19
|
-
|
20
12
|
class HelperClass; end
|
21
|
-
|
22
13
|
class FakeListener
|
23
14
|
include Trinidad::Tomcat::LifecycleListener
|
24
15
|
|
25
16
|
def lifecycleEvent(event)
|
26
17
|
put "#{self.inspect} lifecycle event: #{event}"
|
27
18
|
end
|
28
|
-
|
29
19
|
end
|
30
|
-
|
31
|
-
SECURITY = org.apache.catalina.security.SecurityListener.new
|
32
|
-
|
33
20
|
end
|
34
21
|
end
|
35
22
|
end
|
@@ -3,9 +3,18 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
|
3
3
|
describe 'trinidad lifecycle extension' do
|
4
4
|
|
5
5
|
before :all do
|
6
|
-
@options = { :path => File.expand_path('../
|
6
|
+
@options = { :path => File.expand_path('../lifecycle', __FILE__) }
|
7
7
|
end
|
8
8
|
|
9
|
+
after do
|
10
|
+
Trinidad::Lifecycle::Server.listener_constants.each do |name|
|
11
|
+
Trinidad::Lifecycle::Server.send :remove_const, name
|
12
|
+
end
|
13
|
+
Trinidad::Lifecycle::WebApp.listener_constants.each do |name|
|
14
|
+
Trinidad::Lifecycle::WebApp.send :remove_const, name
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
9
18
|
let(:tomcat) { org.apache.catalina.startup.Tomcat.new }
|
10
19
|
let(:context) { Trinidad::Tomcat::StandardContext.new }
|
11
20
|
|
@@ -15,7 +24,16 @@ describe 'trinidad lifecycle extension' do
|
|
15
24
|
|
16
25
|
it "adds the listener to the tomcat's server context" do
|
17
26
|
subject.configure(tomcat)
|
18
|
-
tomcat.server.findLifecycleListeners
|
27
|
+
tomcat.server.findLifecycleListeners.should have(2).listener
|
28
|
+
end
|
29
|
+
|
30
|
+
it "accepts a glob path" do
|
31
|
+
subject.options.replace :path => 'spec/listeners/ser*.rb'
|
32
|
+
subject.configure(tomcat)
|
33
|
+
tomcat.server.findLifecycleListeners.should have(2).listener
|
34
|
+
listeners = tomcat.server.findLifecycleListeners
|
35
|
+
listeners[0].should be_a org.apache.catalina.security.SecurityListener
|
36
|
+
listeners[1].should be_a org.apache.catalina.startup.EngineConfig
|
19
37
|
end
|
20
38
|
|
21
39
|
end
|
@@ -25,8 +43,15 @@ describe 'trinidad lifecycle extension' do
|
|
25
43
|
subject { Trinidad::Extensions::LifecycleWebAppExtension.new(@options.dup) }
|
26
44
|
|
27
45
|
it "adds the listener to the application context" do
|
28
|
-
subject.configure(
|
29
|
-
context.findLifecycleListeners
|
46
|
+
subject.configure(context)
|
47
|
+
context.findLifecycleListeners.should have(2).listener
|
48
|
+
end
|
49
|
+
|
50
|
+
it "allows the path to point to a ruby file" do
|
51
|
+
subject.options.replace :listeners_path => 'spec/listeners/web_app.rb'
|
52
|
+
subject.configure(context)
|
53
|
+
context.findLifecycleListeners.should have(1).listener
|
54
|
+
context.findLifecycleListeners[0].should be_a org.apache.catalina.startup.UserConfig
|
30
55
|
end
|
31
56
|
|
32
57
|
end
|
@@ -7,8 +7,10 @@ Gem::Specification.new do |s|
|
|
7
7
|
s.version = Trinidad::Extensions::Lifecycle::VERSION
|
8
8
|
s.rubyforge_project = 'trinidad_lifecycle_extension'
|
9
9
|
|
10
|
-
s.summary = "
|
11
|
-
s.description = "
|
10
|
+
s.summary = "Lifecycle Listeners for Trinidad"
|
11
|
+
s.description = "This extension allows you to add lifecycle listeners to " +
|
12
|
+
"Trinidad's server container as well as to deployed web application " +
|
13
|
+
"contexts running on top of it."
|
12
14
|
|
13
15
|
s.authors = ["David Calavera"]
|
14
16
|
s.email = 'calavera@apache.org'
|
@@ -21,7 +23,7 @@ Gem::Specification.new do |s|
|
|
21
23
|
s.files = `git ls-files`.split("\n")
|
22
24
|
s.test_files = s.files.select { |path| path =~ /^spec\/*_spec\.rb/ }
|
23
25
|
|
24
|
-
s.add_dependency('trinidad', '>= 1.
|
26
|
+
s.add_dependency('trinidad', '>= 1.4.1')
|
25
27
|
s.add_development_dependency('rake')
|
26
28
|
s.add_development_dependency('rspec', '>= 2.8.0')
|
27
29
|
s.add_development_dependency('mocha')
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: trinidad_lifecycle_extension
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.
|
5
|
+
version: 0.4.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- David Calavera
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2012-10-
|
13
|
+
date: 2012-10-09 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: trinidad
|
@@ -20,7 +20,7 @@ dependencies:
|
|
20
20
|
requirements:
|
21
21
|
- - ">="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: 1.
|
23
|
+
version: 1.4.1
|
24
24
|
type: :runtime
|
25
25
|
version_requirements: *id001
|
26
26
|
- !ruby/object:Gem::Dependency
|
@@ -56,7 +56,7 @@ dependencies:
|
|
56
56
|
version: "0"
|
57
57
|
type: :development
|
58
58
|
version_requirements: *id004
|
59
|
-
description:
|
59
|
+
description: This extension allows you to add lifecycle listeners to Trinidad's server container as well as to deployed web application contexts running on top of it.
|
60
60
|
email: calavera@apache.org
|
61
61
|
executables: []
|
62
62
|
|
@@ -68,16 +68,18 @@ extra_rdoc_files:
|
|
68
68
|
files:
|
69
69
|
- .gitignore
|
70
70
|
- Gemfile
|
71
|
-
- History.txt
|
72
71
|
- LICENSE
|
73
72
|
- README.md
|
74
73
|
- Rakefile
|
75
74
|
- lib/trinidad_lifecycle_extension.rb
|
76
75
|
- lib/trinidad_lifecycle_extension/version.rb
|
77
|
-
- spec/
|
76
|
+
- spec/lifecycle/fake.rb
|
77
|
+
- spec/lifecycle/more.rb
|
78
|
+
- spec/listeners/server_1.rb
|
79
|
+
- spec/listeners/server_2.rb
|
80
|
+
- spec/listeners/web_app.rb
|
78
81
|
- spec/spec_helper.rb
|
79
82
|
- spec/trinidad_lifecycle_extension_spec.rb
|
80
|
-
- trinidad-libs/tomcat-catalina-jmx-remote.jar
|
81
83
|
- trinidad_lifecycle_extension.gemspec
|
82
84
|
homepage: http://github.com/trinidad/trinidad_lifecycle_extension
|
83
85
|
licenses: []
|
@@ -105,6 +107,6 @@ rubyforge_project: trinidad_lifecycle_extension
|
|
105
107
|
rubygems_version: 1.8.15
|
106
108
|
signing_key:
|
107
109
|
specification_version: 3
|
108
|
-
summary:
|
110
|
+
summary: Lifecycle Listeners for Trinidad
|
109
111
|
test_files: []
|
110
112
|
|
data/History.txt
DELETED
Binary file
|