ServerConfiguration.java
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 configurationURLthrows ConfigurationException
055     {
056         this(config(configurationURL));
057     }
058 
059     public ServerConfiguration(Configuration confthrows 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((Stringthing);
074                 List hosts = vhostConfiguration.getList("virtualhost.name");
075                 for (int j = 0; j < hosts.size(); j++)
076                 {
077                     String name = (Stringhosts.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++(Stringnetwork;
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 urlthrows 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 }