View Javadoc

1   /**
2    *
3    * Copyright 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  package org.apache.geronimo.j2ee.management.impl;
18  
19  import java.util.Hashtable;
20  import javax.management.ObjectName;
21  
22  import org.apache.geronimo.gbean.GBeanInfo;
23  import org.apache.geronimo.gbean.GBeanInfoBuilder;
24  import org.apache.geronimo.management.J2EEApplication;
25  import org.apache.geronimo.management.J2EEServer;
26  import org.apache.geronimo.management.AppClientModule;
27  import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
28  import org.apache.geronimo.kernel.ObjectNameUtil;
29  
30  /**
31   * @version $Revision: 395155 $ $Date: 2006-04-18 23:44:24 -0700 (Tue, 18 Apr 2006) $
32   */
33  public class J2EEAppClientModuleImpl implements AppClientModule {
34      private final String deploymentDescriptor;
35      private final J2EEServer server;
36      private final J2EEApplication application;
37      private final ClassLoader classLoader;
38      private final String objectName;
39  
40      public J2EEAppClientModuleImpl(String objectName, J2EEServer server, J2EEApplication application, String deploymentDescriptor, ClassLoader classLoader) {
41          this.objectName = objectName;
42          ObjectName myObjectName = ObjectNameUtil.getObjectName(this.objectName);
43          verifyObjectName(myObjectName);
44  
45          this.server = server;
46          this.application = application;
47          this.deploymentDescriptor = deploymentDescriptor;
48          this.classLoader = classLoader;
49      }
50  
51      public String getObjectName() {
52          return objectName;
53      }
54  
55      public boolean isStateManageable() {
56          return true;
57      }
58  
59      public boolean isStatisticsProvider() {
60          return false;
61      }
62  
63      public boolean isEventProvider() {
64          return true;
65      }
66  
67      /**
68       * ObjectName must match this pattern:
69       * <p/>
70       * domain:j2eeType=AppClientModule,name=MyName,J2EEServer=MyServer,J2EEApplication=MyApplication
71       */
72      private void verifyObjectName(ObjectName objectName) {
73          if (objectName.isPattern()) {
74              throw new InvalidObjectNameException("ObjectName can not be a pattern", objectName);
75          }
76          Hashtable keyPropertyList = objectName.getKeyPropertyList();
77          if (!"AppClientModule".equals(keyPropertyList.get("j2eeType"))) {
78              throw new InvalidObjectNameException("AppClientModule object name j2eeType property must be 'AppClientModule'", objectName);
79          }
80          if (!keyPropertyList.containsKey("name")) {
81              throw new InvalidObjectNameException("AppClientModule object must contain a name property", objectName);
82          }
83          if (!keyPropertyList.containsKey("J2EEServer")) {
84              throw new InvalidObjectNameException("AppClientModule object name must contain a J2EEServer property", objectName);
85          }
86          if (!keyPropertyList.containsKey("J2EEApplication")) {
87              throw new InvalidObjectNameException("AppClientModule object name must contain a J2EEApplication property", objectName);
88          }
89          if (keyPropertyList.size() != 4) {
90              throw new InvalidObjectNameException("AppClientModule object name can only have j2eeType, name, J2EEApplication, and J2EEServer properties", objectName);
91          }
92      }
93  
94      public String getDeploymentDescriptor() {
95          return deploymentDescriptor;
96      }
97  
98      public String getServer() {
99          return server.getObjectName();
100     }
101 
102     public String getApplication() {
103         if (application == null) {
104             return null;
105         }
106         return application.getObjectName();
107     }
108 
109     public String[] getJavaVMs() {
110         return server.getJavaVMs();
111     }
112 
113     public ClassLoader getClassLoader() {
114         return classLoader;
115     }
116 
117     public static final GBeanInfo GBEAN_INFO;
118 
119     static {
120         GBeanInfoBuilder infoFactory = GBeanInfoBuilder.createStatic(J2EEAppClientModuleImpl.class, NameFactory.APP_CLIENT_MODULE);
121         infoFactory.addReference("J2EEServer", J2EEServer.class);
122         infoFactory.addReference("J2EEApplication", J2EEApplication.class);
123 
124         infoFactory.addAttribute("deploymentDescriptor", String.class, true);
125 
126         infoFactory.addAttribute("objectName", String.class, false);
127         infoFactory.addAttribute("server", String.class, false);
128         infoFactory.addAttribute("application", String.class, false);
129         infoFactory.addAttribute("javaVMs", String[].class, false);
130         infoFactory.addAttribute("classLoader", ClassLoader.class, false);
131         infoFactory.addInterface(AppClientModule.class);
132 
133 
134         infoFactory.setConstructor(new String[]{
135             "objectName",
136             "J2EEServer",
137             "J2EEApplication",
138             "deploymentDescriptor",
139             "classLoader"});
140 
141         GBEAN_INFO = infoFactory.getBeanInfo();
142     }
143 
144     public static GBeanInfo getGBeanInfo() {
145         return GBEAN_INFO;
146     }
147 }