Bean Vergleich.gibts da schon was Feines?

Status
Nicht offen für weitere Antworten.

happy_robot

Bekanntes Mitglied
Hallo,

ich suche gerade verzweifelt nach einer Klasse oder Methode um Beans elegant und ohne viel Aufwand vergleichen zu können.
Gibts da nicht vielleicht schon was? Habe gesucht, aber noch nichts gefunden.

Grüße
 
ich meine beans gemäß der spezifikation (getXxxxx, setXxxxxx).
is also egal in welchem umfeld. einfach der vergleich zweier beans (Jede Art von Beans unterstütz ja diese Spec)

comparable is auch klar.....da die spezifikation aber gleich auch die wertemenge aller eigenschaften wiedergibt sollte ein comparator überflüssig sein.


gruß
 
SlaterB hat gesagt.:
http://commons.apache.org/beanutils/

joo...die hab ich auch gefunden. hilft aber nicht weiter.
der BeanComparator verlangt auch einen Comparator. hilft also nicht.

ich suche eine klasse die folgendes macht:

- übergabe bean A und Bean B (gleicher Typ)
- getter von A ermitteln
- für alle getter werte von A nehmen und mit werten von B vergleichen

selber schreiben is kein thema, aber kann doch nicht sein daß es sowas noch nicht gibt.


gruß
 
*verzweifel* 🙂

ich will bei den beans nix implementieren, und die equals der standard-datentypen nutzen.
anhand der spezifikation ist klar daß die eigenschaften die es zu vergleichen gilt durch die methoden repräsentiert werden die mit "get..." beginnen.
typgleichheit sollte durch typgleichheit der beans gewährleistet sein.
 
Wenn ich mich recht erinnere gibt's da die Introspection API. Ist ähnlich wie reflection aber auf beans beschränkt und nicht ganz so unschön, weil eben grade nur von attributen, gettern und settern ausgegangen wird. Ob da ein Vergleich fertig implementiert ist, weiß ich nicht. Wenn nicht, sollte es aber in einer Hand voll Zeilen selbst implementierbar sein.
 
http://commons.apache.org/lang/api/org/apache/commons/lang/builder/EqualsBuilder.html#reflectionEquals(java.lang.Object,%20java.lang.Object,%20boolean,%20java.lang.Class,%20java.lang.String[])
 
Coole Sache dat! EqualsBuilder, HashCodeBuiler, CompareToBuilder... damit kann man die drei Methoden endlich mal auf einfache Weise konsistent halten. :toll:
 
Ich verstehe den Hintergrund nicht ...

Warum will ich wissen, ob zwei Beans die gleichen öffentlichen Attribute besitzen? Von Gleichheit kann man ja da auf keinen Fall sprechen.
Der Vorschlag von SlaterB ist dann wenigstens Konsistent. Hier wird das ganze über die equals()-Methode allgemein gelöst. Über Performance sollte man sich aber auch Gedanken machen. Das reicht aber bei einem konkreten Verdachtsmoment.
Warum wird das im EE Form diskutiert?
 
FArt hat gesagt.:
Ich verstehe den Hintergrund nicht ...

Warum will ich wissen, ob zwei Beans die gleichen öffentlichen Attribute besitzen? Von Gleichheit kann man ja da auf keinen Fall sprechen.
Der Vorschlag von SlaterB ist dann wenigstens Konsistent. Hier wird das ganze über die equals()-Methode allgemein gelöst. Über Performance sollte man sich aber auch Gedanken machen. Das reicht aber bei einem konkreten Verdachtsmoment.
Ich arbeite mit den EJB 3 und JPA. Es gibt keine elegante und effiziente Art herauszufinden ob sich eine gelesene Entität gegenüber der Persistenzschicht geändert hat. Daher packe ich die Entity-Bean in einen Wrapper und lege sofort einen Clone davon an. Später kann ich dann durch simplen Werte-Vergleich herausfinden ob sie sich geändert hat.

FArt hat gesagt.:
Warum wird das im EE Form diskutiert?
Weil ich mir hier die meiste Erfahrung im Umgang mit Beans erhoffe.... 😀
 
SlaterB hat gesagt.:
http://commons.apache.org/lang/api/org/apache/commons/lang/builder/EqualsBuilder.html#reflectionEquals(java.lang.Object,%20java.lang.Object,%20boolean,%20java.lang.Class,%20java.lang.String[])
Exakt das ist das was ich suche! Das haben die Apachen ja mal wieder fein versteckt 🙂
Danke!

Ich habe es aber mittlerweile mit Annotationen gelöst.
 
happy_robot hat gesagt.:
Es gibt keine elegante und effiziente Art herauszufinden ob sich eine gelesene Entität gegenüber der Persistenzschicht geändert hat.
Na klar gibts da Möglichkeiten! Guck Dir z.B. mal @Version an...

Daher packe ich die Entity-Bean in einen Wrapper und lege sofort einen Clone davon an. Später kann ich dann durch simplen Werte-Vergleich herausfinden ob sie sich geändert hat.
Bei einer großen Menge von Datensätzen und/oder vielen Clients erzeugst Du damit aber einen extremen Memory-Overhead. Es gibt wie gesagt deutlich effizientere Lösungen für das Problem.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben