001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements. See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership. The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the
007 * "License"); you may not use this file except in compliance
008 * with the License. You may obtain a copy of the License at
009 *
010 * http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing,
013 * software distributed under the License is distributed on an
014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015 * KIND, either express or implied. See the License for the
016 * specific language governing permissions and limitations
017 * under the License.
018 *
019 */
020
021 package org.apache.qpid.server.configuration;
022
023 import java.io.File;
024 import java.util.HashMap;
025 import java.util.Iterator;
026 import java.util.List;
027 import java.util.Map;
028
029 import org.apache.commons.configuration.CompositeConfiguration;
030 import org.apache.commons.configuration.Configuration;
031 import org.apache.commons.configuration.ConfigurationException;
032 import org.apache.commons.configuration.SystemConfiguration;
033 import org.apache.commons.configuration.XMLConfiguration;
034
035 public class ServerConfiguration
036 {
037
038 private static Configuration _config;
039
040 private static final int DEFAULT_FRAME_SIZE = 65536;
041 private static final int DEFAULT_BUFFER_READ_LIMIT_SIZE = 262144;
042 private static final int DEFAULT_BUFFER_WRITE_LIMIT_SIZE = 262144;
043 private static final int DEFAULT_PORT = 5672;
044 private static final int DEFAUL_SSL_PORT = 8672;
045 private static final long DEFAULT_HOUSEKEEPING_PERIOD = 30000L;
046 private static final int DEFAULT_JMXPORT = 8999;
047
048 private long _housekeepingExpiredMessageCheckPeriod = DEFAULT_HOUSEKEEPING_PERIOD;
049 private static int _jmxPort = DEFAULT_JMXPORT;
050
051 private Map<String, VirtualHostConfiguration> _virtualHosts = new HashMap<String, VirtualHostConfiguration>();
052 private SecurityConfiguration _securityConfiguration = null;
053
054 public ServerConfiguration(File configurationURL) throws ConfigurationException
055 {
056 this(config(configurationURL));
057 }
058
059 public ServerConfiguration(Configuration conf) throws ConfigurationException
060 {
061 _config = conf;
062 _jmxPort = _config.getInt("management.jmxport", 8999);
063
064 _securityConfiguration = new SecurityConfiguration(conf.subset("security"));
065
066 List vhosts = conf.getList("virtualhosts");
067 Iterator i = vhosts.iterator();
068 while (i.hasNext())
069 {
070 Object thing = i.next();
071 if (thing instanceof String)
072 {
073 XMLConfiguration vhostConfiguration = new XMLConfiguration((String) thing);
074 List hosts = vhostConfiguration.getList("virtualhost.name");
075 for (int j = 0; j < hosts.size(); j++)
076 {
077 String name = (String) hosts.get(j);
078 CompositeConfiguration mungedConf = new CompositeConfiguration();
079 mungedConf.addConfiguration(conf.subset("virtualhosts.virtualhost."+name));
080 mungedConf.addConfiguration(vhostConfiguration.subset("virtualhost." + name));
081 VirtualHostConfiguration vhostConfig = new VirtualHostConfiguration(name, mungedConf);
082 _virtualHosts.put(vhostConfig.getName(), vhostConfig);
083 }
084 }
085 }
086 }
087
088 public static String[] objListToStringArray(List objList)
089 {
090 String[] networkStrings = new String[objList.size()];
091 int i = 0;
092 for (Object network : objList)
093 {
094 networkStrings[i++] = (String) network;
095 }
096 return networkStrings;
097 }
098
099 // Our configuration class needs to make the interpolate method
100 // public so it can be called below from the config method.
101 private static class MyConfiguration extends CompositeConfiguration
102 {
103 public String interpolate(String obj)
104 {
105 return super.interpolate(obj);
106 }
107 }
108
109 private final static Configuration config(File url) throws ConfigurationException
110 {
111 // We have to override the interpolate methods so that
112 // interpolation takes place accross the entirety of the
113 // composite configuration. Without doing this each
114 // configuration object only interpolates variables defined
115 // inside itself.
116 final MyConfiguration conf = new MyConfiguration();
117 conf.addConfiguration(new SystemConfiguration()
118 {
119 protected String interpolate(String o)
120 {
121 return conf.interpolate(o);
122 }
123 });
124 conf.addConfiguration(new XMLConfiguration(url)
125 {
126 protected String interpolate(String o)
127 {
128 return conf.interpolate(o);
129 }
130 });
131 return conf;
132 }
133
134 public void setJMXManagementPort(int mport)
135 {
136 _jmxPort = mport;
137 }
138
139 public int getJMXManagementPort()
140 {
141 return _jmxPort;
142 }
143
144 public boolean getPlatformMbeanserver()
145 {
146 return _config.getBoolean("management.platform-mbeanserver", true);
147 }
148
149 public String[] getVirtualHosts()
150 {
151 return _virtualHosts.keySet().toArray(new String[_virtualHosts.size()]);
152 }
153
154 public String getPluginDirectory()
155 {
156 return _config.getString("plugin-directory");
157 }
158
159 public VirtualHostConfiguration getVirtualHostConfig(String name)
160 {
161 return _virtualHosts.get(name);
162 }
163
164 public List<String> getPrincipalDatabaseNames()
165 {
166 return _config.getList("security.principal-databases.principal-database.name");
167 }
168
169 public List<String> getPrincipalDatabaseClass()
170 {
171 return _config.getList("security.principal-databases.principal-database.class");
172 }
173
174 public List<String> getPrincipalDatabaseAttributeNames(int index)
175 {
176 String name = "security.principal-databases.principal-database(" + index + ")." + "attributes.attribute.name";
177 return _config.getList(name);
178 }
179
180 public List<String> getPrincipalDatabaseAttributeValues(int index)
181 {
182 String name = "security.principal-databases.principal-database(" + index + ")." + "attributes.attribute.value";
183 return _config.getList(name);
184 }
185
186 public List<String> getManagementPrincipalDBs()
187 {
188 return _config.getList("security.jmx.principal-database");
189 }
190
191 public List<String> getManagementAccessList()
192 {
193 return _config.getList("security.jmx.access");
194 }
195
196 public int getFrameSize()
197 {
198 return _config.getInt("advanced.framesize", DEFAULT_FRAME_SIZE);
199 }
200
201 public boolean getManagementSecurityEnabled()
202 {
203 return _config.getBoolean("management.security-enabled", false);
204 }
205
206 public boolean getProtectIOEnabled()
207 {
208 return _config.getBoolean("broker.connector.protectio.enabled", false);
209 }
210
211 public int getBufferReadLimit()
212 {
213 return _config.getInt("broker.connector.protectio.readBufferLimitSize", DEFAULT_BUFFER_READ_LIMIT_SIZE);
214 }
215
216 public int getBufferWriteLimit()
217 {
218 return _config.getInt("broker.connector.protectio.writeBufferLimitSize", DEFAULT_BUFFER_WRITE_LIMIT_SIZE);
219 }
220
221 public boolean getSynchedClocks()
222 {
223 return _config.getBoolean("advanced.synced-clocks", false);
224 }
225
226 public boolean getMsgAuth()
227 {
228 return _config.getBoolean("security.msg-auth", false);
229 }
230
231 public String getJMXPrincipalDatabase()
232 {
233 return _config.getString("security.jmx.principal-database");
234 }
235
236 public String getManagementKeyStorePath()
237 {
238 return _config.getString("management.ssl.keyStorePath", null);
239 }
240
241 public boolean getManagementSSLEnabled()
242 {
243 return _config.getBoolean("management.ssl.enabled", true);
244 }
245
246 public String getManagementKeyStorePassword()
247 {
248 return _config.getString("management.ssl.keyStorePassword");
249 }
250
251 public SecurityConfiguration getSecurityConfiguration()
252 {
253 return _securityConfiguration;
254 }
255
256 public boolean getQueueAutoRegister()
257 {
258 return _config.getBoolean("queue.auto_register", true);
259 }
260
261 public boolean getManagementEnabled()
262 {
263 return _config.getBoolean("management.enabled", true);
264 }
265
266 public void setManagementEnabled(boolean enabled)
267 {
268 _config.setProperty("management.enabled", enabled);
269 }
270
271
272 public int getHeartBeatDelay()
273 {
274 return _config.getInt("heartbeat.delay", 5);
275 }
276
277 public double getHeartBeatTimeout()
278 {
279 return _config.getDouble("heartbeat.timeoutFactor", 2.0);
280 }
281
282 public int getDeliveryPoolSize()
283 {
284 return _config.getInt("delivery.poolsize", 0);
285 }
286
287 public long getMaximumMessageAge()
288 {
289 return _config.getLong("maximumMessageAge", 0);
290 }
291
292 public long getMaximumMessageCount()
293 {
294 return _config.getLong("maximumMessageCount", 0);
295 }
296
297 public long getMaximumQueueDepth()
298 {
299 return _config.getLong("maximumQueueDepth", 0);
300 }
301
302 public long getMaximumMessageSize()
303 {
304 return _config.getLong("maximumMessageSize", 0);
305 }
306
307 public long getMinimumAlertRepeatGap()
308 {
309 return _config.getLong("minimumAlertRepeatGap", 0);
310 }
311
312 public int getProcessors()
313 {
314 return _config.getInt("connector.processors", 4);
315 }
316
317 public int getPort()
318 {
319 return _config.getInt("connector.port", DEFAULT_PORT);
320 }
321
322 public String getBind()
323 {
324 return _config.getString("connector.bind", "wildcard");
325 }
326
327 public int getReceiveBufferSize()
328 {
329 return _config.getInt("connector.socketReceiveBuffer", 32767);
330 }
331
332 public int getWriteBufferSize()
333 {
334 return _config.getInt("connector.socketWriteBuffer", 32767);
335 }
336
337 public boolean getTcpNoDelay()
338 {
339 return _config.getBoolean("connector.tcpNoDelay", true);
340 }
341
342 public boolean getEnableExecutorPool()
343 {
344 return _config.getBoolean("advanced.filterchain[@enableExecutorPool]", false);
345 }
346
347 public boolean getEnablePooledAllocator()
348 {
349 return _config.getBoolean("advanced.enablePooledAllocator", false);
350 }
351
352 public boolean getEnableDirectBuffers()
353 {
354 return _config.getBoolean("advanced.enableDirectBuffers", false);
355 }
356
357 public boolean getEnableSSL()
358 {
359 return _config.getBoolean("connector.ssl.enabled", false);
360 }
361
362 public boolean getSSLOnly()
363 {
364 return _config.getBoolean("connector.ssl.sslOnly", true);
365 }
366
367 public int getSSLPort()
368 {
369 return _config.getInt("connector.ssl.port", DEFAUL_SSL_PORT);
370 }
371
372 public String getKeystorePath()
373 {
374 return _config.getString("connector.ssl.keystorePath", "none");
375 }
376
377 public String getKeystorePassword()
378 {
379 return _config.getString("connector.ssl.keystorePassword", "none");
380 }
381
382 public String getCertType()
383 {
384 return _config.getString("connector.ssl.certType", "SunX509");
385 }
386
387 public boolean getQpidNIO()
388 {
389 return _config.getBoolean("connector.qpidnio", false);
390 }
391
392 public boolean getUseBiasedWrites()
393 {
394 return _config.getBoolean("advanced.useWriteBiasedPool", false);
395 }
396
397 public String getDefaultVirtualHost()
398 {
399 return _config.getString("virtualhosts.default");
400 }
401
402 public void setHousekeepingExpiredMessageCheckPeriod(long _housekeepingExpiredMessageCheckPeriod)
403 {
404 this._housekeepingExpiredMessageCheckPeriod = _housekeepingExpiredMessageCheckPeriod;
405 }
406
407 public long getHousekeepingExpiredMessageCheckPeriod()
408 {
409 return _housekeepingExpiredMessageCheckPeriod;
410 }
411 }
|