Java

Aus CavoxCms Wiki

Dies ist eine alte Version. Zeitpunkt der Bearbeitung: 16:35, 17. Dez. 2008 durch Admin (Diskussion | Beiträge).
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

Alle Zugriffe von Java auf das CMS werden über die XML-Schnittstelle realisiert.

Inhaltsverzeichnis

Low-Level API (Core)

Die Low-Level API greift direkt auf den Server zu und führt Befehle aus. Folgende Klassen werden dazu verwendet:

Anmerkung: Dateien können noch nicht hochgeladen werden. (.NET unterstützt Dateiuploads)

Beispiel

cConnector connector = new cConnector("http://localhost/ccms");
connector.login("admin", "123456"); 
cRequest request = new cRequest(connector);
request.setField("key", "value");
cResult result = request.perform("system", "model", "command");

High-Level API

Mit der High-Level API können Domain-Objekte automatisch über die Low-Level API ausgelesen, gespeichert und gelöscht werden.

Mit der Annotation cModel wird angegeben, in welchem Modul und welchem Model das Objekt gefunden werden kann. Die Server-Verbindung ist in der statischen Klasse Java:cStorage gespeichert. Die Membervariabeln, die vom Server gesetzt werden, werden mit der Annotation cMember markiert. Wird kein getName oder setName angegeben, wird beim Laden des Objekts der Name der Java-Variabel im XML zum Auslesen verwendet. Ohne Verwendung von setName wird für das Ausfüllen des Formulars (cRequest.setField) auch der Java-Variabelname verwendet (wird ein getName angegeben, wird dieser automatisch auch als setName angenommen).

@cModel(module = "mymodule", model = "mymodel")
public class MyModel extends cObject<MyModel> {

	@cMember
	private int status; 

	@cMember(getName = "createdate")
	private String date;

	@cMember
	private int creator;

Eager Load wurde noch nicht in die Java-API integriert. Aus diesem Grund müssen Objekte manuell bei deren Verwendung geladen werden, es wird also Lazy Load gemacht (natürlich kann auch Eager Load simuliert werden, indem im Konstruktor die gewünschten Objekte im Voraus geladen werden):

	private User m_user;
	public User getUser(){ // lazy load
		if(m_user == null)
			m_user = User.get(creator);
		return m_user; 
	}

	public void setUser(User user){ // lazy load
		m_user = user;
		creator = user.getID();
	}

Da Java keine Instanzierung von generischen Typen unterstützt, muss dies manuell in die Klassen mit diesen zwei Methoden integriert werden:

	public static MyModel get(int id){
		return (MyModel)MyModel.get(new MyModel(), id); 
	}

	public static ArrayList<MyModel> findAll(){
		return (ArrayList)MyModel.findAll(new MyModel()); 
	}
}

Konvertierung

Die Typen der Membervariabeln werden automatisch erkannt und konvertiert. Folgende Typen werden momentan erkannt:

  • Integer
  • Double
  • String
  • Date

Die restlichen Typen werden als Stringzuweisungen realisiert bzw. werden noch nicht unterstützt.

Verwendung

Um Objekte auszulesen, können die statischen Methoden get und findAll verwendet werden. Natürlich muss zuerst ein Java:cConnector in der Klasse Java:cStorage definiert werden.

int id = 10;
MyObject obj = MyObject.get(id);
ArrayList<MyObject> arr = MyObject.findAll();
MyObject obj = new MyObject(...);
obj.Save(); // danach ist die ID des Objekts vorhanden (wenn nicht in der Datenbank, dann getID() == 0)

Concurrency

Ist im Datenbanklayout ein Integer-Feld mit dem Namen oversion vorhanden, erkennt das System, wenn der Datensatz in der Zwischenzeit geändert wurde. Ist der Fehler oversion gesetzt, muss entschieden werden, ob der Datensatz überschrieben, oder der neue Datensatz geladen werden soll. Zwei Möglichkeiten bestehen im Wertfeld:

  • oversionPZ: Datensatz wurde geändert: Neue Version ist PZ
  • oversion-1: Datensatz wurde gelöscht

Die neue Version wird automatisch gesetzt und nach einem erneuten Speichern durch save wird der Datensatz überschrieben, andernfalls sollte mit der Methode reload der neue Datensatz ausgelesen werden.

Exceptions

Viele High-Level-Methoden (get, findAll, delete, save, reload) werfen Exceptions, wenn der Server nicht gefunden wurde oder ein Concurrency-Fehler aufgetreten ist. Validations-Fehler müssen allerdings mit dem Java:cResult ausgewertet werden.

cException

Mutterklasse der Exceptions.

cServerNotFoundException

Exception, die geworfen wird, wenn der Server nicht ansprechbar oder das XML korrupt war.

cConcurrencyException

Wird geworfen, wenn der Datensatz in der Zwischenzeit geändert oder gelöscht wurde.

Methoden:

  • save
  • delete
  • reload

Intern

Das Framework verwaltet intern alle Objekte, damit keine Objekte zweimal ausgelesen werden können. Wird zweimal dasselbe Objekt ausgelesen, wird beim zweiten Aufruf die gleiche Referenz zurückgegeben, allerdings mit den neu ausgelesenen Werten.

Persönliche Werkzeuge