package com.feedly.cassandra.dao; import java.net.URL; import javax.management.MalformedObjectNameException; import javax.management.ObjectName; class MBeanUtils { static final int DEFAULT_STATS_SIZE = 10000; static String getUniqueClassloaderIdentifier(Class<?> clazz) { String contextPath = getContextPath(clazz); if (contextPath != null) return contextPath; return "feedly-cassandra"; } static String getContextPath(Class<?> clazz) { ClassLoader loader = clazz.getClassLoader(); if(loader == null) return null; URL url = loader.getResource("/"); if (url != null) { String[] elements = url.toString().split("/"); for (int i = elements.length - 1; i > 0; --i) { // URLs look like this: file:/.../ImageServer/WEB-INF/classes/ // And we want that part that's just before WEB-INF if ("WEB-INF".equals(elements[i])) return elements[i - 1]; } } return null; } static ObjectName mBeanName(Object monitored, String qualifier, String name) throws MalformedObjectNameException { return new ObjectName(String.format("feedly.cassandra.%s%s%s:context=%s,name=%s", monitored.getClass().getSimpleName(), qualifier != null ? "_" : "", qualifier != null ? qualifier : "", MBeanUtils.getUniqueClassloaderIdentifier(monitored.getClass()), name)); } }