View Javadoc

1   /**
2    *
3    * Copyright 2003-2004 The Apache Software Foundation
4    *
5    *  Licensed under the Apache License, Version 2.0 (the "License");
6    *  you may not use this file except in compliance with the License.
7    *  You may obtain a copy of the License at
8    *
9    *     http://www.apache.org/licenses/LICENSE-2.0
10   *
11   *  Unless required by applicable law or agreed to in writing, software
12   *  distributed under the License is distributed on an "AS IS" BASIS,
13   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   *  See the License for the specific language governing permissions and
15   *  limitations under the License.
16   */
17  
18  package org.apache.geronimo.j2ee.management.impl;
19  
20  import java.util.Hashtable;
21  import java.util.Collection;
22  import javax.management.ObjectName;
23  
24  import org.apache.geronimo.gbean.GBeanInfo;
25  import org.apache.geronimo.gbean.GBeanInfoBuilder;
26  import org.apache.geronimo.kernel.ObjectNameUtil;
27  import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
28  import org.apache.geronimo.management.geronimo.J2EEDomain;
29  import org.apache.geronimo.management.geronimo.J2EEServer;
30  
31  /**
32   * @version $Rev: 396206 $ $Date: 2006-04-22 19:55:45 -0700 (Sat, 22 Apr 2006) $
33   */
34  public class J2EEDomainImpl implements J2EEDomain {
35      private final String objectName;
36      private final Collection servers;
37  
38      public J2EEDomainImpl(String objectName, Collection servers) {
39          this.objectName = objectName;
40          ObjectName myObjectName = ObjectNameUtil.getObjectName(this.objectName);
41          verifyObjectName(myObjectName);
42          this.servers = servers;
43      }
44  
45      public String getObjectName() {
46          return objectName;
47      }
48  
49      public boolean isStateManageable() {
50          return true;
51      }
52  
53      public boolean isStatisticsProvider() {
54          return false;
55      }
56  
57      public boolean isEventProvider() {
58          return true;
59      }
60  
61      /**
62       * ObjectName must match this pattern:
63       * <p/>
64       * domain:j2eeType=J2EEDomain,name=domain
65       */
66      private void verifyObjectName(ObjectName objectName) {
67          if (objectName.isPattern()) {
68              throw new InvalidObjectNameException("ObjectName can not be a pattern", objectName);
69          }
70          Hashtable keyPropertyList = objectName.getKeyPropertyList();
71          if (!"J2EEDomain".equals(keyPropertyList.get("j2eeType"))) {
72              throw new InvalidObjectNameException("J2EEDomain object name j2eeType property must be 'J2EEDomain'", objectName);
73          }
74          String name = (String) keyPropertyList.get("name");
75          if (!objectName.getDomain().equals(name)) {
76              throw new InvalidObjectNameException("Domain part of J2EEDomain object name must match name propert", objectName);
77          }
78      }
79  
80  
81      public String[] getServers() {
82          return Util.getObjectNames(getServerInstances());
83      }
84  
85      public J2EEServer[] getServerInstances() {
86          if (servers == null) return new J2EEServer[0];
87          return (J2EEServer[]) servers.toArray(new J2EEServer[servers.size()]);
88      }
89  
90      public static final GBeanInfo GBEAN_INFO;
91  
92      static {
93          GBeanInfoBuilder infoFactory = GBeanInfoBuilder.createStatic(J2EEDomainImpl.class, NameFactory.J2EE_DOMAIN);
94  
95          infoFactory.addReference("Servers", J2EEServer.class, NameFactory.J2EE_SERVER);
96          infoFactory.setConstructor(new String[]{"objectName", "Servers"});
97  
98          GBEAN_INFO = infoFactory.getBeanInfo();
99      }
100 
101     public static GBeanInfo getGBeanInfo() {
102         return GBEAN_INFO;
103     }
104 }