1 29 30 31 package com.caucho.quercus.lib.resin; 32 33 import com.caucho.jmx.Jmx; 34 import com.caucho.quercus.QuercusModuleException; 35 import com.caucho.quercus.annotation.Optional; 36 import com.caucho.quercus.env.ArrayValue; 37 import com.caucho.quercus.env.ArrayValueImpl; 38 import com.caucho.quercus.env.Env; 39 import com.caucho.server.admin.RemoteMBeanConnectionFactory; 40 41 import javax.management.MBeanServerConnection ; 42 import javax.management.MalformedObjectNameException ; 43 import javax.management.ObjectName ; 44 import java.io.IOException ; 45 import java.util.Comparator ; 46 import java.util.Set ; 47 import java.util.TreeSet ; 48 import java.util.logging.Logger ; 49 50 public class MBeanServer { 51 private static Logger log = Logger.getLogger(MBeanServer.class.getName()); 52 53 private static final Comparator <ObjectName > OBJECTNAME_COMPARATOR; 54 55 private final MBeanServerConnection _server; 56 57 63 public MBeanServer(@Optional String url) 64 { 65 if (url == null || "".equals(url)) { 66 _server = Jmx.getGlobalMBeanServer(); 67 } 68 else { 69 _server = RemoteMBeanConnectionFactory.create(url); 70 } 71 } 72 73 89 public MBean lookup(Env env, @Optional String name) 90 { 91 try { 92 if (name == null || name.length() == 0) 93 return null; 94 95 ObjectName objectName = Jmx.getObjectName(name); 96 97 if (_server.isRegistered(objectName)) 98 return new MBean(_server, objectName); 99 else 100 return null; 101 } 102 catch (MalformedObjectNameException e) { 103 throw new QuercusModuleException(e); 104 } 105 catch (IOException e) { 106 throw new QuercusModuleException(e); 107 } 108 } 109 110 116 public ArrayValue query(Env env, String pattern) 117 { 118 try { 119 ArrayValueImpl values = new ArrayValueImpl(); 120 121 ObjectName patternObjectName; 122 123 patternObjectName = new ObjectName (pattern); 124 125 Set <ObjectName > objectNames; 126 127 objectNames = _server.queryNames(patternObjectName, null); 128 129 if (objectNames == null) 130 return values; 131 132 javax.management.MBeanServer server; 133 server = Jmx.getGlobalMBeanServer(); 134 135 TreeSet <ObjectName > sortedObjectNames 136 = new TreeSet <ObjectName >(OBJECTNAME_COMPARATOR); 137 138 sortedObjectNames.addAll(objectNames); 139 140 for (ObjectName objectName : sortedObjectNames) 141 values.put(env.wrapJava(new MBean(server, objectName))); 142 143 return values; 144 } 145 catch (MalformedObjectNameException e) { 146 throw new QuercusModuleException(e); 147 } 148 catch (IOException e) { 149 throw new QuercusModuleException(e); 150 } 151 } 152 153 static { 154 OBJECTNAME_COMPARATOR = new Comparator <ObjectName >() { 155 public int compare(ObjectName o1, ObjectName o2) 156 { 157 if (o1 == null) 158 return -1; 159 160 if (o2 == null) 161 return 1; 162 163 return o1.getCanonicalName().compareTo(o2.getCanonicalName()); 164 } 165 }; 166 } 167 } 168 | Popular Tags |