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 049 /** 050 * @version $Rev: 706640 $ $Date: 2008-10-21 14:44:05 +0000 (Tue, 21 Oct 2008) $ 051 */ 052 public class J2EEServerImpl implements J2EEServer { 053 private static final String SERVER_VENDOR = "The Apache Software Foundation"; 054 private final String objectName; 055 private final ServerInfo serverInfo; 056 private final Collection jvms; 057 private final Collection resources; 058 private final Collection j2eeApplications; 059 private final Collection appClientModules; 060 private final Collection webModules; 061 private final Collection ejbModules; 062 private final Collection resourceAdapterModules; 063 private final Collection webManagers; 064 private final Collection ejbManagers; 065 private final Collection jmsManagers; 066 private final Collection threadPools; 067 private final Collection repositories; 068 private final Collection writableRepos; 069 private final Collection securityRealms; 070 private final Collection keystoreManagers; 071 private final ConfigurationManager configurationManager; 072 073 public J2EEServerImpl(String objectName, 074 ServerInfo serverInfo, 075 Collection jvms, 076 Collection resources, 077 Collection applications, 078 Collection appClientModules, 079 Collection webModules, 080 Collection ejbModules, 081 Collection resourceAdapterModules, 082 Collection webManagers, 083 Collection ejbManagers, 084 Collection jmsManagers, 085 Collection threadPools, 086 Collection repositories, 087 Collection writableRepos, 088 Collection securityRealms, 089 Collection keystoreManagers, 090 ConfigurationManager configurationManager) { 091 092 this.objectName = objectName; 093 ObjectName myObjectName = ObjectNameUtil.getObjectName(this.objectName); 094 verifyObjectName(myObjectName); 095 096 this.serverInfo = serverInfo; 097 this.jvms = jvms; 098 this.resources = resources; 099 100 this.j2eeApplications = applications; 101 this.appClientModules = appClientModules; 102 this.webModules = webModules; 103 this.ejbModules = ejbModules; 104 this.resourceAdapterModules = resourceAdapterModules; 105 106 this.webManagers = webManagers; 107 this.ejbManagers = ejbManagers; 108 this.jmsManagers = jmsManagers; 109 110 this.threadPools = threadPools; 111 this.repositories = repositories; 112 this.writableRepos = writableRepos; 113 this.securityRealms = securityRealms; 114 this.keystoreManagers = keystoreManagers; 115 this.configurationManager = configurationManager; 116 } 117 118 public String getObjectName() { 119 return objectName; 120 } 121 122 public boolean isStateManageable() { 123 return true; 124 } 125 126 public boolean isStatisticsProvider() { 127 return false; 128 } 129 130 public boolean isEventProvider() { 131 return true; 132 } 133 134 /** 135 * ObjectName must match this pattern: 136 * <p/> 137 * domain:j2eeType=J2EEServer,name=MyName 138 * @param objectName object name to verify pattern 139 */ 140 private void verifyObjectName(ObjectName objectName) { 141 if (objectName.isPattern()) { 142 throw new InvalidObjectNameException("ObjectName can not be a pattern", objectName); 143 } 144 Hashtable keyPropertyList = objectName.getKeyPropertyList(); 145 if (!"J2EEServer".equals(keyPropertyList.get("j2eeType"))) { 146 throw new InvalidObjectNameException("J2EEServer object name j2eeType property must be 'J2EEServer'", objectName); 147 } 148 if (!keyPropertyList.containsKey("name")) { 149 throw new InvalidObjectNameException("J2EEServer object must contain a name property", objectName); 150 } 151 if (keyPropertyList.size() != 2) { 152 throw new InvalidObjectNameException("J2EEServer object name can only have j2eeType, and name", objectName); 153 } 154 } 155 156 157 public String[] getDeployedObjects() { 158 return Util.getObjectNames(getDeployedObjectInstances()); 159 } 160 161 public J2EEDeployedObject[] getDeployedObjectInstances() { 162 ArrayList objects = new ArrayList(); 163 if (j2eeApplications != null) { 164 objects.addAll(j2eeApplications); 165 } 166 if (appClientModules != null) { 167 objects.addAll(appClientModules); 168 } 169 if (ejbModules != null) { 170 objects.addAll(ejbModules); 171 } 172 if (webModules != null) { 173 objects.addAll(webModules); 174 } 175 if (resourceAdapterModules != null) { 176 objects.addAll(resourceAdapterModules); 177 } 178 179 return (J2EEDeployedObject[]) objects.toArray(new J2EEDeployedObject[objects.size()]); 180 } 181 182 public String[] getResources() { 183 return Util.getObjectNames(getResourceInstances()); 184 } 185 186 public J2EEResource[] getResourceInstances() { 187 if (resources == null) return new J2EEResource[0]; 188 return (J2EEResource[]) resources.toArray(new J2EEResource[resources.size()]); 189 } 190 191 public String[] getJavaVMs() { 192 return Util.getObjectNames(getJavaVMInstances()); 193 } 194 195 public JVM[] getJavaVMInstances() { 196 if (jvms == null) return new JVM[0]; 197 return (JVM[]) jvms.toArray(new JVM[jvms.size()]); 198 } 199 200 public J2EEApplication[] getApplications() { 201 if (j2eeApplications == null) return new J2EEApplication[0]; 202 return (J2EEApplication[]) j2eeApplications.toArray(new J2EEApplication[j2eeApplications.size()]); 203 } 204 205 public AppClientModule[] getAppClients() { 206 if (appClientModules == null) return new AppClientModule[0]; 207 return (AppClientModule[]) appClientModules.toArray(new AppClientModule[appClientModules.size()]); 208 } 209 210 public WebModule[] getWebModules() { 211 if (webModules == null) return new WebModule[0]; 212 return (WebModule[]) webModules.toArray(new WebModule[webModules.size()]); 213 } 214 215 public EJBModule[] getEJBModules() { 216 if (ejbModules == null) return new EJBModule[0]; 217 return (EJBModule[]) ejbModules.toArray(new EJBModule[ejbModules.size()]); 218 } 219 220 public ResourceAdapterModule[] getResourceAdapterModules() { 221 if (resourceAdapterModules == null) return new ResourceAdapterModule[0]; 222 return (ResourceAdapterModule[]) resourceAdapterModules.toArray(new ResourceAdapterModule[resourceAdapterModules.size()]); 223 } 224 225 226 public WebManager[] getWebManagers() { 227 if (webManagers == null) return new WebManager[0]; 228 return (WebManager[]) webManagers.toArray(new WebManager[webManagers.size()]); 229 } 230 231 public EJBManager[] getEJBManagers() { 232 if (ejbManagers == null) return new EJBManager[0]; 233 return (EJBManager[]) ejbManagers.toArray(new EJBManager[ejbManagers.size()]); 234 } 235 236 public JMSManager[] getJMSManagers() { 237 if (jmsManagers == null) return new JMSManager[0]; 238 return (JMSManager[]) jmsManagers.toArray(new JMSManager[jmsManagers.size()]); 239 } 240 241 public ThreadPool[] getThreadPools() { 242 if (threadPools == null) return new ThreadPool[0]; 243 return (ThreadPool[]) threadPools.toArray(new ThreadPool[threadPools.size()]); 244 } 245 246 public ListableRepository[] getRepositories() { 247 if (repositories == null) return new ListableRepository[0]; 248 return (ListableRepository[]) repositories.toArray(new ListableRepository[repositories.size()]); 249 } 250 251 public WritableListableRepository[] getWritableRepositories() { 252 if (writableRepos == null) return new WritableListableRepository[0]; 253 return (WritableListableRepository[]) writableRepos.toArray(new WritableListableRepository[writableRepos.size()]); 254 } 255 256 public SecurityRealm[] getSecurityRealms() { 257 if (securityRealms == null) return new SecurityRealm[0]; 258 return (SecurityRealm[]) securityRealms.toArray(new SecurityRealm[securityRealms.size()]); 259 } 260 261 public ServerInfo getServerInfo() { 262 return serverInfo; 263 } 264 265 public KeystoreManager getKeystoreManager() { 266 if (keystoreManagers == null) return null; 267 return (KeystoreManager) keystoreManagers.iterator().next(); 268 } 269 270 public ConfigurationManager getConfigurationManager() { 271 return configurationManager; 272 } 273 274 public String getServerVendor() { 275 return SERVER_VENDOR; 276 } 277 278 public String getServerVersion() { 279 return serverInfo.getVersion(); 280 } 281 282 public static final GBeanInfo GBEAN_INFO; 283 284 static { 285 GBeanInfoBuilder infoFactory = GBeanInfoBuilder.createStatic(J2EEServerImpl.class, NameFactory.J2EE_SERVER); 286 287 infoFactory.addReference("ServerInfo", ServerInfo.class, NameFactory.GERONIMO_SERVICE); 288 infoFactory.addReference("JVMs", JVM.class, NameFactory.JVM); 289 infoFactory.addReference("Resources", J2EEResource.class); // several types match this 290 infoFactory.addReference("Applications", J2EEApplication.class, NameFactory.J2EE_APPLICATION); 291 infoFactory.addReference("AppClientModules", AppClientModule.class, NameFactory.APP_CLIENT_MODULE); 292 infoFactory.addReference("WebModules", WebModule.class, NameFactory.WEB_MODULE); 293 infoFactory.addReference("EJBModules", EJBModule.class, NameFactory.EJB_MODULE); 294 infoFactory.addReference("ResourceAdapterModules", ResourceAdapterModule.class, NameFactory.RESOURCE_ADAPTER_MODULE); 295 infoFactory.addReference("WebManagers", WebManager.class); 296 infoFactory.addReference("EJBManagers", EJBManager.class); 297 infoFactory.addReference("JMSManagers", JMSManager.class); 298 infoFactory.addReference("ThreadPools", ThreadPool.class); 299 infoFactory.addReference("Repositories", ListableRepository.class); 300 infoFactory.addReference("WritableRepos", WritableListableRepository.class); 301 infoFactory.addReference("SecurityRealms", SecurityRealm.class); 302 infoFactory.addReference("KeystoreManagers", KeystoreManager.class); 303 infoFactory.addReference("ConfigurationManager", ConfigurationManager.class); 304 305 infoFactory.setConstructor(new String[]{ 306 "objectName", 307 "ServerInfo", 308 "JVMs", 309 "Resources", 310 "Applications", 311 "AppClientModules", 312 "WebModules", 313 "EJBModules", 314 "ResourceAdapterModules", 315 "WebManagers", 316 "EJBManagers", 317 "JMSManagers", 318 "ThreadPools", 319 "Repositories", 320 "WritableRepos", 321 "SecurityRealms", 322 "KeystoreManagers", 323 "ConfigurationManager", 324 }); 325 326 GBEAN_INFO = infoFactory.getBeanInfo(); 327 } 328 329 public static GBeanInfo getGBeanInfo() { 330 return GBEAN_INFO; 331 } 332 }