My favorites | Sign in
Project Home Downloads Wiki Issues Source
Checkout   Browse   Changes    
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package fr.xebia.aop;

import java.util.Hashtable;

import javax.management.MBeanServer;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;

import org.springframework.jmx.export.MBeanExporter;
import org.springframework.jmx.export.assembler.InterfaceBasedMBeanInfoAssembler;
import org.springframework.jmx.export.naming.ObjectNamingStrategy;
import org.springframework.jmx.support.MBeanServerFactoryBean;
import org.springframework.jmx.support.ObjectNameManager;
import org.springframework.util.ClassUtils;

/**
* This Aspect exposes all the classes implementing ManagedBean as JMX MBean
* @author Benoit Moussaud
*
*/
public aspect Management {

public interface ManagedBean {
public boolean isEnabled();

public void setEnabled(boolean enabled);
}

private pointcut managedBeanConstruction(ManagedBean bean) :
execution(ManagedBean+.new(..)) && this(bean);

after(ManagedBean bean) returning: managedBeanConstruction(bean) {
ObjectName registered = getMBeanExporter()
.registerManagedResource(bean);
System.out.println("Bean " + bean
+ " is exposed with this object name " + registered);
}

declare parents: PerfMonitor implements ManagedBean;

private MBeanExporter getMBeanExporter() {
//Spring Framework Stuff...
MBeanServerFactoryBean server = new MBeanServerFactoryBean();
server.setLocateExistingServerIfPossible(true);
server.afterPropertiesSet();

InterfaceBasedMBeanInfoAssembler assembler = new InterfaceBasedMBeanInfoAssembler();
assembler.setManagedInterfaces(new Class[] { ManagedBean.class });

MBeanExporter exporter = new MBeanExporter();
exporter.setNamingStrategy(new ObjectNamingStrategy() {

@SuppressWarnings("unchecked")
public ObjectName getObjectName(Object managedBean, String beanKey)
throws MalformedObjectNameException {
Hashtable keys = new Hashtable();
String shortName = ClassUtils.getShortName(managedBean
.getClass());
keys.put("Name", shortName);
keys.put("Type", "Monitor");
return ObjectNameManager.getInstance("xebia", keys);

}
});
exporter.setServer((MBeanServer) server.getObject());
exporter.setAutodetectMode(MBeanExporter.AUTODETECT_NONE);
exporter.setEnsureUniqueRuntimeObjectNames(false);
exporter.setAssembler(assembler);
exporter.afterPropertiesSet();

return exporter;
}

}

Change log

r61 by bmoussaud on Mar 13, 2008   Diff
Initial Import of aop aspect-exposed-by-
jmx project to SVN
Go to: 
Sign in to write a code review

Older revisions

All revisions of this file

File info

Size: 2449 bytes, 74 lines
Powered by Google Project Hosting