At a high level, what was the goal? Some description of what motivated the rewrite would be good.
-David On Mar 7, 2012, at 4:24 PM, [email protected] wrote: > Author: rmannibucau > Date: Wed Mar 7 22:24:07 2012 > New Revision: 1298167 > > URL: http://svn.apache.org/viewvc?rev=1298167&view=rev > Log: > rewriting the way we register @MBean. Using finder in ejbmodules, additional > libs and connector modules. Deploying in assembler (it deployed in config > phase). Better logging. > > Added: > > openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/mbeans/Parent.java > Modified: > > openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/AppInfo.java > > openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java > > openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ConnectorInfo.java > > openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarInfo.java > > openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java > > openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java > > openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppModule.java > > openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ClientModule.java > > openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/MBeanDeployer.java > > openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/Module.java > > openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/monitoring/DynamicMBeanWrapper.java > > openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/MBeanDeployerTest.java > > openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/mbeans/Inheritance.java > > openejb/trunk/openejb/examples/mbean-auto-registration/src/test/java/org/superbiz/mbean/GuessHowManyMBeanTest.java > > Modified: > openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/AppInfo.java > URL: > http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/AppInfo.java?rev=1298167&r1=1298166&r2=1298167&view=diff > ============================================================================== > --- > openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/AppInfo.java > (original) > +++ > openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/AppInfo.java > Wed Mar 7 22:24:07 2012 > @@ -18,7 +18,9 @@ package org.apache.openejb.assembler.cla > > import java.util.ArrayList; > import java.util.List; > +import java.util.Map; > import java.util.Set; > +import java.util.TreeMap; > import java.util.TreeSet; > > /** > @@ -39,5 +41,6 @@ public class AppInfo extends InfoObject > public final JndiEncInfo globalJndiEnc = new JndiEncInfo(); > public final JndiEncInfo appJndiEnc = new JndiEncInfo(); > public String cmpMappingsXml; > - public Set<String> jmx = new TreeSet<String>(); > + public Map<String, String> jmx = new TreeMap<String, String>(); > + public Set<String> mbeans = new TreeSet<String>(); > } > > Modified: > openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java > URL: > http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java?rev=1298167&r1=1298166&r2=1298167&view=diff > ============================================================================== > --- > openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java > (original) > +++ > openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java > Wed Mar 7 22:24:07 2012 > @@ -66,7 +66,9 @@ import org.apache.openejb.core.transacti > import org.apache.openejb.javaagent.Agent; > import org.apache.openejb.loader.Options; > import org.apache.openejb.loader.SystemInstance; > +import org.apache.openejb.monitoring.DynamicMBeanWrapper; > import org.apache.openejb.monitoring.LocalMBeanServer; > +import org.apache.openejb.monitoring.ObjectNameBuilder; > import org.apache.openejb.persistence.JtaEntityManagerRegistry; > import org.apache.openejb.persistence.PersistenceClassLoaderHandler; > import org.apache.openejb.resource.GeronimoConnectionManagerFactory; > @@ -95,6 +97,8 @@ import org.apache.xbean.recipe.ObjectRec > import org.apache.xbean.recipe.Option; > import org.apache.xbean.recipe.UnsetPropertiesRecipe; > > +import javax.enterprise.inject.spi.Bean; > +import javax.enterprise.inject.spi.BeanManager; > import javax.management.InstanceNotFoundException; > import javax.management.MBeanRegistrationException; > import javax.management.MBeanServer; > @@ -871,6 +875,21 @@ public class Assembler extends Assembler > containerSystemContext.rebind(path, value.getValue()); > } > > + // deploy MBeans > + for (String mbean : appInfo.mbeans) { > + deployMBean(appContext.getBeanManager(), classLoader, mbean, > appInfo.jmx, appInfo.appId); > + } > + for (EjbJarInfo ejbJarInfo : appInfo.ejbJars) { > + for (String mbean : ejbJarInfo.mbeans) { > + deployMBean(appContext.getBeanManager(), classLoader, > mbean, appInfo.jmx, ejbJarInfo.moduleName); > + } > + } > + for (ConnectorInfo connectorInfo : appInfo.connectors) { > + for (String mbean : connectorInfo.mbeans) { > + deployMBean(appContext.getBeanManager(), classLoader, > mbean, appInfo.jmx, appInfo.appId + ".add-lib"); > + } > + } > + > > logger.info("createApplication.success", appInfo.path); > > @@ -890,6 +909,33 @@ public class Assembler extends Assembler > } > } > > + private static void deployMBean(final BeanManager bm, final ClassLoader > cl, final String mbeanClass, final Map<String, String> appMbeans, final > String id) { > + final Class<?> clazz; > + try { > + clazz = cl.loadClass(mbeanClass); > + } catch (ClassNotFoundException e) { > + throw new OpenEJBRuntimeException(e); > + } > + final Set<Bean<?>> beans = bm.getBeans(clazz); > + final Bean bean = bm.resolve(beans); > + final Object instance = bm.getReference(bean, clazz, > bm.createCreationalContext(bean)); > + > + final MBeanServer server = LocalMBeanServer.get(); > + try { > + final ObjectName leaf = new > ObjectNameBuilder("openejb.user.mbeans") > + .set("group", clazz.getPackage().getName()) > + .set("application", id) > + .set("name", clazz.getSimpleName()) > + .build(); > + > + server.registerMBean(new DynamicMBeanWrapper(instance), leaf); > + appMbeans.put(mbeanClass, leaf.getCanonicalName()); > + logger.info("MBean(" + leaf.getCanonicalName() + ")"); > + } catch (Exception e) { > + logger.error("the mbean " + mbeanClass + " can't be registered", > e); > + } > + } > + > private void ensureWebBeansContext(AppContext appContext) { > WebBeansContext webBeansContext = > appContext.get(WebBeansContext.class); > if (webBeansContext == null) webBeansContext = > appContext.getWebBeansContext(); > @@ -1245,7 +1291,7 @@ public class Assembler extends Assembler > > // mbeans > MBeanServer server = LocalMBeanServer.get(); > - for (String objectName : appInfo.jmx) { > + for (String objectName : appInfo.jmx.values()) { > try { > ObjectName on = new ObjectName(objectName); > if (server.isRegistered(on)) { > > Modified: > openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ConnectorInfo.java > URL: > http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ConnectorInfo.java?rev=1298167&r1=1298166&r2=1298167&view=diff > ============================================================================== > --- > openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ConnectorInfo.java > (original) > +++ > openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ConnectorInfo.java > Wed Mar 7 22:24:07 2012 > @@ -36,4 +36,5 @@ public class ConnectorInfo extends Commo > public List<ResourceInfo> outbound = new ArrayList<ResourceInfo>(); > public List<MdbContainerInfo> inbound = new ArrayList<MdbContainerInfo>(); > public List<ResourceInfo> adminObject = new ArrayList<ResourceInfo>(); > + public Set<String> mbeans = new TreeSet<String>(); > } > > Modified: > openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarInfo.java > URL: > http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarInfo.java?rev=1298167&r1=1298166&r2=1298167&view=diff > ============================================================================== > --- > openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarInfo.java > (original) > +++ > openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarInfo.java > Wed Mar 7 22:24:07 2012 > @@ -56,4 +56,5 @@ public class EjbJarInfo extends CommonIn > > public BeansInfo beans; > public Set<String> repositories = new TreeSet<String>(); > + public Set<String> mbeans = new TreeSet<String>(); > } > > Modified: > openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java > URL: > http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java?rev=1298167&r1=1298166&r2=1298167&view=diff > ============================================================================== > --- > openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java > (original) > +++ > openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java > Wed Mar 7 22:24:07 2012 > @@ -1015,8 +1015,8 @@ public class AnnotationDeployer implemen > } > > /* > - * REST > - */ > + * REST > + */ > // get by annotations > webModule.getRestClasses().addAll(findRestClasses(webModule, > finder)); > // Applications with a default constructor > > Modified: > openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java > URL: > http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java?rev=1298167&r1=1298166&r2=1298167&view=diff > ============================================================================== > --- > openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java > (original) > +++ > openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java > Wed Mar 7 22:24:07 2012 > @@ -102,7 +102,7 @@ class AppInfoBuilder { > appInfo.path = appModule.getJarLocation(); > appInfo.standaloneModule = appModule.isStandaloneModule(); > appInfo.watchedResources.addAll(appModule.getWatchedResources()); > - appInfo.jmx = appModule.getMBeans(); > + appInfo.mbeans = appModule.getAdditionalLibMbeans(); > > if (appInfo.appId == null) throw new > IllegalArgumentException("AppInfo.appId cannot be null"); > if (appInfo.path == null) appInfo.path = appInfo.appId; > @@ -134,6 +134,7 @@ class AppInfoBuilder { > for (EjbModule ejbModule : appModule.getEjbModules()) { > try { > EjbJarInfo ejbJarInfo = > ejbJarInfoBuilder.buildInfo(ejbModule); > + ejbJarInfo.mbeans = ejbModule.getMbeans(); > > Map<String, EjbDeployment> deploymentsByEjbName = > ejbModule.getOpenejbJar().getDeploymentsByEjbName(); > > @@ -356,6 +357,7 @@ class AppInfoBuilder { > > connectorInfo.watchedResources.addAll(connectorModule.getWatchedResources()); > connectorInfo.validationInfo = > ValidatorBuilder.getInfo(connectorModule.getValidationConfig()); > connectorInfo.uniqueId = connectorModule.getUniqueId(); > + connectorInfo.mbeans = connectorModule.getMbeans(); > > List<URL> libraries = connectorModule.getLibraries(); > for (URL url : libraries) { > > Modified: > openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppModule.java > URL: > http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppModule.java?rev=1298167&r1=1298166&r2=1298167&view=diff > ============================================================================== > --- > openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppModule.java > (original) > +++ > openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppModule.java > Wed Mar 7 22:24:07 2012 > @@ -16,8 +16,6 @@ > */ > package org.apache.openejb.config; > > -import java.util.HashSet; > - > import org.apache.openejb.config.sys.Resource; > import org.apache.openejb.jee.Application; > import org.apache.openejb.jee.jpa.EntityMappings; > @@ -28,6 +26,7 @@ import java.net.URL; > import java.util.ArrayList; > import java.util.Collection; > import java.util.HashMap; > +import java.util.HashSet; > import java.util.List; > import java.util.Map; > import java.util.Properties; > @@ -55,7 +54,7 @@ public class AppModule implements Deploy > private final Map<String,Object> altDDs = new HashMap<String,Object>(); > private final Set<String> watchedResources = new TreeSet<String>(); > private final boolean standaloneModule; > - private Set<String> mBeans = new HashSet<String>(); > + private final Set<String> additionalLibMbeans = new TreeSet<String>(); > > private ID id; > > @@ -102,12 +101,8 @@ public class AppModule implements Deploy > this.standaloneModule = standaloneModule; > } > > - public Set<String> getMBeans() { > - return mBeans; > - } > - > - public void setMBeans(Set<String> mBeans) { > - this.mBeans = mBeans; > + public Set<String> getAdditionalLibMbeans() { > + return additionalLibMbeans; > } > > public boolean isStandaloneModule() { > > Modified: > openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ClientModule.java > URL: > http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ClientModule.java?rev=1298167&r1=1298166&r2=1298167&view=diff > ============================================================================== > --- > openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ClientModule.java > (original) > +++ > openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ClientModule.java > Wed Mar 7 22:24:07 2012 > @@ -17,17 +17,14 @@ > package org.apache.openejb.config; > > import org.apache.openejb.jee.ApplicationClient; > -import org.apache.openejb.jee.oejb3.OpenejbJar; > import org.apache.xbean.finder.IAnnotationFinder; > > +import java.io.File; > import java.net.URI; > -import java.util.Map; > -import java.util.HashMap; > +import java.util.HashSet; > import java.util.Set; > import java.util.TreeSet; > -import java.util.HashSet; > import java.util.concurrent.atomic.AtomicReference; > -import java.io.File; > > /** > * @version $Rev$ $Date$ > > Modified: > openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/MBeanDeployer.java > URL: > http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/MBeanDeployer.java?rev=1298167&r1=1298166&r2=1298167&view=diff > ============================================================================== > --- > openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/MBeanDeployer.java > (original) > +++ > openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/MBeanDeployer.java > Wed Mar 7 22:24:07 2012 > @@ -16,60 +16,52 @@ > */ > package org.apache.openejb.config; > > -import org.apache.openejb.OpenEJB; > import org.apache.openejb.OpenEJBException; > -import org.apache.openejb.api.internal.Internal; > -import org.apache.openejb.loader.SystemInstance; > -import org.apache.openejb.monitoring.DynamicMBeanWrapper; > -import org.apache.openejb.monitoring.LocalMBeanServer; > -import org.apache.openejb.monitoring.ObjectNameBuilder; > -import org.apache.openejb.util.AnnotationUtil; > import org.apache.openejb.util.LogCategory; > import org.apache.openejb.util.Logger; > -import org.apache.xbean.finder.ClassFinder; > +import org.apache.xbean.finder.Annotated; > +import org.apache.xbean.finder.AnnotationFinder; > +import org.apache.xbean.finder.IAnnotationFinder; > > import javax.management.MBean; > -import javax.management.MBeanServer; > -import javax.management.ObjectName; > import java.net.URL; > -import java.net.URLClassLoader; > import java.util.ArrayList; > -import java.util.Collections; > -import java.util.HashMap; > import java.util.Iterator; > import java.util.List; > -import java.util.Map; > -import java.util.Set; > -import java.util.TreeSet; > > public class MBeanDeployer implements DynamicDeployer { > private static final Logger logger = > Logger.getInstance(LogCategory.OPENEJB_STARTUP_CONFIG, MBeanDeployer.class); > - private static final MBeanServer server = LocalMBeanServer.get(); > > - private static final String OPENEJB_MBEAN_CLASSES_PROPERTY = > "openejb.user.mbeans.list"; > - private static final String OPENEJB_MBEAN_CLASSES_SPLIT = ","; > - private static final String OPENEJB_MBEAN_FORCE_FINDER = "*"; > + // mbeans ObjectNames are stored in the app since they are global and > that's easier > + // mbean classes themself are stored in modules since they depend only > on them > > - @Override public AppModule deploy(AppModule appModule) throws > OpenEJBException { > + @Override > + public AppModule deploy(AppModule appModule) throws OpenEJBException { > logger.debug("looking for annotated MBeans in " + > appModule.getModuleId()); > - Set<String> mbeans = new TreeSet<String>(); > + final List<String> done = new ArrayList<String>(); > + > + // there is an ejbmodule by webapp so we should't need to go through > the webapp > > - deploy(mbeans, appModule.getClassLoader(), appModule.getModuleId()); > - List<String> done = new ArrayList<String>(); > - for (WebModule webModule : appModule.getWebModules()) { > - deploy(mbeans, webModule.getClassLoader(), > webModule.getModuleId()); > - done.add(webModule.getJarLocation()); > - } > for (EjbModule ejbModule : appModule.getEjbModules()) { > - if (!done.contains(ejbModule.getJarLocation())) { > - deploy(mbeans, ejbModule.getClassLoader(), > ejbModule.getModuleId()); > - done.add(ejbModule.getJarLocation()); > + for (Annotated<Class<?>> clazz : > ejbModule.getFinder().findMetaAnnotatedClasses(MBean.class)) { > + final Class<?> realClass = clazz.get(); > + final String name = clazz.get().getName(); > + if (done.contains(name)) { > + continue; > + } > + > + ejbModule.getMbeans().add(name); > + done.add(name); > } > } > for (ClientModule clientModule : appModule.getClientModules()) { > - if (!done.contains(clientModule.getJarLocation())) { > - deploy(mbeans, clientModule.getClassLoader(), > clientModule.getModuleId()); > - done.add(clientModule.getJarLocation()); > + for (Annotated<Class<?>> clazz : > clientModule.getFinder().findMetaAnnotatedClasses(MBean.class)) { > + final String name = clazz.get().getName(); > + if (done.contains(name)) { > + continue; > + } > + > + clientModule.getMbeans().add(name); > } > } > > @@ -84,93 +76,18 @@ public class MBeanDeployer implements Dy > } > } > if (libs.size() > 0) { > - ClassLoader additionnalLibCl = new > URLClassLoader(libs.toArray(new URL[libs.size()])); > - deploy(mbeans, additionnalLibCl, appModule.getModuleId() + > ".add-lib"); > - } > - > - appModule.setMBeans(mbeans); > - logger.debug("registered " + mbeans.size() + " annotated MBeans in " > + appModule.getModuleId()); > - return appModule; > - } > - > - private static void deploy(Set<String> mbeans, ClassLoader cl, String > id) { > - if (cl == null) { > - return; > - } > - > - for (Map.Entry<Class<?>, ObjectName> mbean : getMbeanClasses(cl, > id).entrySet()) { > - ObjectName objectName = mbean.getValue(); > - try { > - server.registerMBean(new > DynamicMBeanWrapper(mbean.getKey()), objectName); > - mbeans.add(objectName.getCanonicalName()); > - logger.info("MBean " + objectName.getCanonicalName() + " > registered."); > - } catch (Exception e) { > - logger.error("the mbean " + mbean.getKey().getName() + " > can't be registered", e); > - } > - } > - } > - > - /** > - * if OPENEJB_MBEAN_FORCE_FINDER system property is set mbeans will be > searched from the class loader > - * otherwise the OPENEJB_MBEAN_CLASSES_PROPERTY system property will be > used. > - * > - * @param cl the classloader used > - * @param id application id > - * @return the list of mbean classes > - */ > - private static Map<Class<?>, ObjectName> getMbeanClasses(ClassLoader cl, > String id) { > - ClassLoader classLoader = cl; > - if (classLoader == null) { > - classLoader = Thread.currentThread().getContextClassLoader(); > - if (classLoader == null) { > - classLoader = OpenEJB.class.getClassLoader(); > - } > - } > - > - Map<Class<?>, ObjectName> mbeans = new HashMap<Class<?>, > ObjectName>(); > - > - String listProp = > SystemInstance.get().getOptions().get(OPENEJB_MBEAN_CLASSES_PROPERTY, > (String) null); > - if (OPENEJB_MBEAN_FORCE_FINDER.equals(listProp)) { // the > classfinder costs too much to be used by default > - logger.debug("loading mbeans using an annotation finder, you > should maybe adjust {0} system property", > - OPENEJB_MBEAN_CLASSES_PROPERTY); > - List<Class<?>> list = Collections.emptyList(); > - try { > - ClassFinder mbeanFinder = new ClassFinder(classLoader, true); > - list = mbeanFinder.findAnnotatedClasses(MBean.class); > - } catch (Exception e) { > - logger.error("can't find annotated MBean", e); > - } > - > - for (Class<?> clazz : list) { > - if (AnnotationUtil.getAnnotation(Internal.class, clazz) == > null) { > - mbeans.put(clazz, getObjectName(clazz, id)); > - } > - } > - } else if (listProp != null) { > - for (String name : listProp.replace(" ", > "").split(OPENEJB_MBEAN_CLASSES_SPLIT)) { > - name = name.trim(); > - try { > - Class<?> clazz = classLoader.loadClass(name); > - ObjectName objectName = getObjectName(clazz, id); > - if (!server.isRegistered(objectName)) { > - mbeans.put(clazz, objectName); > - } > - } catch (ClassNotFoundException ignore) { // it is maybe in > another classloader > - logger.debug("mbean not found in classloader " + > classLoader.toString() > - + ", we will try in the next app", ignore); > - } catch (NoClassDefFoundError ignore) { > - logger.debug("mbean not found in the current app", > ignore); > + // force descriptor for additinal libs since it shouldn't occur > often and can save some time > + final IAnnotationFinder finder = new AnnotationFinder(new > ConfigurableClasspathArchive(appModule.getClassLoader(), true, libs)); > + for (Annotated<Class<?>> clazz : > finder.findMetaAnnotatedClasses(MBean.class)) { > + final String name = clazz.get().getName(); > + if (done.contains(name)) { > + continue; > } > + > + appModule.getAdditionalLibMbeans().add(name); > } > } > - return mbeans; > - } > > - private static ObjectName getObjectName(Class<?> mBean, String id) { > - ObjectNameBuilder builder = new > ObjectNameBuilder("openejb.user.mbeans"); > - builder.set("group", mBean.getPackage().getName()); > - builder.set("application", id); > - builder.set("name", mBean.getSimpleName()); > - return builder.build(); > + return appModule; > } > } > > Modified: > openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/Module.java > URL: > http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/Module.java?rev=1298167&r1=1298166&r2=1298167&view=diff > ============================================================================== > --- > openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/Module.java > (original) > +++ > openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/Module.java > Wed Mar 7 22:24:07 2012 > @@ -20,7 +20,9 @@ import org.apache.openejb.config.sys.Res > import org.apache.openejb.jee.bval.ValidationConfigType; > > import java.util.HashMap; > +import java.util.HashSet; > import java.util.Map; > +import java.util.Set; > > public class Module { > private static int currentId = 1; // unique id to be able to bind > something for each module in the jndi tree > @@ -34,6 +36,7 @@ public class Module { > private String uniqueId = null; > private AppModule appModule = null; > private Resources resources = null; > + private final Set<String> mbeans = new HashSet<String>(); > > public Module(boolean needId) { > if (needId) { > @@ -103,4 +106,8 @@ public class Module { > > this.resources = resources; > } > + > + public Set<String> getMbeans() { > + return mbeans; > + } > } > > Modified: > openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/monitoring/DynamicMBeanWrapper.java > URL: > http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/monitoring/DynamicMBeanWrapper.java?rev=1298167&r1=1298166&r2=1298167&view=diff > ============================================================================== > --- > openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/monitoring/DynamicMBeanWrapper.java > (original) > +++ > openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/monitoring/DynamicMBeanWrapper.java > Wed Mar 7 22:24:07 2012 > @@ -16,15 +16,9 @@ > */ > package org.apache.openejb.monitoring; > > -import java.lang.reflect.InvocationTargetException; > -import java.lang.reflect.Method; > -import java.lang.reflect.Modifier; > -import java.util.ArrayList; > -import java.util.HashMap; > -import java.util.Iterator; > -import java.util.List; > -import java.util.Map; > -import java.util.ResourceBundle; > +import org.apache.openejb.util.LogCategory; > +import org.apache.openejb.util.Logger; > + > import javax.management.Attribute; > import javax.management.AttributeList; > import javax.management.AttributeNotFoundException; > @@ -43,8 +37,14 @@ import javax.management.ManagedOperation > import javax.management.NotificationInfo; > import javax.management.NotificationInfos; > import javax.management.ReflectionException; > -import org.apache.openejb.util.LogCategory; > -import org.apache.openejb.util.Logger; > +import java.lang.reflect.InvocationTargetException; > +import java.lang.reflect.Method; > +import java.lang.reflect.Modifier; > +import java.util.ArrayList; > +import java.util.HashMap; > +import java.util.List; > +import java.util.Map; > +import java.util.ResourceBundle; > > public class DynamicMBeanWrapper implements DynamicMBean { > public static final Logger logger = > Logger.getInstance(LogCategory.OPENEJB_DEPLOY, DynamicMBeanWrapper.class); > @@ -152,28 +152,11 @@ public class DynamicMBeanWrapper impleme > notificationInfos.toArray(new > MBeanNotificationInfo[notificationInfos.size()])); > } > > - public DynamicMBeanWrapper(Class<?> annotatedMBean) { > - this(instantiate(annotatedMBean)); > - } > - > - private static Object instantiate(Class<?> annotatedMBean) { > - try { > - return annotatedMBean.newInstance(); > - } catch (InstantiationException ie) { > - logger.error("can't instantiate " + annotatedMBean.getName(), > ie); > - throw new IllegalArgumentException(annotatedMBean.getName()); > - } catch (IllegalAccessException iae) { > - logger.error("can't instantiate " + annotatedMBean.getName(), > iae); > - throw new IllegalArgumentException(annotatedMBean.getName()); > - } > - } > - > private MBeanNotificationInfo getNotificationInfo(NotificationInfo n) { > String description = getDescription(n.description(), "-"); > - MBeanNotificationInfo ni = new MBeanNotificationInfo(n.types(), > + return new MBeanNotificationInfo(n.types(), > n.notificationClass().getName(), description, > new ImmutableDescriptor(n.descriptorFields())); > - return ni; > } > > private String getDescription(Description d, String defaultValue) { > @@ -251,10 +234,8 @@ public class DynamicMBeanWrapper impleme > @Override > public AttributeList setAttributes(AttributeList attributes) { > AttributeList list = new AttributeList(); > - Iterator<Object> it = attributes.iterator(); > - > - while (it.hasNext()) { > - Attribute attr = (Attribute) it.next(); > + for (Object o : attributes) { > + final Attribute attr = (Attribute) o; > try { > setAttribute(attr); > list.add(attr); > > Modified: > openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/MBeanDeployerTest.java > URL: > http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/MBeanDeployerTest.java?rev=1298167&r1=1298166&r2=1298167&view=diff > ============================================================================== > --- > openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/MBeanDeployerTest.java > (original) > +++ > openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/MBeanDeployerTest.java > Wed Mar 7 22:24:07 2012 > @@ -16,218 +16,148 @@ > */ > package org.apache.openejb.config; > > -import java.lang.management.ManagementFactory; > -import java.util.Scanner; > -import javax.management.Attribute; > -import javax.management.MBeanServer; > -import javax.management.ObjectName; > +import org.apache.openejb.assembler.classic.AppInfo; > import org.apache.openejb.assembler.classic.Assembler; > import org.apache.openejb.assembler.classic.ProxyFactoryInfo; > import org.apache.openejb.assembler.classic.SecurityServiceInfo; > import org.apache.openejb.assembler.classic.TransactionServiceInfo; > -import org.apache.openejb.config.AppModule; > -import org.apache.openejb.config.ConfigurationFactory; > -import org.apache.openejb.config.EjbModule; > +import org.apache.openejb.jee.Beans; > import org.apache.openejb.jee.EjbJar; > import org.apache.openejb.loader.SystemInstance; > +import org.apache.openejb.mbeans.Empty; > +import org.apache.openejb.mbeans.Inheritance; > +import org.apache.openejb.mbeans.MBeanDescription; > +import org.apache.openejb.mbeans.Operation; > +import org.apache.openejb.mbeans.OperationDescription; > +import org.apache.openejb.mbeans.Reader; > +import org.apache.openejb.mbeans.ReaderDescription; > +import org.apache.openejb.mbeans.ReaderWriter; > +import org.apache.openejb.monitoring.LocalMBeanServer; > import org.junit.After; > import org.junit.Before; > import org.junit.Test; > > +import javax.management.Attribute; > +import javax.management.MBeanServer; > +import javax.management.ObjectName; > +import java.util.Arrays; > +import java.util.HashSet; > +import java.util.Set; > + > import static junit.framework.Assert.assertEquals; > import static junit.framework.Assert.assertTrue; > > -/** > - * Note: each MBeans are at least deployed twice (using old and spec module > name). > - * > - * openejb.user.mbeans.list=org.apache.openejb.mbeans.Empty, > - * org.apache.openejb.mbeans.Inheritance, > - * org.apache.openejb.mbeans.MBeanDescription, > - * org.apache.openejb.mbeans.MBeanNotificationlistener, > - * org.apache.openejb.mbeans.MultipleNotifications, > - * org.apache.openejb.mbeans.Notificater, > - * org.apache.openejb.mbeans.Operation, > - * org.apache.openejb.mbeans.OperationDescription, > - * org.apache.openejb.mbeans.Reader, > - * org.apache.openejb.mbeans.ReaderWriter, > - * org.apache.openejb.mbeans.ReaderDescription > - */ > public class MBeanDeployerTest { > - private static final MBeanServer server = > ManagementFactory.getPlatformMBeanServer(); > - private static final String LIST_PROPR = "openejb.user.mbeans.list"; > + private static final MBeanServer server = LocalMBeanServer.get(); > + > + private AppModule appModule; > + private Assembler assembler; > + private ConfigurationFactory config; > + private AppInfo appInfo; > > - private static AppModule appModule; > - private static Assembler assembler; > - private static ConfigurationFactory config; > - > - /** > - * needs properties so it is not done in a @Before > - * because SystemInstance.get().setProperty(LIST_PROPR, ...) is done in > @Test methods. > - */ > - private void startOpenEJB() throws Exception { > + @Before > + public void startOpenEJB() throws Exception { > config = new ConfigurationFactory(); > assembler = new Assembler(); > > assembler.createProxyFactory(config.configureService(ProxyFactoryInfo.class)); > > assembler.createTransactionManager(config.configureService(TransactionServiceInfo.class)); > > assembler.createSecurityService(config.configureService(SecurityServiceInfo.class)); > > - EjbJar ejbJar = new EjbJar(); > - EjbModule ejbModule = new EjbModule(ejbJar); > + final EjbJar ejbJar = new EjbJar(); > + final EjbModule ejbModule = new EjbModule(ejbJar); > + ejbModule.setBeans(new Beans()); > + ejbModule.setModuleId("mbeans-test"); > + > + for (Class<?> clazz : Arrays.asList(Operation.class, > OperationDescription.class, > + Reader.class, ReaderWriter.class, ReaderDescription.class, > + Empty.class, Inheritance.class, MBeanDescription.class)) { > + ejbModule.getBeans().addManagedClass(clazz); > + ejbModule.getMbeans().add(clazz.getName()); > + } > > appModule = new AppModule(ejbModule.getClassLoader(), "mbeans"); > appModule.getEjbModules().add(ejbModule); > - assembler.createApplication(config.configureApplication(appModule)); > + appInfo = config.configureApplication(appModule); > + assembler.createApplication(appInfo); > } > > - @After public void resetList() { > + @After > + public void resetList() { > assembler.destroy(); > SystemInstance.reset(); > } > > - @Test public void empty() throws Exception { > - SystemInstance.get().setProperty(LIST_PROPR, > "org.apache.openejb.mbeans.Empty"); > - startOpenEJB(); > - > - assertEquals(2, appModule.getMBeans().size()); > - > - ObjectName on = new > ObjectName(appModule.getMBeans().iterator().next()); > - String cn = on.getCanonicalName(); > - assertTrue(cn.startsWith("openejb.user.mbeans")); > - assertTrue(cn.contains("group=org.apache.openejb.mbeans")); > - assertTrue(cn.contains("application=mbeans") || > cn.contains("application=EjbModule")); > - assertTrue(cn.contains("name=Empty")); > - assertTrue(server.isRegistered(on)); > - } > - > - @Test public void reader() throws Exception { > - SystemInstance.get().setProperty(LIST_PROPR, > "org.apache.openejb.mbeans.Reader"); > - startOpenEJB(); > - > - assertEquals(2, appModule.getMBeans().size()); > - String cn = appModule.getMBeans().iterator().next(); > - ObjectName on = new ObjectName(cn); > - assertTrue(cn.startsWith("openejb.user.mbeans")); > - assertTrue(cn.contains("group=org.apache.openejb.mbeans")); > - assertTrue(cn.contains("application=mbeans") || > cn.contains("application=EjbModule")); > - assertTrue(cn.contains("name=Reader")); > - assertTrue(server.isRegistered(on)); > - assertEquals(2, server.getAttribute(on, "value")); > - } > - > - @Test public void writer() throws Exception { > - SystemInstance.get().setProperty(LIST_PROPR, > "org.apache.openejb.mbeans.ReaderWriter"); > - startOpenEJB(); > - > - assertEquals(2, appModule.getMBeans().size()); > - String cn = appModule.getMBeans().iterator().next(); > - ObjectName on = new ObjectName(cn); > assertTrue(cn.startsWith("openejb.user.mbeans")); > - assertTrue(cn.contains("group=org.apache.openejb.mbeans")); > - assertTrue(cn.contains("application=mbeans") || > cn.contains("application=EjbModule")); > - assertTrue(cn.contains("name=ReaderWriter")); > - assertTrue(server.isRegistered(on)); > - assertEquals(2, server.getAttribute(on, "value")); > - server.setAttribute(on, new Attribute("value", 5)); > - assertEquals(5, server.getAttribute(on, "value")); > - } > - > - @Test public void emptyAndReader() throws Exception { > - SystemInstance.get().setProperty(LIST_PROPR, > "org.apache.openejb.mbeans.Empty,org.apache.openejb.mbeans.Reader"); > - startOpenEJB(); > - > - assertEquals(4, appModule.getMBeans().size()); > - for (String cn : appModule.getMBeans()) { > - ObjectName on = new ObjectName(cn); > - assertTrue(cn.startsWith("openejb.user.mbeans")); > - assertTrue(cn.contains("group=org.apache.openejb.mbeans")); > - assertTrue(cn.contains("application=mbeans") || > cn.contains("application=EjbModule")); > - assertTrue(cn.contains("name=Reader") || > cn.contains("name=Empty")); > - assertTrue(server.isRegistered(on)); > + @Test > + public void mbeans() throws Exception { > + final Set<String> parsed = new HashSet<String>(); > + for (String name : appInfo.jmx.values()) { > + final ObjectName on = new ObjectName(name); > + final String cn = on.getCanonicalName(); > + if (cn.contains("name=Empty")) { > + assertTrue(cn.startsWith("openejb.user.mbeans")); > + assertTrue(cn.contains("group=org.apache.openejb.mbeans")); > + assertTrue(cn.contains("application=mbeans") || > cn.contains("application=EjbModule")); > + assertTrue(server.isRegistered(on)); > + parsed.add(cn); > + } else if (cn.contains("name=Reader")) { > + assertTrue(cn.startsWith("openejb.user.mbeans")); > + assertTrue(cn.contains("group=org.apache.openejb.mbeans")); > + assertTrue(cn.contains("application=mbeans") || > cn.contains("application=EjbModule")); > + assertTrue(server.isRegistered(on)); > + assertEquals(2, server.getAttribute(on, "value")); > + parsed.add(cn); > + } else if (cn.contains("name=ReaderWriter")) { > + assertTrue(cn.contains("group=org.apache.openejb.mbeans")); > + assertTrue(cn.contains("application=mbeans") || > cn.contains("application=EjbModule")); > + assertTrue(server.isRegistered(on)); > + assertEquals(2, server.getAttribute(on, "value")); > + server.setAttribute(on, new Attribute("value", 5)); > + assertEquals(5, server.getAttribute(on, "value")); > + parsed.add(cn); > + } else if (cn.contains("name=Inheritance")) { > + assertTrue(cn.startsWith("openejb.user.mbeans")); > + assertTrue(cn.contains("group=org.apache.openejb.mbeans")); > + assertTrue(cn.contains("application=mbeans") || > cn.contains("application=EjbModule")); > + assertTrue(server.isRegistered(on)); > + assertEquals(2, server.getAttribute(on, "value")); > + server.setAttribute(on, new Attribute("value", 5)); > + assertEquals(5, server.getAttribute(on, "value")); > + assertEquals("yes - no", server.invoke(on, "returnValue", > null, null)); > + parsed.add(cn); > + } else if (cn.contains("name=MBeanDescription")) { > + assertTrue(cn.startsWith("openejb.user.mbeans")); > + assertTrue(cn.contains("group=org.apache.openejb.mbeans")); > + assertTrue(cn.contains("application=mbeans") || > cn.contains("application=EjbModule")); > + assertTrue(server.isRegistered(on)); > + assertEquals("descr ;)", > server.getMBeanInfo(on).getDescription()); > + parsed.add(cn); > + } else if (cn.contains("name=Operation")) { > + assertTrue(cn.startsWith("openejb.user.mbeans")); > + assertTrue(cn.contains("group=org.apache.openejb.mbeans")); > + assertTrue(cn.contains("application=mbeans") || > cn.contains("application=EjbModule")); > + assertTrue(server.isRegistered(on)); > + assertEquals("yes - no", server.invoke(on, "returnValue", > null, null)); > + parsed.add(cn); > + } else if (cn.contains("name=ReaderDescription")) { > + assertTrue(cn.startsWith("openejb.user.mbeans")); > + assertTrue(cn.contains("group=org.apache.openejb.mbeans")); > + assertTrue(cn.contains("application=mbeans") || > cn.contains("application=EjbModule")); > + assertTrue(cn.contains("name=ReaderDescription")); > + assertTrue(server.isRegistered(on)); > + assertEquals(1, > server.getMBeanInfo(on).getAttributes().length); > + assertEquals("just a value", > server.getMBeanInfo(on).getAttributes()[0].getDescription()); > + parsed.add(cn); > + } else if (cn.contains("name=OperationDescription")) { > + assertTrue(cn.startsWith("openejb.user.mbeans")); > + assertTrue(cn.contains("group=org.apache.openejb.mbeans")); > + assertTrue(cn.contains("application=mbeans") || > cn.contains("application=EjbModule")); > + assertTrue(server.isRegistered(on)); > + assertEquals(1, > server.getMBeanInfo(on).getOperations().length); > + assertEquals("just an op", > server.getMBeanInfo(on).getOperations()[0].getDescription()); > + parsed.add(cn); > + } > } > - } > - > - @Test public void inheritance() throws Exception { > - SystemInstance.get().setProperty(LIST_PROPR, > "org.apache.openejb.mbeans.Inheritance"); > - startOpenEJB(); > - > - assertEquals(2, appModule.getMBeans().size()); > - > - String cn = appModule.getMBeans().iterator().next(); > - ObjectName on = new ObjectName(cn); > - assertTrue(cn.startsWith("openejb.user.mbeans")); > - assertTrue(cn.contains("group=org.apache.openejb.mbeans")); > - assertTrue(cn.contains("application=mbeans") || > cn.contains("application=EjbModule")); > - assertTrue(cn.contains("name=Inheritance")); > - assertTrue(server.isRegistered(on)); > - assertEquals(2, server.getAttribute(on, "value")); > - server.setAttribute(on, new Attribute("value", 5)); > - assertEquals(5, server.getAttribute(on, "value")); > - assertEquals("yes - no", server.invoke(on, "returnValue", null, > null)); > - } > - > - @Test public void description() throws Exception { > - SystemInstance.get().setProperty(LIST_PROPR, > "org.apache.openejb.mbeans.MBeanDescription"); > - startOpenEJB(); > - > - assertEquals(2, appModule.getMBeans().size()); > - > - String cn = appModule.getMBeans().iterator().next(); > - ObjectName on = new ObjectName(cn); > - assertTrue(cn.startsWith("openejb.user.mbeans")); > - assertTrue(cn.contains("group=org.apache.openejb.mbeans")); > - assertTrue(cn.contains("application=mbeans") || > cn.contains("application=EjbModule")); > - assertTrue(cn.contains("name=MBeanDescription")); > - assertTrue(server.isRegistered(on)); > - assertEquals("descr ;)", server.getMBeanInfo(on).getDescription()); > - } > - > - @Test public void operation() throws Exception { > - SystemInstance.get().setProperty(LIST_PROPR, > "org.apache.openejb.mbeans.Operation"); > - startOpenEJB(); > - > - assertEquals(2, appModule.getMBeans().size()); > - > - String cn = appModule.getMBeans().iterator().next(); > - ObjectName on = new ObjectName(cn); > - assertTrue(cn.startsWith("openejb.user.mbeans")); > - assertTrue(cn.contains("group=org.apache.openejb.mbeans")); > - assertTrue(cn.contains("application=mbeans") || > cn.contains("application=EjbModule")); > - assertTrue(cn.contains("name=Operation")); > - assertTrue(server.isRegistered(on)); > - assertEquals("yes - no", server.invoke(on, "returnValue", null, > null)); > - } > - > - @Test public void readerDescription() throws Exception { > - SystemInstance.get().setProperty(LIST_PROPR, > "org.apache.openejb.mbeans.ReaderDescription"); > - startOpenEJB(); > - > - assertEquals(2, appModule.getMBeans().size()); > - > - String cn = appModule.getMBeans().iterator().next(); > - ObjectName on = new ObjectName(cn); > - assertTrue(cn.startsWith("openejb.user.mbeans")); > - assertTrue(cn.contains("group=org.apache.openejb.mbeans")); > - assertTrue(cn.contains("application=mbeans") || > cn.contains("application=EjbModule")); > - assertTrue(cn.contains("name=ReaderDescription")); > - assertTrue(server.isRegistered(on)); > - assertEquals(1, server.getMBeanInfo(on).getAttributes().length); > - assertEquals("just a value", > server.getMBeanInfo(on).getAttributes()[0].getDescription()); > - } > - > - @Test public void operationDescription() throws Exception { > - SystemInstance.get().setProperty(LIST_PROPR, > "org.apache.openejb.mbeans.OperationDescription"); > - startOpenEJB(); > - > - assertEquals(2, appModule.getMBeans().size()); > - > - String cn = appModule.getMBeans().iterator().next(); > - ObjectName on = new ObjectName(cn); > - assertTrue(cn.startsWith("openejb.user.mbeans")); > - assertTrue(cn.contains("group=org.apache.openejb.mbeans")); > - assertTrue(cn.contains("application=mbeans") || > cn.contains("application=EjbModule")); > - assertTrue(cn.contains("name=OperationDescription")); > - assertTrue(server.isRegistered(on)); > - assertEquals(1, server.getMBeanInfo(on).getOperations().length); > - assertEquals("just an op", > server.getMBeanInfo(on).getOperations()[0].getDescription()); > + assertEquals(8, parsed.size()); > } > } > > > Modified: > openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/mbeans/Inheritance.java > URL: > http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/mbeans/Inheritance.java?rev=1298167&r1=1298166&r2=1298167&view=diff > ============================================================================== > --- > openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/mbeans/Inheritance.java > (original) > +++ > openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/mbeans/Inheritance.java > Wed Mar 7 22:24:07 2012 > @@ -18,10 +18,11 @@ package org.apache.openejb.mbeans; > > import javax.management.Description; > import javax.management.MBean; > +import javax.management.ManagedAttribute; > import javax.management.ManagedOperation; > > @MBean > -public class Inheritance extends ReaderWriter { > +public class Inheritance extends Parent { > @ManagedOperation @Description("just an op") public String > returnValue() { > return "yes - no"; > } > > Added: > openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/mbeans/Parent.java > URL: > http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/mbeans/Parent.java?rev=1298167&view=auto > ============================================================================== > --- > openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/mbeans/Parent.java > (added) > +++ > openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/mbeans/Parent.java > Wed Mar 7 22:24:07 2012 > @@ -0,0 +1,21 @@ > +package org.apache.openejb.mbeans; > + > +import javax.management.Description; > +import javax.management.ManagedAttribute; > + > +// simply a copy of ReaderWriter but abstract to avoid CDI conflict > +public abstract class Parent { > + private int i = -1; > + > + @ManagedAttribute > + @Description("just a value") public int getValue() { > + if (i < 0) { > + return 2; > + } > + return i; > + } > + > + @ManagedAttribute public void setValue(int v) { > + i = v; > + } > +} > > Modified: > openejb/trunk/openejb/examples/mbean-auto-registration/src/test/java/org/superbiz/mbean/GuessHowManyMBeanTest.java > URL: > http://svn.apache.org/viewvc/openejb/trunk/openejb/examples/mbean-auto-registration/src/test/java/org/superbiz/mbean/GuessHowManyMBeanTest.java?rev=1298167&r1=1298166&r2=1298167&view=diff > ============================================================================== > --- > openejb/trunk/openejb/examples/mbean-auto-registration/src/test/java/org/superbiz/mbean/GuessHowManyMBeanTest.java > (original) > +++ > openejb/trunk/openejb/examples/mbean-auto-registration/src/test/java/org/superbiz/mbean/GuessHowManyMBeanTest.java > Wed Mar 7 22:24:07 2012 > @@ -20,7 +20,6 @@ import org.junit.Test; > > import javax.ejb.embeddable.EJBContainer; > import javax.management.Attribute; > -import javax.management.MBeanInfo; > import javax.management.MBeanServer; > import javax.management.ObjectName; > import java.lang.management.ManagementFactory; > @@ -34,12 +33,10 @@ public class GuessHowManyMBeanTest { > @Test > public void play() throws Exception { > Properties properties = new Properties(); > - properties.setProperty("openejb.user.mbeans.list", > GuessHowManyMBean.class.getName()); > EJBContainer container = EJBContainer.createEJBContainer(properties); > > MBeanServer server = ManagementFactory.getPlatformMBeanServer(); > ObjectName objectName = new ObjectName(OBJECT_NAME); > - MBeanInfo infos = server.getMBeanInfo(objectName); > assertEquals(0, server.getAttribute(objectName, "value")); > server.setAttribute(objectName, new Attribute("value", 3)); > assertEquals(3, server.getAttribute(objectName, "value")); > > >
