1 8 13 14 package org.webjmx.adapter; 15 16 import java.io.*; 17 import java.util.*; 18 import javax.management.*; 19 import javax.xml.parsers.*; 20 21 import org.webjmx.tags.JMXTaglibConstants; 22 import org.webjmx.adapter.xml.*; 23 24 import org.xml.sax.*; 26 import org.w3c.dom.*; 27 28 29 34 public class AdapterFactory 35 implements JMXTaglibConstants 36 { 37 private static final String PROP_FILE = "/AdapterFactoryInit.xml"; 38 private static Map AdapterTypeMap = new HashMap(); 40 private static Map AdapterMap = new HashMap(); 41 42 static 43 { 44 if(System.getProperty(PARSER_PROP_NAME) == null) 46 System.setProperty(PARSER_PROP_NAME, "org.apache.xerces.parsers.SAXParser"); 47 48 if(Boolean.getBoolean(DEBUG_PROP)) System.out.println("initalizing AdapterFactory from properties file ..."); 49 InputStream in = AdapterFactory.class.getResourceAsStream(PROP_FILE); 50 try 51 { 52 if(in != null && in.available() > 0) 53 { 54 55 AdapterFactoryInit init = parseDOMTree(in); 56 57 for(int i = 0; i < init.getServices().size(); i++) 59 { 60 try{ init.getService(i).verify(); } 61 catch(Exception ex) 62 { 63 if(Boolean.getBoolean(DEBUG_PROP)) System.out.println("Warning: failed to map service: " +init.getService(i)); 64 continue; 65 } 66 67 AdapterTypeMap.put(init.getService(i).getName(), init.getService(i).getClassName()); 68 if(Boolean.getBoolean(DEBUG_PROP)) System.out.println("mapped class [" +init.getService(i).getClassName() 69 +"] to service name: " +init.getService(i).getName()); 70 } 71 72 for(int i = 0; i < init.getAdapters().size(); i++) 74 { 75 List l = findMBeanServer(init.getAdapter(i).getLocator()); 76 try 77 { 78 for(int j = 0; j < l.size() && init.getAdapter(i).isPreload(); j++) 79 ((JMXServiceAdapter)l.get(j)).connect(); 80 }catch(Exception ex) 81 { 82 if(Boolean.getBoolean(DEBUG_PROP)) System.out.println("Warning: failed to map Adapter: " +init.getAdapter(i)); 83 continue; 84 } 85 86 AdapterMap.put(init.getAdapter(i).getName(), l); 87 if(Boolean.getBoolean(DEBUG_PROP)) System.out.println("mapped Adapter locaton [" +init.getAdapter(i).getLocator() 88 +"] to alias: " +init.getAdapter(i).getName()); 89 } 90 }else 91 System.out.println("no property file found"); 92 }catch(Exception ex) 93 { 94 System.out.println("exception caught while processing properties file: " +ex); 95 ex.printStackTrace(); 96 } 97 98 if(!AdapterTypeMap.containsKey(SOCKET_SERVICE_NAME)) 100 AdapterTypeMap.put(SOCKET_SERVICE_NAME, SOCKET_SERVICE_CLASS); 101 else 102 if(Boolean.getBoolean(DEBUG_PROP)) System.out.println(SOCKET_SERVICE_NAME +" service already mapped."); 103 104 } 105 106 private static AdapterFactoryInit parseDOMTree(InputStream in) 107 throws Exception  108 { 109 AdapterFactoryInit init = new AdapterFactoryInit(); 110 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 111 dbf.setNamespaceAware(true); 112 dbf.setIgnoringComments(true); 113 DocumentBuilder db = dbf.newDocumentBuilder(); 114 Document doc = db.parse(in); 115 Element root = doc.getDocumentElement(); 116 for(int i = 0; i < root.getChildNodes().getLength(); i++) 117 { 118 Node node = root.getChildNodes().item(i); 119 if(node.getNodeName().equals("ServiceMapping")) 121 { 122 ServiceMapping mapping = new ServiceMapping(); 123 mapping.setName(node.getAttributes().getNamedItem("name").getNodeValue()); 124 mapping.setClassName(node.getAttributes().getNamedItem("class").getNodeValue()); 125 init.getServices().add(mapping); 127 }else if(node.getNodeName().equals("AdapterMapping")) 128 { 129 AdapterMapping mapping = new AdapterMapping(); 130 mapping.setName(node.getAttributes().getNamedItem("name").getNodeValue()); 131 mapping.setLocator(node.getAttributes().getNamedItem("locator").getNodeValue()); 132 if(node.getAttributes().getNamedItem("preload") != null) 133 mapping.setPreload("true".equalsIgnoreCase(node.getAttributes().getNamedItem("preload").getNodeValue())); 134 init.getAdapters().add(mapping); 136 }else 137 System.out.println("Unknown XML element name: " +node.getNodeName()); 138 } 139 return init; 140 } 141 142 static public List findMBeanServer(String locator) 145 { 146 Object o = AdapterMap.get(locator); 148 if(o != null) 150 return (ArrayList)o; 151 152 if(locator == null) 153 return MBeanServerFactory.findMBeanServer(null); 154 155 StringTokenizer semiTok = new StringTokenizer(locator, ";", true); 157 158 String AdapterType = semiTok.nextToken(); 159 if(AdapterType.equals(";")) 160 AdapterType = null; 161 else if(semiTok.hasMoreTokens()) 162 semiTok.nextToken(); 163 164 List parameters = new ArrayList(); 165 String params = null; 166 if(semiTok.hasMoreTokens()) 167 params = semiTok.nextToken(); 168 if(params != null && !params.equals(";")) 169 { 170 StringTokenizer colonTok = new StringTokenizer(params, ":"); 172 while(colonTok.hasMoreTokens()) 173 parameters.add(colonTok.nextToken()); 174 175 if(semiTok.hasMoreTokens()) 177 semiTok.nextToken(); 178 } 179 181 if(AdapterType == null) 183 AdapterType = DEFAULT_SERVICE_NAME; 184 185 if(AdapterType.equals(DEFAULT_SERVICE_NAME)) 186 { 187 String defaultDomain = null; 188 if(parameters.size() > 0) 189 defaultDomain = (String )parameters.get(0); 190 String agentID = null; 191 if(parameters.size() > 1) 192 agentID = (String )parameters.get(1); 193 194 List l = MBeanServerFactory.findMBeanServer(agentID); 195 197 for(int i = l.size() -1; defaultDomain != null && i > -1; i--) 199 { 200 MBeanServer s = (MBeanServer)l.get(i); 201 if(!s.getDefaultDomain().equals(defaultDomain)) 202 l.remove(i); 203 } 204 205 AdapterMap.put(locator, l); 207 208 return l; 210 } 211 212 Object className = AdapterTypeMap.get(AdapterType); 213 if(className == null) 214 className = AdapterType; 215 Class cls = null; 216 217 try{ cls = Class.forName(className.toString()); } 218 catch(ClassNotFoundException ce) 219 { 220 System.out.println("unknown Adapter type: " +AdapterType); 221 ce.printStackTrace(); 222 return null; 223 } 224 225 try{ o = cls.newInstance(); } 226 catch(Exception ex) 227 { 228 System.out.println("problem with Adapter class: " +ex.getClass()); 229 ex.printStackTrace(); 230 return null; 231 } 232 233 if(!(o instanceof JMXServiceAdapter)) 234 { 235 System.out.println("bad Adapter class mapping, Adapter class must implement JMXServiceAdapter: " +o); 236 return null; 237 } 238 239 JMXServiceAdapter Adapter = (JMXServiceAdapter)o; 240 try 241 { 242 Adapter.initialize(parameters); 243 Adapter.connect(); 244 }catch(Exception ex) 245 { 246 ex.printStackTrace(); 247 return null; 248 } 249 250 ArrayList list = new ArrayList(); 251 list.add(Adapter); 252 253 255 AdapterMap.put(locator, list); 257 258 return list; 259 } 260 261 public static void main(String args[]) 262 { 263 System.out.println("Type Map: "); 265 Iterator it = AdapterTypeMap.keySet().iterator(); 266 while(it.hasNext()) 267 { 268 Object key = it.next(); 269 System.out.println("[" +key +"] " +AdapterTypeMap.get(key)); 270 } 271 System.out.println("\n\nAdapter Map: "); 272 it = AdapterMap.keySet().iterator(); 273 while(it.hasNext()) 274 { 275 Object key = it.next(); 276 System.out.println("[" +key +"] " +AdapterMap.get(key)); 277 } 278 } 279 } 280
| Popular Tags
|