# javax.management

***

**1. Registering and Unregistering MBeans**

```java
// Register an MBean
MBeanServer mbeanServer = MBeanServerFactory.createMBeanServer();
ObjectName objectName = new ObjectName("com.example:type=Foo");
Foo mbean = new Foo();
mbeanServer.registerMBean(mbean, objectName);

// Unregister an MBean
mbeanServer.unregisterMBean(objectName);
```

**2. Retrieving MBean Attributes**

```java
MBeanServer mbeanServer = MBeanServerFactory.createMBeanServer();
ObjectName objectName = new ObjectName("com.example:type=Foo");
Object attributeValue = mbeanServer.getAttribute(objectName, "Name");
```

**3. Setting MBean Attributes**

```java
MBeanServer mbeanServer = MBeanServerFactory.createMBeanServer();
ObjectName objectName = new ObjectName("com.example:type=Foo");
mbeanServer.setAttribute(objectName, new Attribute("Name", "New Name"));
```

**4. Invoking MBean Operations**

```java
MBeanServer mbeanServer = MBeanServerFactory.createMBeanServer();
ObjectName objectName = new ObjectName("com.example:type=Foo");
Object result = mbeanServer.invoke(objectName, "sayHello", new Object[] {"John"}, new String[] {"java.lang.String"});
```

**5. Sending Notifications from MBeans**

```java
MBeanServer mbeanServer = MBeanServerFactory.createMBeanServer();
ObjectName objectName = new ObjectName("com.example:type=Foo");
Foo mbean = new Foo();
mbeanServer.registerMBean(mbean, objectName);

mbean.sendNotification(new Notification("FooNotification", "com.example:source=Foo", 100, "Foo Notification"));
```

**6. Receiving Notifications using Notification Listeners**

```java
MBeanServer mbeanServer = MBeanServerFactory.createMBeanServer();
ObjectName objectName = new ObjectName("com.example:type=Foo");
Foo mbean = new Foo();
mbeanServer.registerMBean(mbean, objectName);

NotificationListener listener = new NotificationListener() {
    public void handleNotification(Notification notification, Object handback) {
        // Process the notification
    }
};

mbeanServer.addNotificationListener(objectName, listener, null, null);
```

**7. Creating a Composite Data Attribute**

```java
CompositeData support = new CompositeDataSupport(
        new ObjectName("com.example:type=Support"),
        new String[] {"firstName", "lastName", "phoneNumber"},
        new Object[] {"John", "Doe", "+1 (555) 123-4567"});
```

**8. Creating a Tabular Data Attribute**

```java
TabularData support = new TabularDataSupport(
        new ObjectName("com.example:type=Support"),
        new String[] {"firstName", "lastName", "phoneNumber"},
        new String[][] {
                {"John", "Doe", "+1 (555) 123-4567"},
                {"Jane", "Smith", "+1 (555) 987-6543"}
        });
```

**9. Creating an Array Attribute**

```java
String[] hobbies = {"Reading", "Coding", "Hiking"};
```

**10. Creating a Model MBean**

```java
MBeanServer mbeanServer = MBeanServerFactory.createMBeanServer();
ObjectName objectName = new ObjectName("com.example:type=Foo");
ModelMBean modelMBean = new ModelMBeanInfoSupport(Foo.class, "Foo Management Bean");
mbeanServer.registerMBean(modelMBean, objectName);
```

**11. Creating a Dynamic MBean**

```java
MBeanServer mbeanServer = MBeanServerFactory.createMBeanServer();
ObjectName objectName = new ObjectName("com.example:type=Foo");
DynamicMBean mbean = new StandardMBean(Foo.class, true);
mbeanServer.registerMBean(mbean, objectName);
```

**12. Using JMX Connectors**

```java
JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi");
JMXConnector jmxConnector = JMXConnectorFactory.connect(url);
MBeanServerConnection mbeanServerConnection = jmxConnector.getMBeanServerConnection();
```

**13. Monitoring MBeans with JMX Timers**

```java
MBeanServer mbeanServer = MBeanServerFactory.createMBeanServer();
ObjectName objectName = new ObjectName("com.example:type=Foo");
Foo mbean = new Foo();
mbeanServer.registerMBean(mbean, objectName);

Timer timer = new Timer();
timer.schedule(new TimerTask() {
    public void run() {
        // Perform monitoring operations on the MBean
    }
}, 1000, 1000);
```

**14. Using JMX Instrumentation for Performance Monitoring**

```java
MBeanServer mbeanServer = MBeanServerFactory.createMBeanServer();
ObjectName objectName = new ObjectName("com.example:type=Foo");
Foo mbean = new Foo();
mbeanServer.registerMBean(mbean, objectName);

MXBean mxbean = ManagementFactory.newPlatformMXBeanProxy(mbeanServer, objectName, FooMXBean.class);
long methodInvocationCount = mxbean.getMethodInvocationCount();
```

**15. Using JMX Instrumentation for Thread Monitoring**

```java
MBeanServer mbeanServer = MBeanServerFactory.createMBeanServer();
ObjectName objectName = new ObjectName("com.example:type=ThreadPool");
ThreadPool mbean = new ThreadPool();
mbeanServer.registerMBean(mbean, objectName);

MXBean mxbean = ManagementFactory.newPlatformMXBeanProxy(mbeanServer, objectName, ThreadPoolMXBean.class);
int activeThreadCount = mxbean.getActiveThreadCount();
```

**16. Using JMX Instrumentation for Memory Pool Monitoring**

```java
MBeanServer mbeanServer = MBeanServerFactory.createMBeanServer();
ObjectName objectName = new ObjectName(ManagementFactory.MEMORY_POOL_MXBEAN_DOMAIN_TYPE + ",name=CodeHeap");
MemoryPoolMXBean mxbean = ManagementFactory.newPlatformMXBeanProxy(mbeanServer, objectName, MemoryPoolMXBean.class);
long usage = mxbean.getUsage().getUsed();
```

**17. Using JMX Instrumentation for Garbage Collector Monitoring**

```java
MBeanServer mbeanServer = MBeanServerFactory.createMBeanServer();
ObjectName objectName = new ObjectName(ManagementFactory.GARBAGE_COLLECTOR_MXBEAN_DOMAIN_TYPE + ",name=ParNew");
GarbageCollectorMXBean mxbean = ManagementFactory.newPlatformMXBeanProxy(mbeanServer, objectName, GarbageCollectorMXBean.class);
long collectionCount = mxbean.getCollectionCount();
```

**18. Using JMX Instrumentation for Class Loading Monitoring**

```java
MBeanServer mbeanServer = MBeanServerFactory.createMBeanServer();
ObjectName objectName = new ObjectName(ManagementFactory.CLASS_LOADING_MXBEAN_DOMAIN_TYPE);
ClassLoadingMXBean mxbean = ManagementFactory.newPlatformMXBeanProxy(mbeanServer, objectName, ClassLoadingMXBean.class);
int loadedClassCount = mxbean.getLoadedClassCount();
```

**19. Using JMX Instrumentation for Compilation Monitoring**

```java
MBeanServer mbeanServer = MBeanServerFactory.createMBeanServer();
ObjectName objectName = new ObjectName(ManagementFactory.COMPILATION_MXBEAN_DOMAIN_TYPE);
CompilationMXBean mxbean = ManagementFactory.newPlatformMXBeanProxy(mbeanServer, objectName, CompilationMXBean.class);
long totalCompileTime = mxbean.getTotalCompileTime();
```

**20. Using JMX Instrumentation for Operating System Monitoring**

```java
MBeanServer mbeanServer = MBeanServerFactory.createMBeanServer();
ObjectName objectName = new ObjectName(ManagementFactory.OPERATING_SYSTEM_MXBEAN_DOMAIN_TYPE);
OperatingSystemMXBean mxbean = ManagementFactory.newPlatformMXBeanProxy(mbeanServer, objectName, OperatingSystemMXBean.class);
int availableProcessors = mxbean.getAvailableProcessors();
```

**21. Using JMX Instrumentation for Runtime Monitoring**

```java
MBeanServer mbeanServer = MBeanServerFactory.createMBeanServer();
ObjectName objectName = new ObjectName(ManagementFactory.RUNTIME_MXBEAN_DOMAIN_TYPE);
RuntimeMXBean mxbean = ManagementFactory.newPlatformMXBeanProxy(mbeanServer, objectName, RuntimeMXBean.class);
long uptime = mxbean.getUptime();
```

**22. Using JMX Instrumentation for Thread Pool Monitoring**

```java
MBeanServer mbeanServer = MBeanServerFactory.createMBeanServer();
ObjectName objectName = new ObjectName(ManagementFactory.THREAD_POOL_MXBEAN_DOMAIN_TYPE + ",name=default");
ThreadPoolMXBean mxbean = ManagementFactory.newPlatformMXBeanProxy(mbeanServer, objectName, ThreadPoolMXBean.class);
int activeThreadCount = mxbean.getActiveThreadCount();
```

**23. Using JMX Instrumentation for Memory Management**

```java
MBeanServer mbeanServer = MBeanServerFactory.createMBeanServer();
ObjectName objectName = new ObjectName(ManagementFactory.MEMORY_MANAGER_MXBEAN_DOMAIN_TYPE);
MemoryManagerMXBean mxbean = ManagementFactory.newPlatformMXBeanProxy(mbeanServer, objectName, MemoryManagerMXBean.class);
long memoryUsage = mxbean.getMemoryUsage();
```

**24. Using JMX Instrumentation for Garbage Collection**

```java
MBeanServer mbeanServer = MBeanServerFactory.createMBeanServer();
ObjectName objectName = new ObjectName(ManagementFactory.GARBAGE_COLLECTOR_MXBEAN_DOMAIN_TYPE + ",name=ParNew");
GarbageCollectorMXBean mxbean = ManagementFactory.newPlatformMXBeanProxy(mbeanServer, objectName, GarbageCollectorMXBean.class);
long collectionCount = mxbean.getCollectionCount();
```

**25. Using JMX Instrumentation for Class Loading**

```java
MBeanServer mbeanServer = MBeanServerFactory.createMBeanServer();
ObjectName objectName = new ObjectName(ManagementFactory.CLASS_LOADING_MXBEAN_DOMAIN_TYPE);
ClassLoadingMXBean mxbean = ManagementFactory.newPlatformMXBeanProxy(mbeanServer, objectName, ClassLoadingMXBean.class);
int loadedClassCount = mxbean.getLoadedClassCount();
```

**26. Using JMX Instrumentation for Compilation**

```java
MBeanServer mbeanServer = MBeanServerFactory.createMBeanServer();
ObjectName objectName = new ObjectName(ManagementFactory.COMPILATION_MXBEAN_DOMAIN_TYPE);
CompilationMXBean mxbean = ManagementFactory.newPlatformMXBeanProxy(mbeanServer, objectName, CompilationMXBean.class);
long totalCompileTime = mxbean.getTotalCompileTime();
```

**27. Using JMX Instrumentation for Operating System**

```java
MBeanServer mbeanServer = MBeanServerFactory.createMBeanServer();
ObjectName objectName = new ObjectName(ManagementFactory.OPERATING_SYSTEM_MXBEAN_DOMAIN_TYPE);
OperatingSystemMXBean mxbean = ManagementFactory.newPlatformMXBeanProxy(mbeanServer, objectName, OperatingSystemMXBean.class);
int availableProcessors = mxbean.getAvailableProcessors();
```

**28. Using JMX Instrumentation for Runtime**

```java
MBeanServer mbeanServer = MBeanServerFactory.createMBeanServer();
ObjectName objectName = new ObjectName(ManagementFactory.RUNTIME_MXBEAN_DOMAIN_TYPE);
RuntimeMXBean mxbean = ManagementFactory.newPlatformMXBeanProxy(mbeanServer, objectName, RuntimeMXBean.class);
long uptime = mxbean.getUptime();
```

**29. Using JMX Instrumentation for Thread Pool**

```java
MBeanServer mbeanServer = MBeanServerFactory.createMBeanServer();
ObjectName objectName = new ObjectName(ManagementFactory.THREAD_POOL_MXBEAN_DOMAIN_TYPE + ",name=default");
ThreadPoolMXBean mxbean = ManagementFactory.newPlatformMXBeanProxy(mbeanServer, objectName, ThreadPoolMXBean.class);
int activeThreadCount = mxbean.getActiveThreadCount();
```

**30. Using JMX Instrumentation for Memory Management**

```java
MBeanServer mbeanServer = MBeanServerFactory.createMBeanServer();
ObjectName objectName = new ObjectName(ManagementFactory.MEMORY_MANAGER_MXBEAN_DOMAIN_TYPE);
MemoryManagerMXBean mxbean = ManagementFactory.newPlatformMXBeanProxy(mbeanServer, objectName, MemoryManagerMXBean.class);
long memoryUsage = mxbean.getMemoryUsage();
```

**31. Using JMX Instrumentation for Garbage Collection**

```java
MBeanServer mbeanServer = MBeanServerFactory.createMBeanServer();
ObjectName objectName = new ObjectName(ManagementFactory.GARBAGE_COLLECTOR_MXBEAN_DOMAIN_TYPE + ",name=ParNew");
GarbageCollectorMXBean mxbean = ManagementFactory.newPlatformMXBeanProxy(mbeanServer, objectName, GarbageCollectorMXBean.class);
long collectionCount = mxbean.getCollectionCount();
```

**32. Using JMX Instrumentation for Class Loading**

```java
MBeanServer mbeanServer = MBeanServerFactory.createMBeanServer();
ObjectName objectName = new ObjectName(ManagementFactory.CLASS_LOADING_MXBEAN_DOMAIN_TYPE);
ClassLoadingMXBean mxbean = ManagementFactory.newPlatformMXBeanProxy(mbeanServer, objectName, ClassLoadingMXBean.class);
int loadedClassCount = mxbean.getLoadedClassCount();
```

**33. Using JMX Instrumentation for Compilation**

```java
MBeanServer mbeanServer = MBeanServerFactory.createMBeanServer();
ObjectName objectName = new ObjectName(ManagementFactory.COMPILATION_MXBEAN_DOMAIN_TYPE);
CompilationMXBean mxbean = ManagementFactory.newPlatformMXBeanProxy(mbeanServer, objectName, CompilationMXBean.class);
long totalCompileTime = mxbean.getTotalCompileTime();
```

**34. Using JMX Instrumentation for Operating System**

```java
MBeanServer mbeanServer = MBeanServerFactory.createMBeanServer();
ObjectName objectName = new ObjectName(ManagementFactory.OPERATING_SYSTEM_MXBEAN_DOMAIN_TYPE);
OperatingSystemMXBean mxbean = ManagementFactory.newPlatformMXBeanProxy(mbeanServer, objectName, OperatingSystemMXBean.class);
int availableProcessors = mxbean.getAvailableProcessors();
```

**35. Using JMX Instrumentation for Runtime**

```java
MBeanServer mbeanServer = MBeanServerFactory.createMBeanServer();
ObjectName objectName = new ObjectName(ManagementFactory.RUNTIME_MXBEAN_DOMAIN_TYPE);
RuntimeMXBean mxbean = ManagementFactory.newPlatformMXBeanProxy(mbeanServer, objectName, RuntimeMXBean.class);
long uptime = mxbean.getUptime();
```

**36. Using JMX Instrumentation for Thread Pool**

```java
MBeanServer mbeanServer = MBeanServerFactory.createMBeanServer();
ObjectName objectName = new ObjectName(ManagementFactory.THREAD_POOL_MXBEAN_DOMAIN_TYPE + ",name=default");
ThreadPoolMXBean mxbean = ManagementFactory.newPlatformMXBeanProxy(mbeanServer, objectName, ThreadPoolMXBean.class);
int activeThreadCount = mxbean.getActiveThreadCount();

```
