jmx et persistence ? vaporware ? - Java - Programmation
Marsh Posté le 21-09-2004 à 19:24:49
t'as des liens ou tu peux faire un petit topo sur les MBean ?
Marsh Posté le 21-09-2004 à 19:27:31
surtout que des MBeans, y'en a partout dans Java 5 dont certains qui m'intéressent particulièrement ...
Marsh Posté le 21-09-2004 à 19:28:02
benou a écrit : t'as des liens ou tu peux faire un petit topo sur les MBean ? |
euh à la base si j'pose une question comme ça, c'est que j'suis pas vraiment calé hein ...
Marsh Posté le 21-09-2004 à 19:28:12
( http://java.sun.com/products/JavaManagement/ )
Marsh Posté le 21-09-2004 à 19:45:38
est-ce que tu vas au ciné et après, est-ce que tu baises ?
(2 de plus)
Marsh Posté le 21-09-2004 à 19:50:24
A model MBean is a generic, configurable MBean that anyone can use to instrument almost any resource rapidly. Model MBeans are dynamic MBeans that also implement the interfaces specified in this chapter. These interfaces define structures that, when implemented, provide an instantiable MBean with default and configurable behavior. Further, the Java Management extensions specify that a model MBean implementation must be supplied as part of all conforming JMX agents. This means that resources, services and applications can rely on the presence of a generic template for creating manageable objects on-the-fly. Users only need to instantiate a model MBean, configure the exposure of the default behavior, and register it in a JMX agent. This significantly reduces the programming burden for gaining manageability. Developers can instrument their resources according to the JMX specification in as little as three to five lines of code. Instrumentation with model MBeans is universal because instrumentors are guaranteed that there will be a model MBean appropriately adapted to all environments that implement the Java Management extensions.
(spec page 71)
ça t'aide ?
Marsh Posté le 21-09-2004 à 19:52:29
merci mais non. La spec c'est bien beau, mais j'ai besoin d'un exemple concret de a-z qui me montre que ça marche et comment ça marche. je veux juste sauver l'etat de mon bordel
Marsh Posté le 21-09-2004 à 19:52:51
bordel, je perds les espaces au copier-coller, mais page 72, y'a le scénario d'utilisation
Marsh Posté le 21-09-2004 à 19:54:15
the real moins moins a écrit : je veux juste sauver l'etat de mon bordel |
Themodel MBean, incooperationwithitsJMXagent, will beimplementedto supportitsownpersistence, transactionality, locationtransparency, andlocatability, asapplicableinitsenvironment. Instrumentationdevelopersdonotneedtodevelop MBeanswiththeirowntransactional andpersistencecharacteristics. Theymerely instantiatemodel MBeansintheJMXagentandtrustthatthemodel MBean implementationisappropriatefortheenvironmentinwhichtheJMXagentcurrently exists.
Marsh Posté le 22-09-2004 à 21:19:01
Il faut que tu fasses un XMBean qui est l'implementation de JBoss des ModelMBean.
En plus du fichier jboss-service.xml tu dois fournir pour ton XMBean un descripteur qui decrit l interface de management du MBean. En effet contrairement au standard MBean (qui utilise une class Toto implementant TotoMBean pour decouvrir l interface de management par introspection) la tu dois toi meme fournir un mapping qui mappe l'interface de management a la classe Java.
L'avantage est de pouvoir transformer n'importe quel objet en MBean, surtout si tu n as pas acces au code source.
Par exemple tu vas dire que l'operation stop() dans l interface de management se mappe sur la method stoppe() de la classe Toto.
Ce fichier est au format XML et tu trouves la DTD dans JBOSS_HOME/docs/dtd/xmbean.dtd
En ce qui concerne la persistence tu dois utiliser les options de persistences offertes par ce format, par exemple :
<xmbean>
<description>PersistentServiceExample</description>
<descriptors>
<persistence persistPolicy="OnUpdate"/>
<persistence-manager value="org.jboss.mx.persistence.ObjectStreamPersistenceManager"/>
</descriptors>
<class>Toto</class>
etc....
</xmbean>
Une fois que tu as pondu ce fichier (faisable par xdoclet), tu dois ensuite lorsque tu declares ton MBean, lui dire que c est un XMBean dans jboss-service.xml :
<mbean code="..." name="..." xmbean-dd="Toto.xml">...</mbean>
Le fichier Toto.xml doit etre dans le jar ou la classe de Toto reside.
Marsh Posté le 22-09-2004 à 23:21:22
une vraie réponse
(je vais lire )
Marsh Posté le 22-09-2004 à 23:48:27
bon ben en fait j'étais pas très loin!
jpense que ce qu'il me manquait c'était le <persistence-manager>
Est-ce que je peux le spécifier par xdoclet??
(le reste - le descripteur et le jboss-service.xml - etant déjà généré par xdoclet..)
Encore deux questions:
- au niveau de la persistPolicy, je ne sais laquelle choisir: dans mon bean, j'ai une Map, mais pas d'accesseurs direct, seulement qques methodes qui vont en interne écrire des choses dans cette Map. Est-ce que par chance ce genre d'opération est prise en compte pour un "onUpdate" ?
- Tant que j'avais pas la persistence de ma config gerée par le conteneur, j'ai wrappé la map dans un objet Config et mon mbean delègue à cet objet. Pour intégration dans une console jmx, j'ai une methode qui me montre la Map sus-mentionné sous forme d'une table, avec html. Donc, comme ça, ça me gène *pas trop* d'avoir un peu de bordel qui fait explicitement de l'html dans mon bean. (euh, j'ai qd meme abstrait la construction de la <table> dans une classe utilitaire hein)... Maintenant que je peux persister mon mbean directement, ça me broute un peu d'avoir ça au milieu de ma logique business. Ca m'ennuie aussi pas mal tout ce blabla du à xdoclet, qui empeche une lecture simple de la classe, qui en dehors de tout ça est plutot simple. Tu procèdes comment?
Marsh Posté le 23-09-2004 à 00:46:39
the real moins moins a écrit : - au niveau de la persistPolicy, je ne sais laquelle choisir: dans mon bean, j'ai une Map, mais pas d'accesseurs direct, seulement qques methodes qui vont en interne écrire des choses dans cette Map. Est-ce que par chance ce genre d'opération est prise en compte pour un "onUpdate" ? |
c'est un des gros problemes des ModelMBean, quand tu modifies un objet en interne la persistence ne sera pas effectuee. Il faut passer par le MBeanServer.setAttribute pour declencher cela. Et encore ton cas et special. Ce que tu pourrais faire c est :
Recuperer ton ObjectName JMX en implementant MBeanRegistration, en meme temps tu vas avoir une reference sur le MBeanServer ce qui est bien pratique.
Ensuite tu exposes la Map comme un attribut JMX. Qd tu veux modifier la map en interne, tu la clones et tu fait un setAttribute sur toi meme :
private void add(Object key, Object value)
{
try {
Map copy = new HashMap(originale);
copy.put(key, value);
server.setAttribute(name, new Attribute("Originale", copy);
}
catch(Exception e) {
e.printStackTrace();
}
}
Je sais c est un peu tordu mais je ne connais pas d autre moyen.
Qd tu vas faire un setAttribute, le MBeanServer deleguer ca au XMBean (qui implemente DynamicMBean) et le XMBean avant d appeler setOriginale(Map) sur ta resource managee (i.e ton object) va voir que l on change la valeur de l'attribute et va utiliser le PersistenceManager pour serializer les descripteurs du MBean.
the real moins moins a écrit : |
pour faire quoi ?
sinon j'ai develope mon propre ModelMBean qui construit l'interface de management par reflection, tous les champs marques non transient sont consideres comme persistents + un JDBCPersistenceManager qui serialize les champs dans une table de base de donnee et utilise des java.bean.PropertyEditor pour faire les conversions String<->Object
Le code est GPL si ca t interesse.
Marsh Posté le 23-09-2004 à 00:57:24
oui ça m'interesse
> pour faire quoi ?
pour éviter d'avoir un MBean de 400 lignes dont les 3/4 sont du blabla pour xdoclet et/ou du code qui va servir à presenter les données dans une console jmx (web)
(j'ai un peu maté le code de jboss et ça a pas l'air de les gener de balancer 40 lignes au milieu de nulle part pour generer de l'html à partir de données présente dans le mbean...)
Marsh Posté le 23-09-2004 à 01:23:18
the real moins moins a écrit : oui ça m'interesse |
ok, j'avais pas compris que c'etait ce qui te genait. tu peux toujours appeler ton MBean depuis une servlet et faire la presentation la.
Marsh Posté le 23-09-2004 à 01:35:22
bon, je vais jeter un oeil à tout ça. je pensais que ça serait un peu plus "clés en main" cette histoire, à la base
sinon le persistence-manager que tu as mentionné plus haut (ObjectStream...) il va me serializer mes attributs dans un fichier...? qui se trouve ou ?
et pour le côté présentation, c'est que c'est sympa, facile et rapide de pouvoir utiliser la jmx-console de jboss pour administrer mon appli, mais que si je veux avoir qques données affichées (du genre le contenu de ma fameuse Map), jsuis obligé d'y foutre de la logique de présentation... Je me demandais s'il y avait pas un méchanisme plus malin pour ce genre de pirouettes..
Marsh Posté le 23-09-2004 à 01:51:30
il va le persister sur le disk dur dans le repertoire donne par persistLocation et avec le nom donne par persistName
sinon tu peux toujours utiliser un org.w3c.dom.Element, normalement la JMX console va montrer ca dans un TextField.
Par exemple tu fait un champ de type Element avec le nom getRepresentation(), qd il est appele tu prend ta Map, tu crees
un doc XML et tu met ca dedans et tu retournes le DocumentElement du document. Normaleent le contenu devrait etre affciche sous format XML.
Sinon essaie avec un type wrapper a toi et un PropertyEditor que tu enregistre. La console cherche d abord les property editor pour les classes qu elle ne connait pas. Un property editor c est tout simple a faire :
public class MyPropertyEditor extends PropertyEditorSupport
{
public String getAsText()
{
Toto toto = (Toto)getValue();
return toto.getMyValue();
}
}
ensuite dans ton MBean dans le start() tu enregistres le property editor sur le PropertyEditorManager avec un truc genre :
PropertyEditorManager.register(Toto.class, MyPropertyEditor.class);
the real moins moins a écrit : bon, je vais jeter un oeil à tout ça. je pensais que ça serait un peu plus "clés en main" cette histoire, à la base |
Marsh Posté le 23-09-2004 à 01:54:30
ha merde je connaissais pas du tout ça !? merci
mais pourquoi dans le code de je ne sais plus quel mbean de jboss ils ne font pas ça plutot que de balancer de l'html directement dans l'mbean!?
Marsh Posté le 23-09-2004 à 01:59:35
(y'a un endroit +/- standard de persistLocation pour mes mbeans avec lesquels je voudrais utiliser l'ObjectStreamPersistenceManager, ou bien j'invente? y'a un moyen d'aller coller ça dans le server/xxx/conf de jboss par exemple, sans lui donner le chemin complet?)
(y'a un endroit ou sont documenté les differents PersistenceManager pour jboss-mx - s'il y en a d'autres ?)
(bon, faut que je trouve un moyen de te garder sur le forum toi )
Marsh Posté le 23-09-2004 à 02:07:32
the real moins moins a écrit : (y'a un endroit +/- standard de persistLocation pour mes mbeans avec lesquels je voudrais utiliser l'ObjectStreamPersistenceManager, ou bien j'invente? y'a un moyen d'aller coller ça dans le server/xxx/conf de jboss par exemple, sans lui donner le chemin complet?) |
oui avec en utilisant une propriete genre ${}, en general on met ce genre de truc dans /server/XXX/data
essaie pour persist location : :${jboss.server.data.dir} ca devrait mettre dans ce repertoire
the real moins moins a écrit : |
j ai vu que dimitri avait fait un nouveau persistence manager : http://www.jboss.org/wiki/Wiki.jsp [...] nceService
the real moins moins a écrit : |
:-), pas de prb, j aime contribuer
Marsh Posté le 23-09-2004 à 02:09:50
merci beaucoup! j'essaie tout ça dès que j'ai une heure ou deux qui se dégage !
(foutue deadline à la con )
Marsh Posté le 21-09-2004 à 19:02:23
Bon, jmx, c'est bien mais il semblerait que les spec'eux ont pas encore compris qu'ils feraient bien d'arreter d'utiliser des descripteurs a rallonges et inutiles.
Bref, j'ai un mbean qui contient des bouts de config. Ce mbean est deployé dans jboss, et j'aimerais bien sauvegarder l'état de ma config quand jboss stoppe, ou qd j'undeploy/deploy mon package. Je dois utiliser un ModelMbean? c'est quoi? comment? J'ai vaguement lu qques trucs en rapport avec ça, mais rien de concret et qui allait au bout de l'exemple. jmx, vaporware?
Si qqun à un lien sous le coude, ou des explications simples et concrètes à ce sujet, je suis preneur...
---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?