Get ahold of WebSphere's admin service
Code:
<bean id="adminService" class="com.ibm.websphere.management.AdminServiceFactory" factory-method="getAdminService"/>
Get the bits from the admin service needed for the object name.
Code:
<bean id="adminService.defaultDomain" class="org.springframework.beans.factory.config.PropertyPathFactoryBean"/>
<bean id="adminService.cellName" class="org.springframework.beans.factory.config.PropertyPathFactoryBean"/>
<bean id="adminService.nodeName" class="org.springframework.beans.factory.config.PropertyPathFactoryBean"/>
<bean id="adminService.processName" class="org.springframework.beans.factory.config.PropertyPathFactoryBean"/>
Create the WebSphere object naming strategy
Code:
<bean id="websphereNamingStrategy" class="WebsphereNamingStrategy">
<property name="domainName" ref="adminService.defaultDomain"/>
<property name="cellName" ref="adminService.cellName"/>
<property name="nodeName" ref="adminService.nodeName"/>
<property name="processName" ref="adminService.processName"/>
</bean>
Export someBean with using the WebSphere object naming strategy.
Code:
<bean id="beanExporter" class="org.springframework.jmx.export.MBeanExporter">
<property name="beans">
<map>
<entry key="someBean" value-ref="someBean"/>
</map>
</property>
<property name="namingStrategy" ref="websphereNamingStrategy"/>
</bean>
WebSphere Object Naming Strategy. Creates an object name with the WebSphere required bits.
Code:
public class WebsphereNamingStrategy implements ObjectNamingStrategy
{
private String domainName;
private String cellName;
private String nodeName;
private String processName;
public ObjectName getObjectName(Object object, String name)
throws MalformedObjectNameException
{
StringBuffer objectName = new StringBuffer();
objectName.append(domainName);
objectName.append(":cell=");
objectName.append(cellName);
objectName.append(",name=");
objectName.append(name);
objectName.append(",type=");
objectName.append(ClassUtils.getShortName(object.getClass()));
objectName.append(",node=");
objectName.append(nodeName);
objectName.append(",process=");
objectName.append(processName);
return ObjectNameManager.getInstance(objectName.toString());
}
public String getCellName()
{
return cellName;
}
public void setCellName(String cellName)
{
this.cellName = cellName;
}
public String getDomainName()
{
return domainName;
}
public void setDomainName(String domainName)
{
this.domainName = domainName;
}
public String getNodeName()
{
return nodeName;
}
public void setNodeName(String nodeName)
{
this.nodeName = nodeName;
}
public String getProcessName()
{
return processName;
}
public void setProcessName(String processName)
{
this.processName = processName;
}
}