# Bean Vergleich.gibts da schon was Feines?



## happy_robot (29. Jul 2008)

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


----------



## FArt (29. Jul 2008)

??? Wie, vergleichen ??? Was für Beans, EJBs?

comparable...


----------



## happy_robot (29. Jul 2008)

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 (29. Jul 2008)

http://commons.apache.org/beanutils/


----------



## happy_robot (29. Jul 2008)

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ß


----------



## tfa (29. Jul 2008)

Einfach equals() implementieren (lassen durch IDE)?


----------



## happy_robot (29. Jul 2008)

*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.


----------



## BjörnBu (29. Jul 2008)

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.


----------



## SlaterB (30. Jul 2008)

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[])


----------



## byte (30. Jul 2008)

Coole Sache dat! EqualsBuilder, HashCodeBuiler, CompareToBuilder... damit kann man die drei Methoden endlich mal auf einfache Weise konsistent halten. :toll:


----------



## FArt (30. Jul 2008)

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?


----------



## happy_robot (1. Aug 2008)

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....


----------



## happy_robot (1. Aug 2008)

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.


----------



## byte (1. Aug 2008)

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.


----------

