001 /**
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017
018 package org.apache.geronimo.j2ee.management.impl;
019
020 import java.util.ArrayList;
021 import java.util.Collection;
022 import java.util.Hashtable;
023 import javax.management.ObjectName;
024
025 import org.apache.geronimo.gbean.GBeanInfo;
026 import org.apache.geronimo.gbean.GBeanInfoBuilder;
027 import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
028 import org.apache.geronimo.kernel.ObjectNameUtil;
029 import org.apache.geronimo.kernel.config.ConfigurationManager;
030 import org.apache.geronimo.kernel.repository.ListableRepository;
031 import org.apache.geronimo.kernel.repository.WritableListableRepository;
032 import org.apache.geronimo.management.AppClientModule;
033 import org.apache.geronimo.management.EJBModule;
034 import org.apache.geronimo.management.J2EEDeployedObject;
035 import org.apache.geronimo.management.J2EEResource;
036 import org.apache.geronimo.management.geronimo.EJBManager;
037 import org.apache.geronimo.management.geronimo.J2EEApplication;
038 import org.apache.geronimo.management.geronimo.J2EEServer;
039 import org.apache.geronimo.management.geronimo.JMSManager;
040 import org.apache.geronimo.management.geronimo.JVM;
041 import org.apache.geronimo.management.geronimo.KeystoreManager;
042 import org.apache.geronimo.management.geronimo.ResourceAdapterModule;
043 import org.apache.geronimo.management.geronimo.SecurityRealm;
044 import org.apache.geronimo.management.geronimo.WebManager;
045 import org.apache.geronimo.management.geronimo.WebModule;
046 import org.apache.geronimo.system.serverinfo.ServerInfo;
047 import org.apache.geronimo.system.threads.ThreadPool;
048 import org.apache.geronimo.system.plugin.PluginInstaller;
049 import org.apache.geronimo.system.plugin.PluginRepositoryList;
050
051 /**
052 * @version $Rev: 555665 $ $Date: 2007-07-12 11:38:54 -0400 (Thu, 12 Jul 2007) $
053 */
054 public class J2EEServerImpl implements J2EEServer {
055 private static final String SERVER_VENDOR = "The Apache Software Foundation";
056 private final String objectName;
057 private final ServerInfo serverInfo;
058 private final Collection jvms;
059 private final Collection resources;
060 private final Collection j2eeApplications;
061 private final Collection appClientModules;
062 private final Collection webModules;
063 private final Collection ejbModules;
064 private final Collection resourceAdapterModules;
065 private final Collection webManagers;
066 private final Collection ejbManagers;
067 private final Collection jmsManagers;
068 private final Collection threadPools;
069 private final Collection repositories;
070 private final Collection pluginRepoLists;
071 private final Collection writableRepos;
072 private final Collection securityRealms;
073 private final Collection keystoreManagers;
074 private final Collection pluginInstallers;
075 private final ConfigurationManager configurationManager;
076
077 public J2EEServerImpl(String objectName,
078 ServerInfo serverInfo,
079 Collection jvms,
080 Collection resources,
081 Collection applications,
082 Collection appClientModules,
083 Collection webModules,
084 Collection ejbModules,
085 Collection resourceAdapterModules,
086 Collection webManagers,
087 Collection ejbManagers,
088 Collection jmsManagers,
089 Collection threadPools,
090 Collection repositories,
091 Collection writableRepos,
092 Collection securityRealms,
093 Collection keystoreManagers,
094 Collection configurationInstallers,
095 ConfigurationManager configurationManager,
096 Collection pluginRepoLists) {
097
098 this.objectName = objectName;
099 ObjectName myObjectName = ObjectNameUtil.getObjectName(this.objectName);
100 verifyObjectName(myObjectName);
101
102 this.serverInfo = serverInfo;
103 this.jvms = jvms;
104 this.resources = resources;
105
106 this.j2eeApplications = applications;
107 this.appClientModules = appClientModules;
108 this.webModules = webModules;
109 this.ejbModules = ejbModules;
110 this.resourceAdapterModules = resourceAdapterModules;
111
112 this.webManagers = webManagers;
113 this.ejbManagers = ejbManagers;
114 this.jmsManagers = jmsManagers;
115
116 this.threadPools = threadPools;
117 this.repositories = repositories;
118 this.writableRepos = writableRepos;
119 this.securityRealms = securityRealms;
120 this.keystoreManagers = keystoreManagers;
121 this.pluginInstallers = configurationInstallers;
122 this.configurationManager = configurationManager;
123 this.pluginRepoLists = pluginRepoLists;
124 }
125
126 public String getObjectName() {
127 return objectName;
128 }
129
130 public boolean isStateManageable() {
131 return true;
132 }
133
134 public boolean isStatisticsProvider() {
135 return false;
136 }
137
138 public boolean isEventProvider() {
139 return true;
140 }
141
142 /**
143 * ObjectName must match this pattern:
144 * <p/>
145 * domain:j2eeType=J2EEServer,name=MyName
146 * @param objectName object name to verify pattern
147 */
148 private void verifyObjectName(ObjectName objectName) {
149 if (objectName.isPattern()) {
150 throw new InvalidObjectNameException("ObjectName can not be a pattern", objectName);
151 }
152 Hashtable keyPropertyList = objectName.getKeyPropertyList();
153 if (!"J2EEServer".equals(keyPropertyList.get("j2eeType"))) {
154 throw new InvalidObjectNameException("J2EEServer object name j2eeType property must be 'J2EEServer'", objectName);
155 }
156 if (!keyPropertyList.containsKey("name")) {
157 throw new InvalidObjectNameException("J2EEServer object must contain a name property", objectName);
158 }
159 if (keyPropertyList.size() != 2) {
160 throw new InvalidObjectNameException("J2EEServer object name can only have j2eeType, and name", objectName);
161 }
162 }
163
164
165 public String[] getDeployedObjects() {
166 return Util.getObjectNames(getDeployedObjectInstances());
167 }
168
169 public J2EEDeployedObject[] getDeployedObjectInstances() {
170 ArrayList objects = new ArrayList();
171 if (j2eeApplications != null) {
172 objects.addAll(j2eeApplications);
173 }
174 if (appClientModules != null) {
175 objects.addAll(appClientModules);
176 }
177 if (ejbModules != null) {
178 objects.addAll(ejbModules);
179 }
180 if (webModules != null) {
181 objects.addAll(webModules);
182 }
183 if (resourceAdapterModules != null) {
184 objects.addAll(resourceAdapterModules);
185 }
186
187 return (J2EEDeployedObject[]) objects.toArray(new J2EEDeployedObject[objects.size()]);
188 }
189
190 public String[] getResources() {
191 return Util.getObjectNames(getResourceInstances());
192 }
193
194 public J2EEResource[] getResourceInstances() {
195 if (resources == null) return new J2EEResource[0];
196 return (J2EEResource[]) resources.toArray(new J2EEResource[resources.size()]);
197 }
198
199 public String[] getJavaVMs() {
200 return Util.getObjectNames(getJavaVMInstances());
201 }
202
203 public JVM[] getJavaVMInstances() {
204 if (jvms == null) return new JVM[0];
205 return (JVM[]) jvms.toArray(new JVM[jvms.size()]);
206 }
207
208 public J2EEApplication[] getApplications() {
209 if (j2eeApplications == null) return new J2EEApplication[0];
210 return (J2EEApplication[]) j2eeApplications.toArray(new J2EEApplication[j2eeApplications.size()]);
211 }
212
213 public AppClientModule[] getAppClients() {
214 if (appClientModules == null) return new AppClientModule[0];
215 return (AppClientModule[]) appClientModules.toArray(new AppClientModule[appClientModules.size()]);
216 }
217
218 public WebModule[] getWebModules() {
219 if (webModules == null) return new WebModule[0];
220 return (WebModule[]) webModules.toArray(new WebModule[webModules.size()]);
221 }
222
223 public EJBModule[] getEJBModules() {
224 if (ejbModules == null) return new EJBModule[0];
225 return (EJBModule[]) ejbModules.toArray(new EJBModule[ejbModules.size()]);
226 }
227
228 public ResourceAdapterModule[] getResourceAdapterModules() {
229 if (resourceAdapterModules == null) return new ResourceAdapterModule[0];
230 return (ResourceAdapterModule[]) resourceAdapterModules.toArray(new ResourceAdapterModule[resourceAdapterModules.size()]);
231 }
232
233
234 public WebManager[] getWebManagers() {
235 if (webManagers == null) return new WebManager[0];
236 return (WebManager[]) webManagers.toArray(new WebManager[webManagers.size()]);
237 }
238
239 public EJBManager[] getEJBManagers() {
240 if (ejbManagers == null) return new EJBManager[0];
241 return (EJBManager[]) ejbManagers.toArray(new EJBManager[ejbManagers.size()]);
242 }
243
244 public JMSManager[] getJMSManagers() {
245 if (jmsManagers == null) return new JMSManager[0];
246 return (JMSManager[]) jmsManagers.toArray(new JMSManager[jmsManagers.size()]);
247 }
248
249 public ThreadPool[] getThreadPools() {
250 if (threadPools == null) return new ThreadPool[0];
251 return (ThreadPool[]) threadPools.toArray(new ThreadPool[threadPools.size()]);
252 }
253
254 public ListableRepository[] getRepositories() {
255 if (repositories == null) return new ListableRepository[0];
256 return (ListableRepository[]) repositories.toArray(new ListableRepository[repositories.size()]);
257 }
258
259 public WritableListableRepository[] getWritableRepositories() {
260 if (writableRepos == null) return new WritableListableRepository[0];
261 return (WritableListableRepository[]) writableRepos.toArray(new WritableListableRepository[writableRepos.size()]);
262 }
263
264 public SecurityRealm[] getSecurityRealms() {
265 if (securityRealms == null) return new SecurityRealm[0];
266 return (SecurityRealm[]) securityRealms.toArray(new SecurityRealm[securityRealms.size()]);
267 }
268
269 public PluginRepositoryList[] getPluginRepositoryLists() {
270 if (pluginRepoLists == null) return new PluginRepositoryList[0];
271 return (PluginRepositoryList[]) pluginRepoLists.toArray(new PluginRepositoryList[pluginRepoLists.size()]);
272 }
273
274 public ServerInfo getServerInfo() {
275 return serverInfo;
276 }
277
278 public KeystoreManager getKeystoreManager() {
279 if (keystoreManagers == null) return null;
280 return (KeystoreManager) keystoreManagers.iterator().next();
281 }
282
283 public PluginInstaller getPluginInstaller() {
284 if (pluginInstallers.isEmpty()) {
285 return null;
286 }
287 return (PluginInstaller) pluginInstallers.iterator().next();
288 }
289
290 public ConfigurationManager getConfigurationManager() {
291 return configurationManager;
292 }
293
294 public String getServerVendor() {
295 return SERVER_VENDOR;
296 }
297
298 public String getServerVersion() {
299 return serverInfo.getVersion();
300 }
301
302 public static final GBeanInfo GBEAN_INFO;
303
304 static {
305 GBeanInfoBuilder infoFactory = GBeanInfoBuilder.createStatic(J2EEServerImpl.class, NameFactory.J2EE_SERVER);
306
307 infoFactory.addReference("ServerInfo", ServerInfo.class, NameFactory.GERONIMO_SERVICE);
308 infoFactory.addReference("JVMs", JVM.class, NameFactory.JVM);
309 infoFactory.addReference("Resources", J2EEResource.class); // several types match this
310 infoFactory.addReference("Applications", J2EEApplication.class, NameFactory.J2EE_APPLICATION);
311 infoFactory.addReference("AppClientModules", AppClientModule.class, NameFactory.APP_CLIENT_MODULE);
312 infoFactory.addReference("WebModules", WebModule.class, NameFactory.WEB_MODULE);
313 infoFactory.addReference("EJBModules", EJBModule.class, NameFactory.EJB_MODULE);
314 infoFactory.addReference("ResourceAdapterModules", ResourceAdapterModule.class, NameFactory.RESOURCE_ADAPTER_MODULE);
315 infoFactory.addReference("WebManagers", WebManager.class);
316 infoFactory.addReference("EJBManagers", EJBManager.class);
317 infoFactory.addReference("JMSManagers", JMSManager.class);
318 infoFactory.addReference("ThreadPools", ThreadPool.class);
319 infoFactory.addReference("Repositories", ListableRepository.class);
320 infoFactory.addReference("WritableRepos", WritableListableRepository.class);
321 infoFactory.addReference("SecurityRealms", SecurityRealm.class);
322 infoFactory.addReference("KeystoreManagers", KeystoreManager.class);
323 infoFactory.addReference("PluginInstaller", PluginInstaller.class);
324 infoFactory.addReference("PluginRepoLists", PluginRepositoryList.class);
325 infoFactory.addReference("ConfigurationManager", ConfigurationManager.class);
326
327 infoFactory.setConstructor(new String[]{
328 "objectName",
329 "ServerInfo",
330 "JVMs",
331 "Resources",
332 "Applications",
333 "AppClientModules",
334 "WebModules",
335 "EJBModules",
336 "ResourceAdapterModules",
337 "WebManagers",
338 "EJBManagers",
339 "JMSManagers",
340 "ThreadPools",
341 "Repositories",
342 "WritableRepos",
343 "SecurityRealms",
344 "KeystoreManagers",
345 "PluginInstaller",
346 "ConfigurationManager",
347 "PluginRepoLists",
348 });
349
350 GBEAN_INFO = infoFactory.getBeanInfo();
351 }
352
353 public static GBeanInfo getGBeanInfo() {
354 return GBEAN_INFO;
355 }
356 }