La création d'un bean géré en Java
Je suis en train de faire une classe implémente une Interface de MBean afin que je puisse interroger les propriétés à l'exécution. La classe je suis en train de les interroger est comme suit
public class ProfileCache implements ProfileCacheInterfaceMBean{
private Logger logger = Logger.getLogger(ProfileCache.class);
private ConcurrentMap<String, Profile> cache;
public ProfileCache(ConcurrentMap<String, Profile> cache){
this.cache = cache;
}
/**
* Update the cache entry for a given user id
* @param userid the user id to update for
* @param profile the new profile to store
* @return true if the cache update
*/
public boolean updateCache(String userid, Profile profile) {
if (cache == null || cache.size() == 0) {
throw new RuntimeException("Unable to update the cache");
}
if (cache.containsKey(userid)) {
if (profile != null) {
cache.put(userid, profile);
logger.info("Updated the cache for user: "
+ userid + " profile: " + profile);
return true;
}
}
return false;
}
@Override
public ConcurrentMap<String, Profile> getCache() {
if(cache == null){
cache = new ConcurrentHashMap<String, Profile>();
}
return cache;
}
}
L'interface ressemble à ceci
import com.vimba.profile.Profile;
public interface ProfileCacheInterfaceMBean {
ConcurrentMap<String, Profile> getCache();
}
Et je commence le MBean comme ce
cacheImpl = new ProfileCache(factory.createCacheFromDB());
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
ObjectName profileCache = new ObjectName("org.javalobby.tnt.jmx:type=ProfileCacheInterfaceMBean");
mbs.registerMBean(cacheImpl, profileCache);
Cependant, je reçois le ci-dessous exception et je ne suis pas sûr de ce que j'ai besoin de changer
javax.management.NotCompliantMBeanException: MBean class com.vimba.cache.ProfileCache does not implement DynamicMBean, and neither follows the Standard MBean conventions (javax.management.NotCompliantMBeanException: Class com.vimba.cache.ProfileCache is not a JMX compliant Standard MBean) nor the MXBean conventions (javax.management.NotCompliantMBeanException: com.vimba.cache.ProfileCache: Class com.vimba.cache.ProfileCache is not a JMX compliant MXBean)
Je pense que potentiellement c'est parce qu'elle renvoie à une Carte?
Je vous remercie pour ce commentaire, si j'ai bien compris ce que voulait dire que je n'aurais pas posté ici. Pas de doute, votre sarcasme devrait vous aider à obtenir un peu plus de points - bon travail
C'était une véritable question. De toute façon, la partie de l'exception ne comprenez-vous pas? Pour commencer, à "ne pas mettre en œuvre" --> Indique que votre classe doit implémenter l'interface.
C'est la source de ma confusion que j'ai suivi le tutoriel n'a pas implémenter cette interface - peut-être que je devrais juste aller et rtfm
Renommer le Managed Bean nom de la classe à la fin de "YourClasssNameMXBean" a fonctionné pour moi.
C'était une véritable question. De toute façon, la partie de l'exception ne comprenez-vous pas? Pour commencer, à "ne pas mettre en œuvre" --> Indique que votre classe doit implémenter l'interface.
C'est la source de ma confusion que j'ai suivi le tutoriel n'a pas implémenter cette interface - peut-être que je devrais juste aller et rtfm
Renommer le Managed Bean nom de la classe à la fin de "YourClasssNameMXBean" a fonctionné pour moi.
OriginalL'auteur Biscuit128 | 2014-08-14
Vous devez vous connecter pour publier un commentaire.
Juste après avoir rencontré cette exception et regarda dans le courant des réponses ainsi que https://blogs.oracle.com/jmxetc/entry/javax_management_standardmbean_when_and j'ai pensé qu'elle pourrait aider à mettre en évidence et de clarifier les déjà élucidé:
La NotCompliantMBeanException est dû, entre autres choses, par le fait de ne pas suivre cette convention "ConcreteClassName' implémente 'ConcreteClassNameMBean'
J'ai résolu ce problème en mettant à jour le nom d'origine de mon interface de mbean de "OrignalNameMBean' à 'OriginalNameMXBean" permettant le mbean pour être enregistrée sans suite de la convention
Une autre solution serait de suivre la convention.
Mais la solution est toujours valide 🙂
OriginalL'auteur Bjorn Sayers
J'ai eu le même problème ("ne pas mettre en œuvre DynamicMBean, et ni suit le MBean Standard conventions") et cet article m'a aidé à résoudre le problème (voir l'Aide de StandardMBean section: https://blogs.oracle.com/jmxetc/entry/javax_management_standardmbean_when_and).
Je dois construire explicitement un
puis enregistrer le mbean:
Il fonctionne.
Lorsque j'enregistre mBeanImpl avec le mbServer, je suis l'exception ci-dessus.
OriginalL'auteur user3044236
La mise en œuvre de mbean classe pouvez déclarer autant de méthodes qu'elle aime qui ne sont pas définis dans les mbeans interface... Il n'est pas nécessaire que la mise en œuvre de la classe peuvent/doivent seulement mettre en œuvre les méthodes d'interface.
Dans de nombreux cas, ce problème est dû au fait que les mbean de l'interface et la mise en œuvre de la classe ne sont pas dans le même paquet!
OriginalL'auteur Kim Zeevaarders
Vous pouvez modifier le nom de l'interface à partir de SomethingMBean à SomethingMXBean,comme HelloMBean à HelloMXBean,à partir du jdk de code source, j'ai vu ceci:
si pas endsWith "MXBean",il retournera false,alors causer de jeter IllegalArgumentException
version du jdk:1.8.0_25
classe est "JMX",la ligne 376
OriginalL'auteur flahsy
Il suffit de changer votre nom de classe d'implémentation de ProfileCache à ProfileCacheInterface. Il devrait maintenant fonctionner. De plus, votre mise en œuvre de la classe peut avoir un nombre quelconque de ses propres méthodes et ces méthodes ne doit pas être mentionné dans l'interface de MBean.
JMX du mbean standard convention de nommage est comme ça
OriginalL'auteur deenfirdoush
Je suis d'accord, TJ est à la traîne pour les rep.......
Dans tous les exemples que j'ai vu pour MBean implémentations, je n'ai jamais vu une classe de définir une méthode qui n'a pas été défini dans l'interface. E. g., ProfileCache a la méthode updateCache, mais ProfileCacheInterfaceMBean ne le fait pas. Essayez de supprimer le updateCache méthode de ProfileCache et de voir si cela va fonctionner.
Juste essayer de commenter méthode updateCache dans ProfileCache et de voir si cette exception est encore jetés.
pourquoi cela ferait-il une différence?!
Car il semble un MBean mise en œuvre exige que seules les méthodes d'interface sont mis en œuvre; pas d'autres méthodes doivent être mises en œuvre dans le ProfileCache. À ce stade, si vous poster un autre commentaire avant d'essayer de commenter updateCache, VOUS ÊTES à la traîne pour les rep.
la réponse ci-dessous est la bonne. Il n'est pas un problème pour l'ajout de méthodes dans le MBean mise en œuvre
OriginalL'auteur jdb1015
J'ai connu le même problème comme 'Exception dans le thread "main" javax.de la gestion.NotCompliantMBeanException', dans mon cas, j'ai gardé MBean de l'interface et la mise en œuvre des classes dans differnet paquet. Pour résoudre le problème, j'ai déménagé à la fois MBean de l'interface et la mise en œuvre de la classe du même package.
OriginalL'auteur Hari Krishna