Red Hat Application Migration Toolkit
package com.googlecode.arit.websphere;
import com.github.veithen.rbeans.RBeanFactory;
import com.github.veithen.rbeans.RBeanFactoryException;
import com.googlecode.arit.mbeans.MBeanAccessor;
import com.googlecode.arit.mbeans.MBeanServerInspector;
import com.googlecode.arit.module.ModuleDescription;
import com.googlecode.arit.module.ModuleInspector;
import com.googlecode.arit.module.ModuleInspectorPlugin;
import com.googlecode.arit.module.ModuleStatus;
import com.googlecode.arit.module.ModuleType;
import com.googlecode.arit.websphere.AdminServiceFactoryRBean;
import com.googlecode.arit.websphere.CompoundClassLoaderRBean;
import com.googlecode.arit.websphere.DeployedApplicationRBean;
import com.googlecode.arit.websphere.DeployedObjectCollaboratorRBean;
import com.googlecode.arit.websphere.DeployedObjectRBean;
import com.googlecode.arit.websphere.Utils;
import com.googlecode.arit.websphere.WASModuleInspector;
import java.io.File;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.management.MBeanServer;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
import javax.management.QueryExp;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
public class WASModuleInspectorPlugin implements ModuleInspectorPlugin, InitializingBean {
@Autowired
private MBeanServerInspector mbsInspector;
@Autowired
@Qualifier("ear")
private ModuleType earModuleType;
@Autowired
@Qualifier("appwar")
private ModuleType appWarModuleType;
@Autowired
@Qualifier("war")
private ModuleType warModuleType;
private RBeanFactory rbf;
private MBeanServer mbs;
private MBeanAccessor mbeanAccessor;
private Map jmxNameMap = new HashMap();
public void afterPropertiesSet() throws Exception {
try {
this.rbf = new RBeanFactory(new Class[]{AdminServiceFactoryRBean.class, DeployedObjectCollaboratorRBean.class, CompoundClassLoaderRBean.class});
} catch (RBeanFactoryException var2) {
return;
}
this.mbs = ((AdminServiceFactoryRBean)this.rbf.createRBean(AdminServiceFactoryRBean.class)).getMBeanFactory().getMBeanServer();
this.mbeanAccessor = this.mbsInspector.inspect(this.mbs);
if(this.mbeanAccessor == null) {
throw new Error("Unable to inspect WebSphere\'s MBean server; this is unexpected because we are in a WebSphere specific plugin");
} else {
this.jmxNameMap.put(this.earModuleType, new ObjectName("WebSphere:type=Application,*"));
this.jmxNameMap.put(this.warModuleType, new ObjectName("WebSphere:type=WebModule,*"));
}
}
public boolean isAvailable() {
return this.rbf != null && this.mbeanAccessor != null;
}
private List getCollaborators(ObjectName query) {
Set names = this.mbs.queryNames(query, (QueryExp)null);
ArrayList collaborators = new ArrayList(names.size());
Iterator var4 = names.iterator();
while(var4.hasNext()) {
ObjectName name = (ObjectName)var4.next();
collaborators.add(this.rbf.createRBean(DeployedObjectCollaboratorRBean.class, this.mbeanAccessor.retrieve(name)));
}
return collaborators;
}
public ModuleInspector createModuleInspector() {
List earCollaborators;
List warCollaborators;
try {
earCollaborators = this.getCollaborators(new ObjectName("WebSphere:type=Application,*"));
warCollaborators = this.getCollaborators(new ObjectName("WebSphere:type=WebModule,*"));
} catch (MalformedObjectNameException var13) {
throw new Error("Failed to create object name", var13);
}
HashSet earClassLoaders = new HashSet();
Iterator appWarClassLoaders = earCollaborators.iterator();
while(appWarClassLoaders.hasNext()) {
DeployedObjectCollaboratorRBean moduleMap = (DeployedObjectCollaboratorRBean)appWarClassLoaders.next();
earClassLoaders.add(moduleMap.getDeployedObject().getClassLoader());
}
HashSet appWarClassLoaders1 = new HashSet();
Iterator moduleMap1 = warCollaborators.iterator();
while(moduleMap1.hasNext()) {
DeployedObjectCollaboratorRBean collaborator = (DeployedObjectCollaboratorRBean)moduleMap1.next();
ClassLoader collaborator1 = collaborator.getDeployedObject().getClassLoader();
if(earClassLoaders.contains(collaborator1)) {
appWarClassLoaders1.add(collaborator1);
}
}
HashMap moduleMap2 = new HashMap();
Iterator collaborator2 = earCollaborators.iterator();
while(true) {
ClassLoader classLoader1;
URL url;
DeployedObjectCollaboratorRBean collaborator3;
while(true) {
if(!collaborator2.hasNext()) {
collaborator2 = warCollaborators.iterator();
while(collaborator2.hasNext()) {
collaborator3 = (DeployedObjectCollaboratorRBean)collaborator2.next();
ClassLoader classLoader2 = collaborator3.getDeployedObject().getClassLoader();
if(!appWarClassLoaders1.contains(classLoader2)) {
moduleMap2.put(classLoader2, new ModuleDescription(this.warModuleType, collaborator3.getName(), classLoader2, Utils.dirToURL(Utils.getWebAppRoot((CompoundClassLoaderRBean)this.rbf.createRBean(CompoundClassLoaderRBean.class, classLoader2))), ModuleStatus.STARTED));
}
}
return new WASModuleInspector(this.rbf, moduleMap2, this.earModuleType, this.appWarModuleType, this.warModuleType);
}
collaborator3 = (DeployedObjectCollaboratorRBean)collaborator2.next();
DeployedObjectRBean classLoader = collaborator3.getDeployedObject();
classLoader1 = classLoader.getClassLoader();
if(classLoader instanceof DeployedApplicationRBean) {
String binariesURL = ((DeployedApplicationRBean)classLoader).getBinariesURL();
if(binariesURL != null) {
url = Utils.dirToURL(new File(binariesURL));
break;
}
CompoundClassLoaderRBean ccl = (CompoundClassLoaderRBean)this.rbf.createRBean(CompoundClassLoaderRBean.class, classLoader1);
if(!ccl.getProviders().iterator().hasNext()) {
continue;
}
url = Utils.dirToURL(Utils.getEARRoot(ccl));
break;
}
url = null;
break;
}
moduleMap2.put(classLoader1, new ModuleDescription(appWarClassLoaders1.contains(classLoader1)?this.appWarModuleType:this.earModuleType, collaborator3.getName(), classLoader1, url, ModuleStatus.STARTED));
}
}
}