Class ManagedObjectManagerImpl

java.lang.Object
org.glassfish.gmbal.impl.ManagedObjectManagerImpl
All Implemented Interfaces:
Closeable, AutoCloseable, ManagedObjectManagerInternal, ManagedObjectManager

public class ManagedObjectManagerImpl extends Object implements ManagedObjectManagerInternal
  • Field Details

  • Constructor Details

    • ManagedObjectManagerImpl

      private ManagedObjectManagerImpl(String domain, ObjectName rootParentName)
    • ManagedObjectManagerImpl

      public ManagedObjectManagerImpl(String domain)
    • ManagedObjectManagerImpl

      public ManagedObjectManagerImpl(ObjectName rootParentName)
  • Method Details

    • addAnnotationIfNotNull

      private void addAnnotationIfNotNull(AnnotatedElement elemement, Annotation annotation)
    • initializeStatisticsSupport

      private void initializeStatisticsSupport()
    • init

      private void init()
    • close

      public void close() throws IOException
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Throws:
      IOException
    • checkRootNotCreated

      private void checkRootNotCreated(String methodName)
    • checkRootCreated

      private void checkRootCreated(String methodName)
    • suspendJMXRegistration

      public void suspendJMXRegistration()
      Description copied from interface: ManagedObjectManager
      If called, no MBeans created after this call will be registered with the JMX MBeanServer until resumeJMXRegistration is called. Each call increments a counter, so that nested and overlapping calls from multiple threads work correctly. May be called at any time.
      Specified by:
      suspendJMXRegistration in interface ManagedObjectManager
    • resumeJMXRegistration

      public void resumeJMXRegistration()
      Description copied from interface: ManagedObjectManager
      Decrements the suspend counter, if the counter is greater than 0. When the counter goes to zero, it causes all MBeans created since a previous call to suspendJMXRegistration incremented the counter from 0 to 1 to be registered with the JMX MBeanServer. After this call, all new MBean registration calls to the JMX MBeanServer happen within the register call. May be called at any time.
      Specified by:
      resumeJMXRegistration in interface ManagedObjectManager
    • stripPackagePrefix

      public void stripPackagePrefix()
      Description copied from interface: ManagedObjectManager
      Change the default type name algorithm so that if nothing else applies, the entire package prefix is stripped form the Class name. Otherwise, the full Class name is the type.
      Specified by:
      stripPackagePrefix in interface ManagedObjectManager
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • getRootParentName

      public ObjectName getRootParentName()
      Specified by:
      getRootParentName in interface ManagedObjectManagerInternal
    • createRoot

      public GmbalMBean createRoot()
      Description copied from interface: ManagedObjectManager
      Create a default root MBean. One of the createRoot methods must be called before any of the registration methods may be called. Only one call to a createRoot method is permitted after an ManagedObjectManager is created.
      Specified by:
      createRoot in interface ManagedObjectManager
      Returns:
      A default root MBean which supports only the AMX attributes.
    • createRoot

      public GmbalMBean createRoot(Object root)
      Description copied from interface: ManagedObjectManager
      Create a root MBean from root, which much have a method with the @NameValue annotation. One of the createRoot methods must be called before any of the registration methods may be called. Only one call to createRoot is permitted after an ManagedObjectManager is created.
      Specified by:
      createRoot in interface ManagedObjectManager
      Parameters:
      root - The Java object to be used to construct the root.
      Returns:
      The newly constructed MBean.
    • createRoot

      public GmbalMBean createRoot(Object root, String name)
      Description copied from interface: ManagedObjectManager
      Create a root MBean from root with the given name. One of the createRoot methods must be called before any of the registration methods may be called. Only one call to createRoot is permitted after an ManagedObjectManager is created.
      Specified by:
      createRoot in interface ManagedObjectManager
      Parameters:
      root - The Java object to be used to construct the root.
      name - The ObjectName name field to be used in the ObjectName of the MBean constructed from root.
      Returns:
      The newly constructed MBean.
    • getRoot

      public Object getRoot()
      Description copied from interface: ManagedObjectManager
      Return the root of this ManagedObjectManager. May be called at any time.
      Specified by:
      getRoot in interface ManagedObjectManager
      Returns:
      the root constructed in a createRoot operation, or null if called before a createRoot call.
    • message

      @InfoMethod private void message(String msg)
    • describe

      @InfoMethod private void describe(String msg, Object data)
    • getSkeleton

      private MBeanSkeleton getSkeleton(EvaluatedClassDeclaration cls)
    • getTypeConverter

      public TypeConverter getTypeConverter(EvaluatedType type)
      Description copied from interface: ManagedObjectManagerInternal
      Construct or lookup the TypeConverter for the given type.
      Specified by:
      getTypeConverter in interface ManagedObjectManagerInternal
      Parameters:
      type - The type for which we need a TypeConverter.
      Returns:
      The type converter.
    • getDeclaredField

      private static Field getDeclaredField(Class<?> cls, String name) throws PrivilegedActionException, NoSuchFieldException
      Throws:
      PrivilegedActionException
      NoSuchFieldException
    • getAMXTypeFromField

      private String getAMXTypeFromField(Class<?> cls, String fieldName)
    • goodResult

      private boolean goodResult(String str)
    • getTypeName

      public String getTypeName(Class<?> cls, String fieldName, String nameFromAnnotation)
      Specified by:
      getTypeName in interface ManagedObjectManagerInternal
    • isManagedObject

      public boolean isManagedObject(Object obj)
      Description copied from interface: ManagedObjectManager
      Return true if object is assignment compatible with a class or interface that has an @ManagedObject annotation, otherwise false. Only such objects may be registered to create MBeans. May be called at any time.
      Specified by:
      isManagedObject in interface ManagedObjectManager
    • constructMBean

      public MBeanImpl constructMBean(MBeanImpl parentEntity, Object obj, String name)
      Specified by:
      constructMBean in interface ManagedObjectManagerInternal
    • register

      public GmbalMBean register(Object parent, Object obj, String name)
      Description copied from interface: ManagedObjectManager
      Construct an Open Mean for obj according to its annotations, and register it with domain getDomain() and the appropriate ObjectName. The MBeanServer from setMBeanServer (or its default) is used. Here parent is considered to contain obj, and this containment is represented by the construction of the ObjectName following the AMX specification for ObjectNames.

      The MBeanInfo for the result is actually ModelMBeanInfo, and may contain extra metadata as defined using annotations defined with the @DescriptorKey and @DescriptorField meta-annotations.

      Must be called after a successful createRoot call.

      This version of register should not be used to register singletons.

      Specified by:
      register in interface ManagedObjectManager
      Parameters:
      parent - The parent object that contains obj.
      obj - The managed object we are registering.
      name - The name to use for registering this object.
      Returns:
      The MBean constructed from obj.
    • register

      public GmbalMBean register(Object parent, Object obj)
      Description copied from interface: ManagedObjectManager
      Same as register( parent, obj, name ), but here the name is derived from an @NameValue annotation.

      This version of register should also be used to register singletons.

      Specified by:
      register in interface ManagedObjectManager
      Parameters:
      parent - The parent object that contains obj.
      obj - The managed object we are registering.
      Returns:
      The MBean constructed from obj.
    • registerAtRoot

      public GmbalMBean registerAtRoot(Object obj, String name)
      Description copied from interface: ManagedObjectManager
      Registers the MBean for obj at the root MBean for the ObjectManager, using the given name. Exactly the same as mom.register( mom.getRoot(), obj, name ).

      Must be called after a successful createRoot call.

      This version of register should not be used to register singletons.

      Specified by:
      registerAtRoot in interface ManagedObjectManager
      Parameters:
      obj - The object for which we construct and register an MBean.
      name - The name of the MBean.
      Returns:
      The MBean constructed from obj.
    • registerAtRoot

      public GmbalMBean registerAtRoot(Object obj)
      Description copied from interface: ManagedObjectManager
      Same as registerAtRoot( Object, String ), but here the name is derived from an @ObjectKeyName annotation. Exactly the same as mom.register( mom.getRoot(), obj ).

      This version of register should also be used to register singletons.

      Specified by:
      registerAtRoot in interface ManagedObjectManager
      Parameters:
      obj - The managed object we are registering.
      Returns:
      The MBean constructed from obj.
    • unregister

      public void unregister(Object obj)
      Description copied from interface: ManagedObjectManager
      Unregister the Open MBean corresponding to obj from the mbean server.

      Must be called after a successful createRoot call.

      Specified by:
      unregister in interface ManagedObjectManager
      Parameters:
      obj - The object originally passed to a register method.
    • getObjectName

      public ObjectName getObjectName(Object obj)
      Description copied from interface: ManagedObjectManager
      Get the ObjectName for the given object (which must have been registered via a register call).

      Must be called after a successful createRoot call.

      Specified by:
      getObjectName in interface ManagedObjectManager
      Parameters:
      obj - The object originally passed to a register call.
      Returns:
      The ObjectName used to register the MBean.
    • getAMXClient

      public AMXClient getAMXClient(Object obj)
      Description copied from interface: ManagedObjectManager
      Get an AMXClient instance for the object obj, if obj is registered as an MBean in this mom.

      Must be called after a successful createRoot call.

      Specified by:
      getAMXClient in interface ManagedObjectManager
      Parameters:
      obj - The object corresponding to an MBean.
      Returns:
      An AMXClient that acts as a proxy for this MBean.
    • getObject

      public Object getObject(ObjectName oname)
      Description copied from interface: ManagedObjectManager
      Get the Object that was registered with the given ObjectName. Note that getObject and getObjectName are inverse operations.

      Must be called after a successful createRoot call.

      Specified by:
      getObject in interface ManagedObjectManager
      Parameters:
      oname - The ObjectName used to register the object.
      Returns:
      The Object passed to the register call.
    • getFacetAccessor

      public org.glassfish.pfl.basic.facet.FacetAccessor getFacetAccessor(Object obj)
      Specified by:
      getFacetAccessor in interface ManagedObjectManagerInternal
    • getDomain

      public String getDomain()
      Description copied from interface: ManagedObjectManager
      Return the domain name that was used when this ManagedObjectManager was created. This is the JMX domain that will be used in all ObjectNames created by this ManagedObjectManager.

      May be called at any time.

      Specified by:
      getDomain in interface ManagedObjectManager
      Returns:
      Get the domain name for this ManagedObjectManager.
    • setMBeanServer

      public void setMBeanServer(MBeanServer server)
      Description copied from interface: ManagedObjectManager
      Set the MBeanServer to which all MBeans using this interface are published. The default value is java.lang.management.ManagementFactory.getPlatformMBeanServer().

      Must be called before a successful createRoot call.

      Specified by:
      setMBeanServer in interface ManagedObjectManager
      Parameters:
      server - The MBeanServer to set as the MBeanServer for this ManagedObjectManager.
    • getMBeanServer

      public MBeanServer getMBeanServer()
      Description copied from interface: ManagedObjectManager
      Get the current MBeanServer.

      May be called at any time.

      Specified by:
      getMBeanServer in interface ManagedObjectManager
      Returns:
      The current MBeanServer, either the default, or the value passed to setMBeanServer.
    • setResourceBundle

      public void setResourceBundle(ResourceBundle rb)
      Description copied from interface: ManagedObjectManager
      Set the ResourceBundle to use for getting localized descriptions. If not set, the description is the value in the annotation.

      Must be called before a successful call to a createRoot method.

      Specified by:
      setResourceBundle in interface ManagedObjectManager
      Parameters:
      rb - The resource bundle to use. May be null.
    • getResourceBundle

      public ResourceBundle getResourceBundle()
      Description copied from interface: ManagedObjectManager
      Get the resource bundle (if any) set by setResourceBundle.

      May be called at any time.

      Specified by:
      getResourceBundle in interface ManagedObjectManager
      Returns:
      The resource bundle set by setResourceBundle: may be null.
    • getDescription

      public String getDescription(EvaluatedDeclaration element)
      Specified by:
      getDescription in interface ManagedObjectManagerInternal
    • addAnnotation

      public void addAnnotation(AnnotatedElement element, Annotation annotation)
      Description copied from interface: ManagedObjectManager
      Method to add an annotation to an element that cannot be modified. This is typically needed when dealing with an implementation of an interface that is part of a standardized API, and so the interface cannot be annotated by modifiying the source code. In some cases the implementation of the interface also cannot be inherited, because the implementation is generated by a standardized code generator. Another possibility is that there are several different implementations of the standardized interface, and it is undesirable to annotate each implementation with @InheritedAttributes.
      Specified by:
      addAnnotation in interface ManagedObjectManager
      Parameters:
      element - The annotated element (class or method for our purposes).
      annotation - The annotation we wish to add to the element.
    • addInheritedAnnotations

      public void addInheritedAnnotations(Class<?> cls)
      Description copied from interface: ManagedObjectManager
      Add all annotations for this class as if they were declared on the inheritance parent(s) of the class (immediate superclass for a class, all immediate superinterfaces for an interface). Also add all method annotations for methods that override an inherited method. This acts as if all annotations on cls were actually applied to the immediate super class or interface.
      Specified by:
      addInheritedAnnotations in interface ManagedObjectManager
      Parameters:
      cls - Class to analyze for inherited annotations.
    • getFirstAnnotationOnClass

      public <T extends Annotation> T getFirstAnnotationOnClass(EvaluatedClassDeclaration element, Class<T> type)
      Specified by:
      getFirstAnnotationOnClass in interface ManagedObjectManagerInternal
    • getAllAnnotations

      private Map<Class,Annotation> getAllAnnotations(Class cls)
    • getAnnotation

      public <T extends Annotation> T getAnnotation(AnnotatedElement element, Class<T> type)
      Specified by:
      getAnnotation in interface ManagedObjectManagerInternal
    • getAnnotations

      public Collection<Annotation> getAnnotations(AnnotatedElement elem)
      Specified by:
      getAnnotations in interface ManagedObjectManagerInternal
    • getClassAnalyzer

      public org.glassfish.pfl.basic.contain.Pair<EvaluatedClassDeclaration,EvaluatedClassAnalyzer> getClassAnalyzer(EvaluatedClassDeclaration cls, Class<? extends Annotation> annotationClass)
      Description copied from interface: ManagedObjectManagerInternal
      Find the superclass or superinterface of cls (which may be cls itself) that has the given annotationClass as an annotation. If the annotated Class has an IncludeSubclass annotation, add those classes into the EvaluatedClassAnalyzer for the annotated class.
      Specified by:
      getClassAnalyzer in interface ManagedObjectManagerInternal
      Parameters:
      cls - The class for which we need a EvaluatedClassAnalyzer.
      annotationClass - The annotation that must be present on cls or a superclass or superinterface.
      Returns:
      A Pair of the parent class of cls, and the EvaluatedClassAnalyzer.
    • getInheritedAttributes

      public List<InheritedAttribute> getInheritedAttributes(EvaluatedClassAnalyzer ca)
      Description copied from interface: ManagedObjectManagerInternal
      Get the inherited attributes from the EvaluatedClassAnalyzer.
      Specified by:
      getInheritedAttributes in interface ManagedObjectManagerInternal
      Parameters:
      ca - The ClassAnalyzer to check for InheritedAttribute(s).
      Returns:
      The inherited attributes.
    • getAttributeDescriptorIfInherited

    • putIfNotPresent

      public <K, V> void putIfNotPresent(Map<K,V> map, K key, V value)
      Specified by:
      putIfNotPresent in interface ManagedObjectManagerInternal
    • checkFieldType

      static void checkFieldType(EvaluatedFieldDeclaration field)
    • getAttributes

      Specified by:
      getAttributes in interface ManagedObjectManagerInternal
    • setRegistrationDebug

      public void setRegistrationDebug(ManagedObjectManager.RegistrationDebugLevel level)
      Description copied from interface: ManagedObjectManager
      Print debug output to System.out.

      May be called at any time.

      Specified by:
      setRegistrationDebug in interface ManagedObjectManager
      Parameters:
      level - NONE is no debugging at all, NORMAL traces high-level construction of skeletons and type converters, and dumps results of new skeletons and type converters, FINE traces everything in great detail. The tracing is done with INFO-level logger calls. The logger name is that package name (org.glassfish.gmbal.impl).
    • setJMXRegistrationDebug

      public void setJMXRegistrationDebug(boolean flag)
      Description copied from interface: ManagedObjectManager
      Set debugging for JMX registrations. If true, all registrations and deregistrations with the MBeanServer are traced.
      Specified by:
      setJMXRegistrationDebug in interface ManagedObjectManager
      Parameters:
      flag - True to enalbed registration tracing.
    • setRuntimeDebug

      public void setRuntimeDebug(boolean flag)
      Description copied from interface: ManagedObjectManager
      Enable generation of debug log at INFO level for runtime MBean operations to the org.glassfish.gmbal.impl logger.

      May be called at any time.

      Specified by:
      setRuntimeDebug in interface ManagedObjectManager
      Parameters:
      flag - true to enable runtime debug, false to disable.
    • setTypelibDebug

      public void setTypelibDebug(int level)
      Description copied from interface: ManagedObjectManager
      Enabled generation of debug log for type evaluator debugging. This happens as part of the registration process for the first time a particular class is processed.

      May be called at any time.

      Specified by:
      setTypelibDebug in interface ManagedObjectManager
      Parameters:
      level - set to 1 to just see the results of the TypeEvaluator, >1 to see lots of details. WARNING: values >1 will result in a large amount of output.
    • dumpSkeleton

      public String dumpSkeleton(Object obj)
      Description copied from interface: ManagedObjectManager
      Dump the skeleton used in the implementation of the MBean for obj. Obj must be currently registered.

      Must be called after a successful call to a createRoot method.

      Specified by:
      dumpSkeleton in interface ManagedObjectManager
      Parameters:
      obj - The registered object whose skeleton should be displayed.
      Returns:
      The string representation of the skeleton.
    • registrationDebug

      public boolean registrationDebug()
      Specified by:
      registrationDebug in interface ManagedObjectManagerInternal
    • registrationFineDebug

      public boolean registrationFineDebug()
      Specified by:
      registrationFineDebug in interface ManagedObjectManagerInternal
    • runtimeDebug

      public boolean runtimeDebug()
      Specified by:
      runtimeDebug in interface ManagedObjectManagerInternal
    • jmxRegistrationDebug

      public boolean jmxRegistrationDebug()
      Specified by:
      jmxRegistrationDebug in interface ManagedObjectManagerInternal
    • stripPrefix

      public void stripPrefix(String... args)
      Description copied from interface: ManagedObjectManager
      Add a type prefix to strip from type names, to shorten the names for a better presentation to the user. This may only be called before a createRot method is called.
      Specified by:
      stripPrefix in interface ManagedObjectManager
      Parameters:
      args - Class package name to strip from type name.
    • forAnnotation

      public <T extends EvaluatedDeclaration> org.glassfish.pfl.basic.func.UnaryPredicate<T> forAnnotation(Class<? extends Annotation> annotation, Class<T> cls)
      Specified by:
      forAnnotation in interface ManagedObjectManagerInternal
    • getDefaultAMXMetadata

      public AMXMetadata getDefaultAMXMetadata()
      Specified by:
      getDefaultAMXMetadata in interface ManagedObjectManagerInternal
    • isAMXAttributeName

      public boolean isAMXAttributeName(String name)
      Specified by:
      isAMXAttributeName in interface ManagedObjectManagerInternal
    • suppressDuplicateRootReport

      public void suppressDuplicateRootReport(boolean suppressReport)
      Description copied from interface: ManagedObjectManager
      Suppress reporting of a duplicate root name. If this option is enabled, createRoot( Object ) and createRoot( Object, String ) will return null for a duplicate root name, otherwise a Gmbal error will be reported. Note that this applies ONLY to createRoot: the register methods are unaffected. Also note that any other errors that might occur on createRoot will be reported normally.

      Must be called before a successful call to a createRoot method.

      Specified by:
      suppressDuplicateRootReport in interface ManagedObjectManager
    • getObjectRegistrationManager

      public ObjectRegistrationManager getObjectRegistrationManager()
      Description copied from interface: ManagedObjectManager
      Return an ObjectRegistrationManager as required in the pfl timer services.

      Can be called at any time.

      Specified by:
      getObjectRegistrationManager in interface ManagedObjectManager