rboss 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +9 -0
- data/Gemfile +4 -0
- data/Rakefile +1 -0
- data/bin/jboss-profile +90 -0
- data/bin/twiddle +230 -0
- data/examples/jboss_profile/jbb_profile_1.yaml +32 -0
- data/examples/jboss_profile/jbb_profile_2.yaml +32 -0
- data/examples/jboss_profile/jboss_profile.yaml +7 -0
- data/examples/monitor/simple_monitor.rb +61 -0
- data/lib/rboss.rb +25 -0
- data/lib/rboss/component_processor.rb +177 -0
- data/lib/rboss/components/component.rb +52 -0
- data/lib/rboss/components/datasource.rb +198 -0
- data/lib/rboss/components/deploy_folder.rb +104 -0
- data/lib/rboss/components/hypersonic_replacer.rb +58 -0
- data/lib/rboss/components/jbossweb.rb +117 -0
- data/lib/rboss/components/jmx.rb +88 -0
- data/lib/rboss/components/mod_cluster.rb +81 -0
- data/lib/rboss/components/org/6.0/deploy_folder.rb +33 -0
- data/lib/rboss/components/org/jmx.rb +59 -0
- data/lib/rboss/components/profile_folder.rb +44 -0
- data/lib/rboss/components/resource.rb +53 -0
- data/lib/rboss/components/run_conf.rb +90 -0
- data/lib/rboss/components/run_conf.yaml +22 -0
- data/lib/rboss/components/service_script.rb +55 -0
- data/lib/rboss/components/slimming.rb +124 -0
- data/lib/rboss/components/soa-p/hypersonic_replacer.rb +79 -0
- data/lib/rboss/components/soa-p/jmx.rb +47 -0
- data/lib/rboss/components/xadatasource.rb +67 -0
- data/lib/rboss/file_processor.rb +107 -0
- data/lib/rboss/jboss_path.rb +53 -0
- data/lib/rboss/jboss_profile.rb +344 -0
- data/lib/rboss/resources/jboss_init_redhat.sh.erb +140 -0
- data/lib/rboss/resources/mod_cluster.sar/META-INF/mod_cluster-jboss-beans.xml +282 -0
- data/lib/rboss/resources/mod_cluster.sar/mod_cluster-1.1.2.Final.jar +0 -0
- data/lib/rboss/resources/run.conf.erb +62 -0
- data/lib/rboss/twiddle.rb +25 -0
- data/lib/rboss/twiddle/base_monitor.rb +57 -0
- data/lib/rboss/twiddle/mbean.rb +82 -0
- data/lib/rboss/twiddle/monitor.rb +144 -0
- data/lib/rboss/twiddle/scanner.rb +92 -0
- data/lib/rboss/twiddle/twiddle.rb +71 -0
- data/lib/rboss/utils.rb +33 -0
- data/lib/rboss/version.rb +25 -0
- data/rboss.gemspec +20 -0
- data/test/datasource_test.rb +211 -0
- data/test/deploy_folder_test.rb +126 -0
- data/test/mbean_test.rb +53 -0
- data/test/test_helper.rb +124 -0
- data/test/test_suite.rb +35 -0
- metadata +109 -0
@@ -0,0 +1,79 @@
|
|
1
|
+
# The MIT License
|
2
|
+
#
|
3
|
+
# Copyright (c) 2011 Marcelo Guimarães <ataxexe@gmail.com>
|
4
|
+
#
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
# of this software and associated documentation files (the "Software"), to deal
|
7
|
+
# in the Software without restriction, including without limitation the rights
|
8
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
# copies of the Software, and to permit persons to whom the Software is
|
10
|
+
# furnished to do so, subject to the following conditions:
|
11
|
+
#
|
12
|
+
# The above copyright notice and this permission notice shall be included in
|
13
|
+
# all copies or substantial portions of the Software.
|
14
|
+
#
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
# THE SOFTWARE.
|
22
|
+
|
23
|
+
require 'fileutils'
|
24
|
+
|
25
|
+
module JBoss
|
26
|
+
|
27
|
+
# A class to replace Hypersonic in SOA-P. This class makes a build.properties file
|
28
|
+
# and calls the ant script present in $JBOSS_HOME/tools/schema/build.xml since this
|
29
|
+
# script does everything we need to replace Hypersonic.
|
30
|
+
#
|
31
|
+
# The configuration must be in a form key => value and the keys needs to be
|
32
|
+
# in the $JBOSS_HOME/tools/schema/build.properties file.
|
33
|
+
#
|
34
|
+
# The ant script minimal keys are:
|
35
|
+
# - db.name
|
36
|
+
# - db.hostname
|
37
|
+
# - db.port
|
38
|
+
# - db.username
|
39
|
+
# - db.password
|
40
|
+
# - source.dir (the directory in $JBOSS_HOME/tools/schema/ that matches the database type)
|
41
|
+
#
|
42
|
+
# author: Marcelo Guimarães <ataxexe@gmail.com>
|
43
|
+
class HypersonicReplacer
|
44
|
+
include FileUtils
|
45
|
+
|
46
|
+
def defaults
|
47
|
+
{
|
48
|
+
"org.jboss.esb.server.home" => File.expand_path(@jboss.home),
|
49
|
+
"org.jboss.esb.server.clustered" => "#{File.exists? "#{@jboss.profile}/farm"}",
|
50
|
+
"org.jboss.esb.server.config" => "#{@jboss.profile_name}",
|
51
|
+
|
52
|
+
"db.minpoolsize" => 15,
|
53
|
+
"db.maxpoolsize" => 50
|
54
|
+
}
|
55
|
+
end
|
56
|
+
|
57
|
+
def configure config
|
58
|
+
@config = config
|
59
|
+
end
|
60
|
+
|
61
|
+
def process
|
62
|
+
properties = @config.collect { |key, value| "#{key} = #{value}" }
|
63
|
+
|
64
|
+
# make a backup of build.properties
|
65
|
+
mv "#{@jboss.home}/tools/schema/build.properties", "#{@jboss.home}/tools/schema/build.properties~"
|
66
|
+
|
67
|
+
File.open("#{@jboss.home}/tools/schema/build.properties", 'w+') { |f| f.write properties.join("\n") }
|
68
|
+
|
69
|
+
cd "#{@jboss.home}/tools/schema" do
|
70
|
+
@logger.info "Executing ant..."
|
71
|
+
`ant`
|
72
|
+
end
|
73
|
+
|
74
|
+
mv "#{@jboss.home}/tools/schema/build.properties~", "#{@jboss.home}/tools/schema/build.properties"
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# The MIT License
|
2
|
+
#
|
3
|
+
# Copyright (c) 2011 Marcelo Guimarães <ataxexe@gmail.com>
|
4
|
+
#
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
# of this software and associated documentation files (the "Software"), to deal
|
7
|
+
# in the Software without restriction, including without limitation the rights
|
8
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
# copies of the Software, and to permit persons to whom the Software is
|
10
|
+
# furnished to do so, subject to the following conditions:
|
11
|
+
#
|
12
|
+
# The above copyright notice and this permission notice shall be included in
|
13
|
+
# all copies or substantial portions of the Software.
|
14
|
+
#
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
# THE SOFTWARE.
|
22
|
+
|
23
|
+
# A class that extends the default JMX component
|
24
|
+
# for compatibillity with JBoss SOA-P
|
25
|
+
#
|
26
|
+
# author: Marcelo Guimarães <ataxexe@gmail.com>
|
27
|
+
module JBoss
|
28
|
+
class JMX
|
29
|
+
|
30
|
+
def defaults
|
31
|
+
{
|
32
|
+
:user => "admin",
|
33
|
+
:password => "admin",
|
34
|
+
:roles => "JBossAdmin,HttpInvoker,admin,user"
|
35
|
+
}
|
36
|
+
end
|
37
|
+
|
38
|
+
def users_properties_file
|
39
|
+
"soa-users.properties"
|
40
|
+
end
|
41
|
+
|
42
|
+
def roles_properties_file
|
43
|
+
"soa-roles.properties"
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
# The MIT License
|
2
|
+
#
|
3
|
+
# Copyright (c) 2011 Marcelo Guimarães <ataxexe@gmail.com>
|
4
|
+
#
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
# of this software and associated documentation files (the "Software"), to deal
|
7
|
+
# in the Software without restriction, including without limitation the rights
|
8
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
# copies of the Software, and to permit persons to whom the Software is
|
10
|
+
# furnished to do so, subject to the following conditions:
|
11
|
+
#
|
12
|
+
# The above copyright notice and this permission notice shall be included in
|
13
|
+
# all copies or substantial portions of the Software.
|
14
|
+
#
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
# THE SOFTWARE.
|
22
|
+
|
23
|
+
require_relative "datasource"
|
24
|
+
require_relative "component"
|
25
|
+
|
26
|
+
require "logger"
|
27
|
+
require "rexml/document"
|
28
|
+
|
29
|
+
include REXML
|
30
|
+
|
31
|
+
module JBoss
|
32
|
+
|
33
|
+
# A class to configure a JBoss XADatasource.
|
34
|
+
#
|
35
|
+
# The configuration will change a <xa-datasource-property> value.
|
36
|
+
#
|
37
|
+
# Configuration attributes are the same as for a JBoss::Datasource
|
38
|
+
#
|
39
|
+
# author: Marcelo Guimarães <ataxexe@gmail.com>
|
40
|
+
class XADatasource < Datasource
|
41
|
+
include Component
|
42
|
+
|
43
|
+
def configure config
|
44
|
+
super config
|
45
|
+
@type << "-xa"
|
46
|
+
end
|
47
|
+
|
48
|
+
def configure_datasource xml
|
49
|
+
if @encrypt
|
50
|
+
xml.delete_element "//xa-datasource-property[@name='User']"
|
51
|
+
xml.delete_element "//xa-datasource-property[@name='Password']"
|
52
|
+
@service = "XATxCM"
|
53
|
+
end
|
54
|
+
@attributes.each do |key, value|
|
55
|
+
element = find(xml, key) {|k| "//xa-datasource-property[@name='#{k}']"}
|
56
|
+
|
57
|
+
if element
|
58
|
+
element.text = value
|
59
|
+
else
|
60
|
+
insert_attribute xml, key, value
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
@@ -0,0 +1,107 @@
|
|
1
|
+
# The MIT License
|
2
|
+
#
|
3
|
+
# Copyright (c) 2011 Marcelo Guimarães <ataxexe@gmail.com>
|
4
|
+
#
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
# of this software and associated documentation files (the "Software"), to deal
|
7
|
+
# in the Software without restriction, including without limitation the rights
|
8
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
# copies of the Software, and to permit persons to whom the Software is
|
10
|
+
# furnished to do so, subject to the following conditions:
|
11
|
+
#
|
12
|
+
# The above copyright notice and this permission notice shall be included in
|
13
|
+
# all copies or substantial portions of the Software.
|
14
|
+
#
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
# THE SOFTWARE.
|
22
|
+
|
23
|
+
require "rexml/document"
|
24
|
+
require "fileutils"
|
25
|
+
require "ostruct"
|
26
|
+
require "logger"
|
27
|
+
|
28
|
+
class FileProcessor
|
29
|
+
|
30
|
+
def initialize opts = {}
|
31
|
+
@logger = opts[:logger]
|
32
|
+
@var = opts[:var]
|
33
|
+
@logger ||= Logger::new(STDOUT)
|
34
|
+
@handlers = {
|
35
|
+
:plain => {
|
36
|
+
:load => lambda do |file|
|
37
|
+
@logger.info "Loading file #{file}"
|
38
|
+
File.read(file)
|
39
|
+
end,
|
40
|
+
:store => lambda do |file, content|
|
41
|
+
@logger.info "Saving file #{file}"
|
42
|
+
File.open(file, 'w+') { |f| f.write (content) }
|
43
|
+
end
|
44
|
+
},
|
45
|
+
:xml => {
|
46
|
+
:load => lambda do |file|
|
47
|
+
@logger.info "Parsing file #{file}"
|
48
|
+
REXML::Document::new File::new(file)
|
49
|
+
end,
|
50
|
+
|
51
|
+
:store => lambda do |file, xml|
|
52
|
+
@logger.info "Saving file #{file}"
|
53
|
+
content = ''
|
54
|
+
formatter = REXML::Formatters::Pretty::new 2
|
55
|
+
formatter.write xml, content
|
56
|
+
File.open(file, 'w+') { |f| f.write content }
|
57
|
+
end
|
58
|
+
}
|
59
|
+
}
|
60
|
+
|
61
|
+
@actions = {}
|
62
|
+
end
|
63
|
+
|
64
|
+
def register type, actions
|
65
|
+
@handlers[type] = actions
|
66
|
+
end
|
67
|
+
|
68
|
+
def with file, type = :plain
|
69
|
+
@current_file = file.to_s
|
70
|
+
@actions[@current_file] = {}
|
71
|
+
to_load &@handlers[type][:load]
|
72
|
+
to_store &@handlers[type][:store]
|
73
|
+
yield self
|
74
|
+
end
|
75
|
+
|
76
|
+
def copy_to file
|
77
|
+
@actions[@current_file][:copy] = file.to_s
|
78
|
+
end
|
79
|
+
|
80
|
+
def return
|
81
|
+
@actions[@current_file][:return] = true
|
82
|
+
end
|
83
|
+
|
84
|
+
def to_load &block
|
85
|
+
@actions[@current_file][:to_load] = block
|
86
|
+
end
|
87
|
+
|
88
|
+
def to_store &block
|
89
|
+
@actions[@current_file][:to_store] = block
|
90
|
+
end
|
91
|
+
|
92
|
+
def to_process &block
|
93
|
+
@actions[@current_file][:to_process] = block
|
94
|
+
end
|
95
|
+
|
96
|
+
def process
|
97
|
+
@actions.each do |file, action|
|
98
|
+
action[:obj] = action[:to_load].call file
|
99
|
+
@logger.info "Processing file #{file}"
|
100
|
+
action[:obj] = action[:to_process].call(action[:obj], @var) if action[:obj]
|
101
|
+
file = action[:copy] if action[:copy]
|
102
|
+
return action[:obj] if action[:return]
|
103
|
+
action[:to_store].call file, action[:obj]
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# The MIT License
|
2
|
+
#
|
3
|
+
# Copyright (c) 2011 Marcelo Guimarães <ataxexe@gmail.com>
|
4
|
+
#
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
# of this software and associated documentation files (the "Software"), to deal
|
7
|
+
# in the Software without restriction, including without limitation the rights
|
8
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
# copies of the Software, and to permit persons to whom the Software is
|
10
|
+
# furnished to do so, subject to the following conditions:
|
11
|
+
#
|
12
|
+
# The above copyright notice and this permission notice shall be included in
|
13
|
+
# all copies or substantial portions of the Software.
|
14
|
+
#
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
# THE SOFTWARE.
|
22
|
+
|
23
|
+
require "logger"
|
24
|
+
|
25
|
+
module JBoss
|
26
|
+
|
27
|
+
# A class that represents the JBoss structure.
|
28
|
+
#
|
29
|
+
# author Marcelo Guimarães <ataxexe@gmail.com>
|
30
|
+
class Path
|
31
|
+
|
32
|
+
attr_reader :profile, :profile_name, :home, :type, :version
|
33
|
+
|
34
|
+
def initialize jboss_home, params = {}
|
35
|
+
params = {
|
36
|
+
:profile => :custom,
|
37
|
+
:type => :undefined,
|
38
|
+
version => :undefined
|
39
|
+
}.merge params
|
40
|
+
@home = jboss_home
|
41
|
+
@profile ="#{@home}/server/#{params[:profile]}"
|
42
|
+
@profile_name = @profile.to_s
|
43
|
+
@type = params[:type]
|
44
|
+
@version = params[:version]
|
45
|
+
end
|
46
|
+
|
47
|
+
def to_s
|
48
|
+
@home
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
@@ -0,0 +1,344 @@
|
|
1
|
+
# The MIT License
|
2
|
+
#
|
3
|
+
# Copyright (c) 2011 Marcelo Guimarães <ataxexe@gmail.com>
|
4
|
+
#
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
# of this software and associated documentation files (the "Software"), to deal
|
7
|
+
# in the Software without restriction, including without limitation the rights
|
8
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
# copies of the Software, and to permit persons to whom the Software is
|
10
|
+
# furnished to do so, subject to the following conditions:
|
11
|
+
#
|
12
|
+
# The above copyright notice and this permission notice shall be included in
|
13
|
+
# all copies or substantial portions of the Software.
|
14
|
+
#
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
# THE SOFTWARE.
|
22
|
+
|
23
|
+
require_relative "file_processor"
|
24
|
+
require_relative "utils"
|
25
|
+
require_relative "component_processor"
|
26
|
+
require_relative "jboss_path"
|
27
|
+
|
28
|
+
require "logger"
|
29
|
+
require "ostruct"
|
30
|
+
require "fileutils"
|
31
|
+
|
32
|
+
module JBoss
|
33
|
+
|
34
|
+
# A Class to configure a JBoss Profile
|
35
|
+
#
|
36
|
+
# Basically, this class is a Component Processor with some components added to configure a JBoss profile, the built-in
|
37
|
+
# components are:
|
38
|
+
#
|
39
|
+
# :deploy_folder => binded to a JBoss::DeployFolder
|
40
|
+
#
|
41
|
+
# :cluster => a shortcut component for :run_conf, sends these attributes to it:
|
42
|
+
# :multicast_ip => default "239.255.0.1"
|
43
|
+
# :partition_name => default "${profile name}-partition
|
44
|
+
#
|
45
|
+
# :jms => a shortcut component for :run_conf, sends these attributes to it:
|
46
|
+
# :peer_id
|
47
|
+
#
|
48
|
+
# :bind => a shortcut component, sends these attributes:
|
49
|
+
# To :run_conf
|
50
|
+
# :ports => sends as :service_binding
|
51
|
+
# To :init_script
|
52
|
+
# :address => default "localhost", sends as :bind_address
|
53
|
+
#
|
54
|
+
# :resource => binded to a JBoss::Resource
|
55
|
+
#
|
56
|
+
# :jmx => binded to a JBoss::JMX, enabled by default and sends user and password
|
57
|
+
# values to :init_script
|
58
|
+
#
|
59
|
+
# :datasource => binded to a JBoss::Datasource
|
60
|
+
#
|
61
|
+
# :xa_datasource => binded to a JBoss::XADatasource
|
62
|
+
#
|
63
|
+
# :default_ds => binded to a JBoss::HypersonicReplacer
|
64
|
+
#
|
65
|
+
# :mod_cluster => binded to a JBoss::ModCluster
|
66
|
+
# Defaults:
|
67
|
+
# :path => "resources/mod_cluster.sar"
|
68
|
+
# Move to :run_conf (for externalizing mod_cluster configuration)
|
69
|
+
# :advertise
|
70
|
+
# :advertise_group_address
|
71
|
+
# :advertise_port
|
72
|
+
# :proxy_list
|
73
|
+
# :excluded_contexts
|
74
|
+
# :auto_enable_contexts
|
75
|
+
#
|
76
|
+
# :run_conf => binded to a JBoss::RunConf
|
77
|
+
# Defaults:
|
78
|
+
# :path => 'resources/run.conf.erb'
|
79
|
+
# :stack_size => '128k'
|
80
|
+
# :heap_size => '2048m'
|
81
|
+
# :perm_size => '256m'
|
82
|
+
#
|
83
|
+
# :slimming => binded to a JBoss::Slimming
|
84
|
+
#
|
85
|
+
# :init_script => binded to a JBoss::ServiceScritp
|
86
|
+
# Defaults:
|
87
|
+
# :path => 'resources/jboss_init_redhat.sh'
|
88
|
+
# :jmx_user => "admin"
|
89
|
+
# :jmx_password => "admin"
|
90
|
+
# :bind_address => "0.0.0.0"
|
91
|
+
# :java_path => "/usr/java/default"
|
92
|
+
# :jnp_port => 1099
|
93
|
+
# :jboss_user => "RUNASIS"
|
94
|
+
#
|
95
|
+
# author Marcelo Guimarães <ataxexe@gmail.com>
|
96
|
+
class Profile < ComponentProcessor
|
97
|
+
|
98
|
+
# Priorities for components
|
99
|
+
@@pre_install = 0
|
100
|
+
@@install = @@pre_install + 10
|
101
|
+
@@post_install = @@install + 10
|
102
|
+
|
103
|
+
@@pre_setup = @@post_install + 10
|
104
|
+
@@setup = @@pre_setup + 10
|
105
|
+
@@post_setup = @@setup + 10
|
106
|
+
|
107
|
+
@@final = @@post_setup + 10
|
108
|
+
|
109
|
+
attr_reader :jboss
|
110
|
+
|
111
|
+
def initialize opts = {}
|
112
|
+
block = lambda { |type, config| type.new(@jboss, @logger, config).process }
|
113
|
+
super &block
|
114
|
+
@base_dir = File.dirname(__FILE__)
|
115
|
+
@opts = {
|
116
|
+
:jboss_home => ENV['JBOSS_HOME'],
|
117
|
+
:base_profile => :production,
|
118
|
+
:profile => :custom,
|
119
|
+
:type => :undefined,
|
120
|
+
:version => :undefined
|
121
|
+
}.merge! opts
|
122
|
+
@jboss_home = File.expand_path @opts[:jboss_home]
|
123
|
+
@logger = @opts[:logger]
|
124
|
+
unless @logger
|
125
|
+
@logger = Logger::new STDOUT
|
126
|
+
@logger.level = opts[:log_level] if opts[:log_level]
|
127
|
+
formatter = Logger::Formatter.new
|
128
|
+
|
129
|
+
def formatter.call(severity, time, program_name, message)
|
130
|
+
"#{severity} : #{message}\n"
|
131
|
+
end
|
132
|
+
|
133
|
+
@logger.formatter = formatter
|
134
|
+
end
|
135
|
+
@profile = @opts[:profile].to_s
|
136
|
+
@base_profile = @opts[:base_profile].to_s
|
137
|
+
@jboss = JBoss::Path::new @jboss_home,
|
138
|
+
:profile => @profile,
|
139
|
+
:type => @opts[:type],
|
140
|
+
:version => @opts[:version]
|
141
|
+
initialize_components
|
142
|
+
end
|
143
|
+
|
144
|
+
def create
|
145
|
+
add :profile_folder, @base_profile
|
146
|
+
process_components
|
147
|
+
end
|
148
|
+
|
149
|
+
alias update process_components
|
150
|
+
|
151
|
+
# For making code more readable
|
152
|
+
#
|
153
|
+
# example: profile.install :mod_cluster
|
154
|
+
alias install add
|
155
|
+
|
156
|
+
# For making code more readable
|
157
|
+
#
|
158
|
+
# example: profile.configure :jmx, :password => "password"
|
159
|
+
alias configure add
|
160
|
+
|
161
|
+
# For making code more readable
|
162
|
+
#
|
163
|
+
# example: profile.slim :jmx_console, :admin_console
|
164
|
+
def slim *args
|
165
|
+
add :slimming, args
|
166
|
+
end
|
167
|
+
|
168
|
+
# loads extensions to components based on the type of jboss (eap, soa-p, org, epp...)
|
169
|
+
def load_extensions
|
170
|
+
unless @jboss.type == :undefined
|
171
|
+
dir = File.join(@base_dir, "components", @jboss.type.to_s.gsub(/_/, '-'))
|
172
|
+
load_scripts_in dir
|
173
|
+
unless @jboss.version == :undefined
|
174
|
+
dir = File.join(dir, @jboss.version.to_s)
|
175
|
+
load_scripts_in dir
|
176
|
+
end
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
def load_scripts_in dir
|
181
|
+
if File.exists? dir
|
182
|
+
scripts = Dir.entries(dir).find_all { |f| f.end_with? '.rb' }
|
183
|
+
scripts.each do |script|
|
184
|
+
load File.join(dir, script)
|
185
|
+
end
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
# Loads manually every script related to jboss. This is necessary to reset the components to its natural state
|
190
|
+
def load_scripts
|
191
|
+
scripts = Dir.entries("#{@base_dir}/components").find_all { |f| f.end_with?('.rb') }
|
192
|
+
scripts.each do |script|
|
193
|
+
load File.expand_path(@base_dir) + "/components/" + script
|
194
|
+
end
|
195
|
+
end
|
196
|
+
|
197
|
+
def initialize_components
|
198
|
+
load_scripts
|
199
|
+
load_extensions
|
200
|
+
|
201
|
+
register :cluster,
|
202
|
+
|
203
|
+
:priority => @@pre_install,
|
204
|
+
:move_config => {
|
205
|
+
:to_run_conf => [:multicast_ip, :partition_name],
|
206
|
+
:to_jboss_web => [:jvm_route],
|
207
|
+
:to_jms => [:peer_id]
|
208
|
+
},
|
209
|
+
:defaults => {
|
210
|
+
:multicast_ip => "239.255.0.1",
|
211
|
+
:partition_name => "#{@profile}-partition",
|
212
|
+
:jvm_route => "#{@profile}"
|
213
|
+
}
|
214
|
+
|
215
|
+
register :jms,
|
216
|
+
|
217
|
+
:priority => @@pre_install,
|
218
|
+
:move_config => {
|
219
|
+
:to_run_conf => [:peer_id]
|
220
|
+
}
|
221
|
+
|
222
|
+
register :bind,
|
223
|
+
|
224
|
+
:priority => @@pre_install,
|
225
|
+
:send_config => {
|
226
|
+
:to_init_script => {
|
227
|
+
:address => :bind_address
|
228
|
+
}
|
229
|
+
},
|
230
|
+
:move_config => {
|
231
|
+
:to_run_conf => {
|
232
|
+
:ports => :service_binding
|
233
|
+
}
|
234
|
+
},
|
235
|
+
:defaults => {
|
236
|
+
:address => 'localhost'
|
237
|
+
}
|
238
|
+
|
239
|
+
register :profile_folder,
|
240
|
+
:type => JBoss::ProfileFolder,
|
241
|
+
:priority => @@install
|
242
|
+
|
243
|
+
register :deploy_folder,
|
244
|
+
|
245
|
+
:type => JBoss::DeployFolder,
|
246
|
+
:priority => @@post_install,
|
247
|
+
:multiple_instances => true
|
248
|
+
|
249
|
+
|
250
|
+
register :resource,
|
251
|
+
|
252
|
+
:type => JBoss::Resource,
|
253
|
+
:priority => @@pre_setup,
|
254
|
+
:multiple_instances => true
|
255
|
+
|
256
|
+
register :jmx,
|
257
|
+
|
258
|
+
:type => JBoss::JMX,
|
259
|
+
:priority => @@setup,
|
260
|
+
:send_config => {
|
261
|
+
:to_init_script => {
|
262
|
+
:password => :jmx_password,
|
263
|
+
:user => :jmx_user
|
264
|
+
}
|
265
|
+
}
|
266
|
+
|
267
|
+
register :datasource,
|
268
|
+
|
269
|
+
:type => JBoss::Datasource,
|
270
|
+
:priority => @@setup,
|
271
|
+
:multiple_instances => true
|
272
|
+
|
273
|
+
register :xa_datasource,
|
274
|
+
|
275
|
+
:type => JBoss::XADatasource,
|
276
|
+
:priority => @@setup,
|
277
|
+
:multiple_instances => true
|
278
|
+
|
279
|
+
register :default_ds,
|
280
|
+
|
281
|
+
:type => JBoss::HypersonicReplacer,
|
282
|
+
:priority => @@setup
|
283
|
+
|
284
|
+
register :mod_cluster,
|
285
|
+
|
286
|
+
:type => JBoss::ModCluster,
|
287
|
+
:priority => @@setup,
|
288
|
+
:move_config => {
|
289
|
+
:to_run_conf => [
|
290
|
+
:advertise,
|
291
|
+
:advertise_group_address,
|
292
|
+
:advertise_port,
|
293
|
+
:proxy_list,
|
294
|
+
:excluded_contexts,
|
295
|
+
:auto_enable_contexts
|
296
|
+
]
|
297
|
+
},
|
298
|
+
:defaults => {
|
299
|
+
:path => "#{@base_dir}/resources/mod_cluster.sar",
|
300
|
+
}
|
301
|
+
|
302
|
+
register :jboss_web,
|
303
|
+
|
304
|
+
:type => JBoss::Web,
|
305
|
+
:priority => @@setup
|
306
|
+
|
307
|
+
register :run_conf,
|
308
|
+
|
309
|
+
:type => JBoss::RunConf,
|
310
|
+
:priority => @@post_setup,
|
311
|
+
:send_config => {
|
312
|
+
:to_init_script => [:service_binding]
|
313
|
+
},
|
314
|
+
:defaults => {
|
315
|
+
:template_path => "#{@base_dir}/resources/run.conf.erb",
|
316
|
+
|
317
|
+
:stack_size => '128k',
|
318
|
+
:heap_size => '2048m',
|
319
|
+
:perm_size => '256m'
|
320
|
+
}
|
321
|
+
|
322
|
+
register :slimming,
|
323
|
+
|
324
|
+
:type => JBoss::Slimming,
|
325
|
+
:priority => @@post_setup
|
326
|
+
|
327
|
+
register :init_script,
|
328
|
+
|
329
|
+
:type => JBoss::ServiceScript,
|
330
|
+
:priority => @@final,
|
331
|
+
:defaults => {
|
332
|
+
:path => "#{@base_dir}/resources/jboss_init_redhat.sh.erb",
|
333
|
+
:jmx_user => "admin",
|
334
|
+
:jmx_password => "admin",
|
335
|
+
:bind_address => "0.0.0.0",
|
336
|
+
:java_path => "/usr/java/default",
|
337
|
+
:jnp_port => 1099,
|
338
|
+
:jboss_user => "RUNASIS"
|
339
|
+
}
|
340
|
+
end
|
341
|
+
|
342
|
+
end
|
343
|
+
|
344
|
+
end
|