private void checkDomain(ObjectName name) { if (ManagementConstants.OBJECTNAME__DEFAULTDOMAIN.equals(name.getDomain())) throw new SecurityException(ResourceConstants.ACCESS_DENIED_MESSAGE); }
private static ObjectName getGroupMulticastObjectName(MBeanServer mBeanServer) { for(ObjectName name : mBeanServer.queryNames(null, null)) { if(name.getDomain().equals(JMX_DOMAIN)) { if ("TOA".equals(name.getKeyProperty("protocol"))) { return name; } } } return null; } }
private void initTrackers() { try { for(ObjectName name: connection.queryNames(null, null)) { if (name.getDomain().equals("java.lang") && "GarbageCollector".equals(name.getKeyProperty("type"))) { CollectorTracker tracker = new CollectorTracker(connection, name); trackers.put(tracker.name, tracker); } } } catch (Exception e) { throw new RuntimeException(e); } }
/** * Append an additional key/value pair to an existing {@link ObjectName} with the key being * the static value {@code identity} and the value being the identity hash code of the * managed resource being exposed on the supplied {@link ObjectName}. This can be used to * provide a unique {@link ObjectName} for each distinct instance of a particular bean or * class. Useful when generating {@link ObjectName ObjectNames} at runtime for a set of * managed resources based on the template value supplied by a * {@link org.springframework.jmx.export.naming.ObjectNamingStrategy}. * @param objectName the original JMX ObjectName * @param managedResource the MBean instance * @return an ObjectName with the MBean identity added * @throws MalformedObjectNameException in case of an invalid object name specification * @see org.springframework.util.ObjectUtils#getIdentityHexString(Object) */ public static ObjectName appendIdentityToObjectName(ObjectName objectName, Object managedResource) throws MalformedObjectNameException { Hashtable<String, String> keyProperties = objectName.getKeyPropertyList(); keyProperties.put(IDENTITY_OBJECT_NAME_KEY, ObjectUtils.getIdentityHexString(managedResource)); return ObjectNameManager.getInstance(objectName.getDomain(), keyProperties); }
public static ObjectName createNetworkBridgeObjectName(ObjectName connectorName, String remoteAddress) throws MalformedObjectNameException { Hashtable<String, String> map = new Hashtable<String, String>(connectorName.getKeyPropertyList()); map.put("networkBridge", JMXSupport.encodeObjectNamePart(remoteAddress)); return new ObjectName(connectorName.getDomain(), map); }
public static ObjectName getObjectName( GraphDatabaseService db, String name ) { if ( !(db instanceof GraphDatabaseAPI) ) { throw new IllegalArgumentException( "Can only resolve object names for embedded Neo4j database " + "instances, eg. instances created by GraphDatabaseFactory or HighlyAvailableGraphDatabaseFactory." ); } ObjectName neoQuery = ((GraphDatabaseAPI)db).getDependencyResolver().resolveDependency( JmxKernelExtension.class ) .getSingleManagementBean( Kernel.class ).getMBeanQuery(); String instance = neoQuery.getKeyProperty( "instance" ); String domain = neoQuery.getDomain(); try { return new ObjectName( format( "%s:instance=%s,name=%s", domain, instance, name ) ); } catch ( MalformedObjectNameException e ) { throw new RuntimeException( e ); } }
private void initTrackers() { try { for(ObjectName name: mserver.queryNames(null, null)) { if (name.getDomain().equals("java.lang") && "GarbageCollector".equals(name.getKeyProperty("type"))) { GcTracker tracker = new GcTracker(name, name.getKeyProperty("name")); initTracker(tracker); trackers.add(tracker); tracker.capture(); } } } catch (Exception e) { throw new RuntimeException(e); } }
/** * Append an additional key/value pair to an existing {@link ObjectName} with the key being * the static value {@code identity} and the value being the identity hash code of the * managed resource being exposed on the supplied {@link ObjectName}. This can be used to * provide a unique {@link ObjectName} for each distinct instance of a particular bean or * class. Useful when generating {@link ObjectName ObjectNames} at runtime for a set of * managed resources based on the template value supplied by a * {@link org.springframework.jmx.export.naming.ObjectNamingStrategy}. * @param objectName the original JMX ObjectName * @param managedResource the MBean instance * @return an ObjectName with the MBean identity added * @throws MalformedObjectNameException in case of an invalid object name specification * @see org.springframework.util.ObjectUtils#getIdentityHexString(Object) */ public static ObjectName appendIdentityToObjectName(ObjectName objectName, Object managedResource) throws MalformedObjectNameException { Hashtable<String, String> keyProperties = objectName.getKeyPropertyList(); keyProperties.put(IDENTITY_OBJECT_NAME_KEY, ObjectUtils.getIdentityHexString(managedResource)); return ObjectNameManager.getInstance(objectName.getDomain(), keyProperties); }
@Test public void testAppendIdentityToObjectName() throws MalformedObjectNameException { ObjectName objectName = ObjectNameManager.getInstance("spring:type=Test"); Object managedResource = new Object(); ObjectName uniqueName = JmxUtils.appendIdentityToObjectName(objectName, managedResource); String typeProperty = "type"; assertEquals("Domain of transformed name is incorrect", objectName.getDomain(), uniqueName.getDomain()); assertEquals("Type key is incorrect", objectName.getKeyProperty(typeProperty), uniqueName.getKeyProperty("type")); assertEquals("Identity key is incorrect", ObjectUtils.getIdentityHexString(managedResource), uniqueName.getKeyProperty(JmxUtils.IDENTITY_OBJECT_NAME_KEY)); }
@Test public void naming() throws MalformedObjectNameException { JmxTestBean bean = new JmxTestBean(); IdentityNamingStrategy strategy = new IdentityNamingStrategy(); ObjectName objectName = strategy.getObjectName(bean, "null"); assertEquals("Domain is incorrect", bean.getClass().getPackage().getName(), objectName.getDomain()); assertEquals("Type property is incorrect", ClassUtils.getShortName(bean.getClass()), objectName.getKeyProperty(IdentityNamingStrategy.TYPE_KEY)); assertEquals("HashCode property is incorrect", ObjectUtils.getIdentityHexString(bean), objectName.getKeyProperty(IdentityNamingStrategy.HASH_CODE_KEY)); }
private MBeanInfo kernelMBeanInfo() throws Exception { Kernel kernel = ((GraphDatabaseAPI) graphdb).getDependencyResolver().resolveDependency( JmxKernelExtension .class ).getSingleManagementBean( Kernel.class ); ObjectName query = kernel.getMBeanQuery(); Hashtable<String, String> properties = new Hashtable<>( query.getKeyPropertyList() ); properties.put( "name", Kernel.NAME ); return getPlatformMBeanServer().getMBeanInfo( new ObjectName( query.getDomain(), properties ) ); } }
@Test public void testOrderedTagsWithoutAppend() { ObjectNameMapper mapper = new OrderedObjectNameMapper(false, Arrays.asList("name", DataSourceType.KEY, "foo", "notPresentKey")); ObjectName name = mapper.createObjectName(TEST_DOMAIN, TEST_COUNTER); assertEquals(name.getDomain(), TEST_DOMAIN); assertEquals(name.getKeyPropertyListString(), String.format("name=testName,%s=COUNTER,foo=bar", DataSourceType.KEY)); }
@Test public void testOrderedTagsWithAppend() { ObjectNameMapper mapper = new OrderedObjectNameMapper(true, "name", DataSourceType.KEY, "foo", "notPresentKey"); ObjectName name = mapper.createObjectName(TEST_DOMAIN, TEST_COUNTER); assertEquals(name.getDomain(), TEST_DOMAIN); assertEquals(name.getKeyPropertyListString(), String.format("name=testName,%s=COUNTER,foo=bar,aaa=aaaVal,zzz=zzzVal", DataSourceType.KEY)); }
@Test public void testOrderedTagsWithoutNameExplicitlyOrdered() { ObjectNameMapper mapper = new OrderedObjectNameMapper(true, "foo", DataSourceType.KEY); ObjectName name = mapper.createObjectName(TEST_DOMAIN, TEST_COUNTER); assertEquals(name.getDomain(), TEST_DOMAIN); assertEquals(name.getKeyPropertyListString(), String.format("foo=bar,%s=COUNTER,name=testName,aaa=aaaVal,zzz=zzzVal", DataSourceType.KEY)); }
@Test public void testInvalidCharactersSanitized() { ObjectName name = ObjectNameBuilder.forDomain("test*Domain&") .addProperty("foo%", "$bar") .build(); assertEquals(name.getDomain(), "test_Domain_"); assertEquals(name.getKeyPropertyListString(), "foo_=_bar"); }
@Test public void testAddTagList() { ObjectName name = ObjectNameBuilder.forDomain("testDomain") .addProperties(BasicTagList.of("foo", "bar", "test", "stuff")) .build(); assertEquals(name.getDomain(), "testDomain"); assertEquals(name.getKeyPropertyListString(), "foo=bar,test=stuff"); }
@Test public void testStandardMapping() { MonitorConfig config = MonitorConfig.builder("testName").withTag("foo", "bar").build(); ObjectName name = DEFAULT_MAPPER.createObjectName(TEST_DOMAIN, new BasicCounter(config)); assertEquals(name.getDomain(), TEST_DOMAIN); // note that this assumes that DataSourceType.KEY is greater than 'foo' // for String#compareTo purposes assertEquals(name.getKeyPropertyListString(), String.format("name=testName,foo=bar,%s=COUNTER", DataSourceType.KEY)); }
@Test public void testTagByTag() { // Order will be in the order tags were added to the builder ObjectName name = ObjectNameBuilder.forDomain("testDomain") .addProperty(Tags.newTag("foo", "bar")) .addProperty(Tags.newTag("test", "stuff")) .build(); assertEquals(name.getDomain(), "testDomain"); assertEquals(name.getKeyPropertyListString(), "foo=bar,test=stuff"); }
@Test public void testBuildObjectName() throws MalformedObjectNameException { String[] keys = {"type", "name"}; String[] values = {"MemoryPool", "Par Eden Space"}; Hashtable<String, String> properties = JSONMetricUtil.buldKeyValueTable(keys, values); ObjectName testObject = JSONMetricUtil.buildObjectName(JSONMetricUtil.JAVA_LANG_DOMAIN, properties); assertEquals(JSONMetricUtil.JAVA_LANG_DOMAIN, testObject.getDomain()); assertEquals(testObject.getKeyPropertyList(), properties); }