Java Metadata Interface Thorsten Pivl Einleitung Was sind Metadaten? Das Wort „Meta“ stammt aus dem griechischen und bedeutet „über“ Meta-Daten: Daten über Daten „Beschreibung von Daten“ 2 Einleitung Warum Metadaten? Es existieren verschiedene Standards (Beispiel bei Banken) 3 Einleitung Ein Standard: JMI Plattform unabhängig Basiert auf Meta Object Facility JMI definiert das Java Mapping von MOF 4 Ein Beispiel für JMI ¾ UML Modellierungstool Es werden APIs erzeugt Andere Programme können über APIs Zugriff auf das UML Modell nehmen Java Metadata Interface 5 Szenario – Software Entwicklung Enterprise JavaBeans Anwendung Es werden unterschiedliche Tools eingesetzt Model Development Deployment Für jeden Bereich wird ein Metamodel erstellt Es kommt auf Anzahl der Domänen an 6 JMI 7 Überblick MOF M3 MOF M2 UML Modell M1 M0 Information 8 Metaobjekt Interface Hierarchie Metamodel Definition 9 Metaobjekt Interface Komponenten RefPackage RefAssociation RefObject RefClass 10 Metaobjekt Interface Hierarchie Vererbung innerhalb der Generierten Schnittstellen 11 JMI MOF Mapping auf Java Interfaces haben ein gemeinsames objektzentriertes Meta-Daten-Modell: Package Objekt Class Proxy Objekt Instanz Objekt Assoziations-Objekt 12 Einfaches Beispiel Einfaches XML Metamodel 13 Einfaches Beispiel Generierte JMI API Das Class Proxy Interface public interface AttributeClass extends javax.jmi.reflect.RefClass { public Attribute createAttribute(); public Attribute createAttribute(String name, String Value); } 14 JMI - Proxy-Klassen Interface Factory-Objekt, um Instanz Objekte zu erzeugen Eigentliche Container für Instanz Objekte Verwaltet Attribute auf Class-Ebene 15 Einfaches Beispiel Generierte JMI API Das Instanz Interface public interface Attribute extends javax.jmi.reflect.RefObject { public String getValue(); public void setValue(newValue); } 16 JMI - Instance Interface Verwaltet die Zustände der Instanzattribute (Zugriff und Aktualisierung) Werden im class proxy erstellt und im class proxy Container abgelegt 17 Einfaches Beispiel Einfaches XML Metamodel 18 Einfaches Beispiel Generierte JMI API Das Association Proxy Interface public interface Contains extends javax.jmi.reflect.RefAssociation { public boolean exists(Element element, Node container); public java.util.List getElements(Node container); public Node getContainer(Element element); public boolean add(Element element, Node container); public boolean remove(Element element, Node container); } 19 JMI – Assoziations Interface Verwaltet eine Menge von Verbindungen, die den definierten Assoziation im Meta- Modell entsprechen 20 JMI - Package Objekt Zugriff auf Meta-Objekten Wurzel des objekt zentrierten MetaDaten-Modells Beinhaltet alle anderen Objekte 21 Einfaches Beispiel Generierte JMI API Das Package Proxy Interface public interface XMLModelPackage extends javax.jmi.reflect.RefPackage { public NodeClass getNode(); public AttributeClass getAttribute(); public ElementClass getElement(); public RootNodeClass getRootNode(); public Contains getContained(); } 22 Benutzung der Interfaces Tool bekommt XML Dokument als Input Es sollen Metadaten vom XML Metamodell erstellt werden Dokument muss von Applikation geparst werden Output füllt das Repository durch Nutzung der generierten JMI interfaces. 23 Benutzung der Interfaces <test> <node attr1 = "value1"> Random text </node> </test> 24 Benutzung der Interfaces Eingangspunkt zum Metamodell: XMLModelPackage service = <Referenz zum package proxy> Es muss ein Wurzelknoten erstellt werden RootNode root = service.getRootNode().createRootNode("test", "test.xml"); 25 Benutzung der Interfaces Erstellen von Nodes: Node node = service.getNode().createNode(„node“) node.setContainer(root) Attribute werden in ähnlicher Weise erstellt Attribute attr1 = service.getAttribute().createAttribute("attr1", "value1") Attr1.setContainer(node) 26 Benutzung der Interfaces // create the root node RootNode root = service.getRootNode().createRootNode("test" , "test.xml"); // create the first node Node node = service.getNode().createNode("node"); // set root as its container node.setContainer(root); 27 Benutzung der Interfaces // now create the two attributes Attribute attr1 = service.getAttribute().createAttribute("a ttr1", "value1"); // add the attribute as contained element of node node.getElements().add(attr1); 28 Benutzung der Interfaces // create the text node TextNode text = service.getTextNode().createTextNode( "text"); // set node as its container text.setContainer(node); 29 MOF Reflective Package Ermöglicht… Erzeugen, aktualisieren, zugreifen, Methodenaufruf auf class proxy objects Abruf und Links mit association objekten … ohne die generierten Interfaces zu „kennen“ 30 Beispiel für MOF Reflective Package public void readAttributes(RefObject object) { // Durchsuche das Metamodel von „object“ // Lese Attribute aus } 31 MOF Reflective Package Weitere Möglichkeiten Das Finden der Metadata eines Objekts Das Finden des Containers eines Objekts und die eingeschlossenen packages Das Testen der Objektidentität Ein Objekt löschen 32 Zusammenfassung JMI definiert eine Java Mapping auf MOF Vereinfachte Integration durch gemeinsames Metamodell Es werden Interfaces generiert Über Interfaces erhält man Zugriff auf das Metamodell 33