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