# Databinding...



## lumo (1. Aug 2011)

Hallo!

ich habe in meiner anwendung databinding in verwendung um änderungen im gui/daten sofort zu aktualisieren.

mein problem ist nun, dass das databinding NICHT den getter/setter verwendet sondern sich irgendwie daran herum-mogelt.
dadurch hab ich nun ein problem bekommen.

und zwar muss ich in einem fall das aktualisieren der gui verhindern (fixer vorgabewert in einem gui element.)

-> binding wird gemacht -> gui wird aktualisiert
-> binding wird nicht gemacht -> gui hat die korrekten daten, aber im hintergrund wird das datenmodell nicht korrekt gehalten.

ich habe einen check eingefügt (im setter) der checken soll ob die gui den wert bekommen soll oder nicht... aber leider umgeht das databinding ja genau diesen setter...

hat jemand eine idee?


----------



## maki (1. Aug 2011)

Zeig mal den Code.

Deine Modelle, sind das Javabeans die per PropertyChangeSupport die Änderungen propagieren?


----------



## lumo (1. Aug 2011)

hab jetzt die lösung gefunden.

genau meine modelle sind javabeans.
die gui komponenten hab ich erweiterte swt controls (mehrere swt controls auf einem composite)

meine lösung ist die:
das binding ändert den wert nicht durch meinen setter meines controls (weil er ja direkt auf das control, in dem die werte angezeigt werden, zugreift) gesetzt.

also hab ich einen listener auf das control gesetzt, einen SWT.modify. wenn dieser aufgerufen wird, wird überprüft, ob das control schreibberechtigt ist. ist es nicht schreibberechtigt, wird der 'fixe' wert reingeschrieben. dadurch wird auch das modell im hintergrund mit dem fixierten wert überschrieben (so wies auch sein soll)

code aus meiner anwendung rausholen ist kompliziert, da ich meine gui generiere (hab nur felddefinitionen, aus denen sowohl GUI als auch eine Tabelle generiert werden kann... alles dynamisch - gezwungener weise... leider!)


----------



## Wildcard (1. Aug 2011)

Die richtige Lösung wäre IMO eine entsprechende Policy im Binding zu setzen.
Als Tipp, Databinding wird um ein vielfaches einfacher und eleganter wenn du deine Modelle von EMF generieren lässt.


----------



## lumo (2. Aug 2011)

ich hab mein modell allerdings schon vorgegeben (datenbank)
habe dazu bereits alle interfaces definiert und einen teil auch schon ausprogrammiert.

also müsste ich das EMF mal aus meinem code heraus generieren lassen...
aja, ich habe hibernate als verbindung zwischen meiner datenbank und meinem java-code;

also wie müsste ich vorgehen, dass ich auf EMF wechsle, und wieviel aufwand wäre das?
konnte mit google nur finden, wie man aus einer uml oder anderen modellierten umgebung den code erzeugen kann, aber nix in die andere richtung...
(nachdem 100 tabellen definiert sind, die wiederum 100 spalten haben, wäre der aufwand per hand wohl zu groß)


----------



## Gast2 (2. Aug 2011)

lumo hat gesagt.:


> also müsste ich das EMF mal aus meinem code heraus generieren lassen...
> aja, ich habe hibernate als verbindung zwischen meiner datenbank und meinem java-code;



Wie sieht deine Systemarchitektur aus?
Hast du eine Standalone-Anwendung oder Client-Server Anwendung.

Möglichkeit 1:
Also mit EMF kannst du deine Modells für deinen RichClient machen.
Mit EMFT kannst du deine JPA Pojos generieren lassen welches dir auch eine orm.xml basierend auf JPA2 generiert.
Umd von EMFT Models zu EMF und andersherum zu konvertieren gibts es entsprechende Konverter.

Möglichkeit 2:
Du benutzt nur EMF und machst die orm.xml bzw. JPA Annotations selber...


----------



## lumo (2. Aug 2011)

ich habe eine client server anwendung, wobei der server ein datenbank-server ist (also nix was ich selbst schreiben muss)
ich habe eine RCP in eclipse laufen und hibernate (meine JPA?) (mit dem ich schon viel gekämpft habe) möchte ich nun eigentlich nicht mehr verwerfen.

ich hatte EMF anfangs in erwägung gezogen, allerdings hat mir eine consulting firma davon abgeraten, da ich features wie undo/redo nicht benötige...


----------



## Gast2 (2. Aug 2011)

lumo hat gesagt.:


> ich habe eine client server anwendung, wobei der server ein datenbank-server ist (also nix was ich selbst schreiben muss)
> i.


Ja also ist es eine Standalone du hast keinen eigenen Server der die Logik enthält...



lumo hat gesagt.:


> ich habe eine RCP in eclipse laufen und hibernate (meine JPA?) (mit dem ich schon viel gekämpft habe) möchte ich nun eigentlich nicht mehr verwerfen.



Hibernate ist nur eine JPA Implementierung mit was hast du den gekämpft, die Eclipse IDE bietet doch super Tools um das alles einzustellen.



lumo hat gesagt.:


> ich hatte EMF anfangs in erwägung gezogen, allerdings hat mir eine consulting firma davon abgeraten, da ich features wie undo/redo nicht benötige...



EMF bietet ja nicht nur undo/redo, sondern viel mehr wildcard wird dir alles sagen können ...

wie gesagt EMF macht mit einem RCP fast immer Sinn.

Ich habe dir die 2 Möglichkeite, die ich kenne oben aufgezählt. EMFund JPA zu verbinden.


----------



## Wildcard (2. Aug 2011)

Um EMF Modelle mit Datenbanken zu verbinden sind mir 4 Möglichkeiten bekannt:
1. Texo - generiert echte Pojos die automatisch in EObjects verpackt werden können
2. Teneo - generiert normale EMF Modelle die mit JPA persistiert werden können
3. CDO - Repository Server für große Verteilte Modell. Sehr mächtig, aber ich weiß nicht ob du noch viel Einfluss auf die DB Struktur hast
4. SDO - der Sinn von SDO ist mir nie wirklich klar geworden, ist nach meinem Verständnis auch mittlerweile eher Legacy


----------



## Gast2 (2. Aug 2011)

Wildcard hat gesagt.:


> Um EMF Modelle mit Datenbanken zu verbinden sind mir 4 Möglichkeiten bekannt:
> 1. Texo - generiert echte Pojos die automatisch in EObjects verpackt werden können
> 2. Teneo - generiert normale EMF Modelle die mit JPA persistiert werden können



joa EMFT ist ja Texo was heißt für dich automatisch verpackt mit einem Konverter halt oder was meinst du.
Teneo basiert nur auf JPA 1.2 und hatte damit viele Probleme der Entwickler hat mir dann gesagt soll lieber Texo verwenden =)


----------



## Wildcard (2. Aug 2011)

Genau, mit dem ModelEMFConverter, aber da kennst du dich wohl eh besser aus als ich.


----------



## Gast2 (3. Aug 2011)

Wildcard hat gesagt.:


> Genau, mit dem ModelEMFConverter, aber da kennst du dich wohl eh besser aus als ich.



Aso okay =) dachte gibt noch eine andere Variante, an den Konverter wollten Sie noch einiges ändern im nächsten release und auch JSON Übertragung einbauen. Aber seitdem (leider) nix mehr mitgemacht


----------

