KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > uk > org > primrose > pool > jmx > MBeanUtil


1 /**
2 * Library name : Primrose - A Java Database Connection Pool.
3 * Published by Ben Keeping, http://primrose.org.uk .
4 * Copyright (C) 2004 Ben Keeping, primrose.org.uk
5 * Email: Use "Contact Us Form" on website
6 *
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 */

21
22 package uk.org.primrose.pool.jmx;
23 import com.sun.jdmk.comm.*;
24 import javax.management.*;
25 import javax.management.loading.*;
26 import javax.management.remote.JMXConnectorServer JavaDoc;
27 import javax.management.remote.JMXConnectorServerFactory JavaDoc;
28 import javax.management.remote.JMXServiceURL JavaDoc;
29 import javax.management.NotificationBroadcaster JavaDoc;
30 import java.util.*;
31 import java.io.*;
32 import java.lang.reflect.*;
33 import javax.naming.Context JavaDoc;
34 import javax.naming.InitialContext JavaDoc;
35 import org.jboss.naming.NonSerializableFactory;
36
37 public class MBeanUtil {
38
39     /**
40     * The pool uses some internal bindings for its own operations, and in tomcat standalone
41     * this is fine. But its not in JBoss (and I suspect other J2EE) containers. This
42     * is because the pool is not serializable, and JBoss's internal JNDI service
43     * is geared around serialization - so objects can be exported across JVM instances.
44     * Now, this is a bummer for us because we cannot fire the pool successfully. Luckily
45     * JBoss has a factory for binding non-serializable objects, which we will test for,
46     * and if we are running in JBoss, we'll bind under that. If we integrate other
47     * J2EE servers into running the pool, I guess we'll need to do similar operations
48     */

49     public static void bind(String JavaDoc name, Object JavaDoc value) throws javax.naming.NamingException JavaDoc {
50         try {
51             Class JavaDoc c = Class.forName("org.jboss.naming.NonSerializableFactory");
52             NonSerializableFactory.bind(name, value);
53         } catch (ClassNotFoundException JavaDoc cnfe) {
54             Context JavaDoc ctx = new InitialContext JavaDoc();
55             ctx.rebind(name, value);
56         }
57     }
58
59     /**
60     * See note on the bind() method
61     */

62     public static Object JavaDoc lookup(String JavaDoc name) throws javax.naming.NamingException JavaDoc {
63         try {
64             Class JavaDoc c = Class.forName("org.jboss.naming.NonSerializableFactory");
65             return NonSerializableFactory.lookup(name);
66         } catch (ClassNotFoundException JavaDoc cnfe) {
67             Context JavaDoc ctx = new InitialContext JavaDoc();
68             return ctx.lookup(name);
69         }
70     }
71
72
73
74     protected static void unRegisterAll(MBeanServer _server, ArrayList _mbeans) {
75         // We're done, unregister all MBeans
76
_server = MBeanUtil.getMBeanServer(_server);
77         Iterator iter = _mbeans.iterator();
78         ObjectName objName = null;
79
80         while (iter.hasNext()) {
81             objName = (ObjectName)iter.next();
82
83             //System.err.println(_server +"[MBeanUtil] : INFO: " + "Unregistering MBean \'" +objName.toString() + "\'.");
84
try {
85                 if (_server.isRegistered(objName)) {
86                     _server.unregisterMBean(objName);
87                 } //else {
88
// System.err.println(_server +"[MBeanUtil] " + "MBean \'" +objName.toString() + "\' does not exist !.");
89
//}
90
} catch (InstanceNotFoundException infe) {
91                 infe.printStackTrace();
92             } catch (Exception JavaDoc e) {
93                 System.err.println("[MBeanUtil] : ERROR: " + "Error unregistering MBean!");
94                 e.printStackTrace();
95             }
96         }
97     }
98
99     protected static void registerMBean(MBeanServer server, Object JavaDoc obj, ObjectName name) throws Exception JavaDoc {
100         try {
101             server.registerMBean(obj, name);
102         } catch (InstanceAlreadyExistsException e) {
103             server.unregisterMBean(name);
104             server.registerMBean(obj, name);
105         }
106     }
107
108     protected static void unRegisterSingle(MBeanServer _server, ArrayList _mbeans, String JavaDoc poolQueue) {
109         // We're done, unregister all MBeans
110
_server = MBeanUtil.getMBeanServer(_server);
111         Iterator iter = _mbeans.iterator();
112         ObjectName objName = null;
113         while (iter.hasNext()) {
114             objName = (ObjectName)iter.next();
115             try {
116                 // This is not very safe, but bugger it for now
117
// (ie PoolName and PoolNameOne would both get deregistered ....
118
if (objName.toString().indexOf(poolQueue) != -1) {
119                     //System.err.println("[MBeanUtil] : INFO: " + "Unregistering single MBean \'" +objName.toString() + "\'.");
120
_server.unregisterMBean(objName);
121                 }
122             } catch (Exception JavaDoc e) {
123                 System.err.println("[MBeanUtil] : ERROR: " + "Error unregistering MBean!");
124                 e.printStackTrace();
125             }
126         }
127     }
128
129     /*public static Set getDomainList() {
130         ArrayList mbeanServers = MBeanServerFactory.findMBeanServer(null);
131         Iterator iter = mbeanServers.iterator();
132         int aa = 1;
133         Set set = null;
134         while (iter.hasNext()) {
135             System.err.println("!!!!!!!!!!!!!!!!1here");
136             MBeanServer mbs = (MBeanServer)iter.next();
137             set = mbs.queryMBeans(null, null);
138         }
139         return set;
140     }
141     */

142
143     /**
144      * Obtains a reference to the MBean server. If at least one
145      * MBean server already exists, then a reference to that MBean
146      * server is returned. Otherwise a new instance is created.
147      */

148     public static MBeanServer getMBeanServer (MBeanServer _server) {
149         if (_server == null) {
150             ArrayList mbeanServers = MBeanServerFactory.findMBeanServer(null);
151             Iterator iter = mbeanServers.iterator();
152             int aa = 1;
153             while (iter.hasNext()) {
154                 MBeanServer mbs = (MBeanServer)iter.next();
155                 Set set = mbs.queryMBeans(null, null);
156                 Iterator iter2 = set.iterator();
157                 while (iter2.hasNext()) {
158                     ObjectInstance obji = (ObjectInstance)iter2.next();
159                     //System.err.println("!!!!! " +obji);
160
}
161                 aa++;
162             }
163             //_server = (mbeanServers.size() > 0) ? (MBeanServer)mbeanServers.get(0) : MBeanServerFactory.createMBeanServer();
164
_server = MBeanServerFactory.createMBeanServer();
165         }
166         return _server;
167     }
168
169     /**
170      * Creates the HTML adapter server and starts it running
171      * on its own thread of execution.
172      */

173     protected static HtmlAdaptorServer createHTMLAdapter (HtmlAdaptorServer _html, MBeanServer _server, ArrayList _mbeans, String JavaDoc user, String JavaDoc password, int portNumber) {
174         _html = new HtmlAdaptorServer(portNumber);
175         ObjectName html_name = null;
176         if (user.equals("none") && password.equals("none")) {
177             System.err.println("WARNING : The user and password for the web mnagement tool are set to \"none\", so I am NOT applying authentication !");
178         } else {
179             AuthInfo auth = new AuthInfo(user, password);
180             _html.addUserAuthenticationInfo(auth);
181         }
182         try {
183             html_name = new ObjectName("Adaptor:name=html,port=" + portNumber);
184             _server.registerMBean(_html, html_name);
185             _mbeans.add(html_name);
186         } catch (Exception JavaDoc e) {
187             e.printStackTrace();
188             return null;
189         }
190         _html.start();
191
192         return _html;
193
194     }
195
196     protected static Class JavaDoc getClassFromString (String JavaDoc className) throws ClassNotFoundException JavaDoc {
197         Class JavaDoc ret = null;
198         if (className.equals(Boolean.TYPE.getName()))
199             ret = Boolean.TYPE;
200         else if (className.equals(Character.TYPE.getName()))
201             ret = Character.TYPE;
202         else if (className.equals(Byte.TYPE.getName()))
203             ret = Byte.TYPE;
204         else if (className.equals(Short.TYPE.getName()))
205             ret = Short.TYPE;
206         else if (className.equals(Integer.TYPE.getName()))
207             ret = Integer.TYPE;
208         else if (className.equals(Long.TYPE.getName()))
209             ret = Long.TYPE;
210         else if (className.equals(Float.TYPE.getName()))
211             ret = Float.TYPE;
212         else if (className.equals(Double.TYPE.getName()))
213             ret = Double.TYPE;
214         else if (className.equals(Void.TYPE.getName()))
215             ret = Void.TYPE;
216         //
217
// Not a primitive type, just load the class based
218
/// on the name.
219
//
220
else
221             ret = Class.forName(className);
222         return ret;
223     }
224
225 }
Popular Tags