You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomee.apache.org by Romain Manni-Bucau <rm...@gmail.com> on 2012/03/09 09:09:30 UTC

Re: svn commit: r1298167 - in /openejb/trunk/openejb: container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ container/openejb-core/src/main/java/org/apache/openejb/config/ container/openejb-core/src/main/java/org/apache/openejb/m

mbean deployment was completely done in the config phase -> was not good

today some parsing is done in deploy phase (MBean annotation parsing is
done in the assembler), it should probably be moved to the config phase but
that's not important for now since it is not linked to other stuff

the goal was mainly to make the bean really managed by cdi and get a better
config phase

- Romain


2012/3/9 David Blevins <da...@gmail.com>

> 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, rmannibucau@apache.org 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"));
> >
> >
> >
>
>