001: /**
002: * JOnAS: Java(TM) Open Application Server
003: * Copyright (C) 2006 Bull S.A.
004: * Contact: jonas-team@objectweb.org
005: *
006: * This library is free software; you can redistribute it and/or
007: * modify it under the terms of the GNU Lesser General Public
008: * License as published by the Free Software Foundation; either
009: * version 2.1 of the License, or any later version.
010: *
011: * This library is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * Lesser General Public License for more details.
015: *
016: * You should have received a copy of the GNU Lesser General Public
017: * License along with this library; if not, write to the Free Software
018: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
019: * USA
020: *
021: * --------------------------------------------------------------------------
022: * $Id: ClusterMember.java 9864 2006-11-24 10:14:22Z danesa $
023: * --------------------------------------------------------------------------
024: */package org.objectweb.jonas.management.cluster;
025:
026: import javax.management.JMException;
027: import javax.management.MBeanServer;
028: import javax.management.ObjectName;
029:
030: import org.objectweb.jonas.common.Log;
031: import org.objectweb.jonas.management.monitoring.ServerProxy;
032: import org.objectweb.jonas.server.J2EEServer;
033: import org.objectweb.util.monolog.api.Logger;
034:
035: /**
036: * A ClusterMember object refers to the ServerProxy corresponding
037: * to the managed server which is being member of a given cluster.
038: * There may be several ClusterMember instances for the same ServerProxy object.
039: * @author Philippe Durieux
040: */
041: public abstract class ClusterMember {
042:
043: /**
044: * Name of this Member. Depend on the derived class.
045: */
046: protected String name;
047:
048: /**
049: * MBean ObjectName
050: */
051: protected ObjectName objectName = null;
052:
053: /**
054: * The ServerProxy representing the managed server.
055: */
056: protected ServerProxy proxy = null;
057:
058: /**
059: * The J2EEServer object
060: */
061: protected J2EEServer j2eeServer = null;
062:
063: /**
064: * MBeanServer where the MBean is registered.
065: */
066: protected MBeanServer mbeanServer = null;
067:
068: /**
069: * logger for traces
070: */
071: protected static Logger logger = Log
072: .getLogger("org.objectweb.jonas.domain.management");
073:
074: /**
075: * Constructor in case of Remote Server
076: * @param name serverName
077: * @param proxy The ServerProxy representing the managed server.
078: */
079: public ClusterMember(String name, ServerProxy proxy) {
080: this .name = name;
081: this .proxy = proxy;
082: }
083:
084: /**
085: * Constructor in case of the Local Server
086: * @param name serverName
087: * @param the J2EEServer object
088: */
089: public ClusterMember(String name, J2EEServer server) {
090: this .name = name;
091: this .j2eeServer = server;
092: }
093:
094: /**
095: * @return the MBeanServer reference
096: */
097: public MBeanServer getMbeanServer() {
098: return mbeanServer;
099: }
100:
101: /**
102: * Set the MBeanServer reference
103: * @param mbeanServer MBeanServer reference
104: */
105: public void setMbeanServer(MBeanServer mbeanServer) {
106: this .mbeanServer = mbeanServer;
107: }
108:
109: /**
110: * @return the member state if it is connected to a ServerProxy as a String
111: * @throws JMException could not get ServerProxy state because of a JMX exception
112: */
113: public String getState() {
114: String state = "NOT_CONNECTED";
115: if (proxy != null) {
116: state = proxy.getState();
117: }
118: return state;
119: }
120:
121: /**
122: * @return the member state if it is connected to a ServerProxy.
123: * @throws JMException could not get ServerProxy state because of a JMX exception
124: */
125: public int getServerState() {
126: int state = ServerProxy.UNKNOWN;
127: if (proxy != null) {
128: state = proxy.getServerState();
129: }
130: return state;
131: }
132:
133: /**
134: * @return name of this member
135: */
136: public String getName() {
137: return name;
138: }
139:
140: /**
141: * Get the Mbean ObjectName (for jonasAdmin)
142: * @return ObjectName of this member
143: */
144: public ObjectName getObjectName() {
145: return objectName;
146: }
147:
148: /**
149: * Set the ObjectName. Should be called when the MBean is registered.
150: */
151: public void setObjectName(ObjectName on) {
152: objectName = on;
153: }
154:
155: /**
156: * @return The ServerProxy OBJECT_NAME referenced by this cluster member
157: */
158: public String getServerProxy() {
159: return proxy.getObjectName();
160: }
161:
162: /**
163: * @return The proxy pointed by this Member
164: */
165: public ServerProxy getProxy() {
166: return proxy;
167: }
168:
169: /**
170: * TODO: J2EEServer and ServerProxy should be the same object
171: * @return The J2EEServer pointed by this Member
172: */
173: public J2EEServer getJ2EEServer() {
174: if (j2eeServer != null) {
175: return j2eeServer;
176: }
177: throw new RuntimeException(
178: "Not implemented yet in case of remote server");
179: }
180:
181: /**
182: * The JOnAS server's name which is represented by the proxy, null if the memeber
183: * is not connected to a proxy
184: * @return the JOnAS server's name which is represented by the proxy
185: * @throws JMException could not get serverName from the ServerProxy because of a JMX exception
186: */
187: public String getServerName() throws JMException {
188: String serverName = null;
189: if (proxy != null) {
190: serverName = proxy.getServerName();
191: }
192: return serverName;
193: }
194:
195: }
|