verschiedene Beans, verschiedene Felder "koppeln"

faetzminator

Gesperrter Benutzer
Hi zusammen,

der Threadtitel ist wohl nicht so aussagekräftig, ist mir aber nichts gescheiteres eingefallen.
Ich habe folgende Situation: Ich hab ein Projekt mit generierten Beans und Actions - nennen wir diese GenBeans. Diese leiten alle von einer Klasse ab, nennen wir sie CommonBean. Die GenBeans können für bestimmte Use Cases wiederum von mehreren Klassen reused werden (auch über mehr als ein Vererbungslevel), nennen wir diese ImplBeans.
Ich hab bei 90% der Services, welche ich mit diesen Beans befülle, zwei Felder, welche in all diesen Services gleichnamig sind. Als Beispiel nennen wir ein Feld "ABC". Nun habe ich dank langjähriger Programmierung div. Entwickler folgendes Problem. Der alte Generator generierte die Fields, wie sie im Service definiert wurden, also z.B. Feld "ABC" mit "getABC()" und "setABC()". Die neue Version spuckt aber alles Lower Case (wer kam auf diesen Schwachsinn?) aus, also "abc", "getAbc()", "setAbc()". Damit der Wert im gesamten Projekt rumgereicht werden kann, haben einige Entwickler je nach dem noch 2 ähnliche Methoden hinzugefügt (zu den ImplBeans). Je nach dem zeigen diese wieder auf den Getter/Setter von Feld x, y, oder verwenden ihr eigenes Feld.
Lange Rede, kurzer Sinn: ich will, egal welche von CommonBean vererbten Klassen welche Setter und Getter überschreiben (oder selbst erstellen) - welche diesem Muster ensprechen, also 4 Stück - immer auf das gleiche Feld zugegriffen wird. Somit soll ein "setABC()" vor einem "getabc()" den dem Setter übergebenen Wert zurückgeben.

- in CommonBean alle Methoden implementieren und das gleiche Feld verwenden - funktioniert natürlich nicht
- in allen ImplBeans alle diese Methoden implementieren - macht weder Sinn noch kann man davon ausgehen, dass immer ein ImplBean unter dem GenBean hängt
- im CommonBean Konstruktor die Methoden per Reflection überschreiben, das geht aber IMHO nicht
- im CommonBean alle Methoden implemenentieren, da drin per Reflection in allen Subklassen nach den Feldern suchen, bei den Settern alle Felder füllen, bei den Gettern ein Feld mit Inhalt zurückgeben. Als Fallback - wenn kein Feld gefunden wurde - das eigene verwenden. Dies könnte IMHO aber vom SecurityManager gesperrt sein, denn ich müsste ein [c]setAccessible(true)[/c] machen.
- CommonBean is irgendwann mal eine Ableitung von org.apache.struts.validator.ValidatorForm (Struts 1.1...) - kann man da was machen?
- im Framework schauen (wie erwähnt, basiert auf Struts 1.1), ob ich irgendwie die Instanzierungsmethode der Beans überschreiben kann, welche dann die Methoden ohne Reflection implementiert/überschreibt - das hab ich aber bis anhin noch nicht geschafft.

Einige fragen sich vielleicht, warum ich das so machen will. 1. Natürlich will ich zumindest die von Hand eingefügten Getter und Setter raus aus dem Projekt haben, aber das benötigt seine Zeit. Damit alles immer sauber funktioniert, sollen diese bis zum Abschluss meiner Änderungen verfügbar sein. 2. Diese verfi***en Generatoren, welche plötzlich alles Lower Case generieren. Ich kann leider nicht das ganze Projekt neu generieren...

Ich hab mir die Überlegungen schon ein paar Mal gemacht, bin allerdings nie zu einer Lösung gekommen. Kann sein, dass es wirklich keine Lösung gibt. Vielleicht gibts aber eine schöne Lösung, welche mir nicht einfällt? Oder eine fancy Lösung :) Bin offen für alles :D

Gruess, faetzminator
 
M

maki

Gast
Mal meine Gedanken ohne wirklich tief eingestiegen zu sein:
- struts 1.1 ist mittlerweile fast 10 Jahre alt, es handelt sich wohl um eine Uralt Legacy App, kein Vernünftiger Mensch würde das heute noch für Neuentwicklungen nutzen
- Project Lombok erstellt JavaBeans konforme Getter & Setter per Annotation automatisch zur Laufzeit (vorausgesetzt die Properties sind schon JavaBean konform), keine Generatoren mehr, keine handgeschriebenen Getter & Setter mehr

Manchmal bleibt einem nur die Wahl zwischen:
1. Mutig sein und große Teile neu implementieren, dazu braucht man aber mehr als Mut, u.a. auch Budget
2. Weitermachen und nicht Ärgern, marginale Verbesserungen einführen, oft nicht mehr als ein altes, rostiges Auto zu polieren, und vor allem: nicht ärger/aufregen
 

faetzminator

Gesperrter Benutzer
- struts 1.1 ist mittlerweile fast 10 Jahre alt, es handelt sich wohl um eine Uralt Legacy App, kein Vernünftiger Mensch würde das heute noch für Neuentwicklungen nutzen
Ich weiss. Ich hab nie gesagt, dass ich damit Freude hab. Genau so wenig, dass es ein neues Projekt ist. Unsere neue Projekte implementieren wir in Spring. Das interne Framework ist nicht grundlos seit 5 Jahren (?) deprecated ;)
- Project Lombok erstellt JavaBeans konforme Getter & Setter per Annotation [...]
Solch eine grosse Änderung sollte es dann auch wieder nicht sein.

Manchmal bleibt einem nur die Wahl zwischen:
1. Mutig sein und große Teile neu implementieren, dazu braucht man aber mehr als Mut, u.a. auch Budget
Ich bin seit 2 Jahren dran, Teil für Teil zu "verschönern". Dies ist in meinen Augen einer der letzten Teile, welche ich unbedingt schöner implementieren will. Ich hab allerdings nicht Tage, Wochen Zeit dazu - schön wie du das am Schluss des Satzes gesagt hast.
2. Weitermachen und nicht Ärgern, marginale Verbesserungen einführen, oft nicht mehr als ein altes, rostiges Auto zu polieren, und vor allem: nicht ärger/aufregen
Schlussendlich ist der Aufwand kleiner, wenn ich es gleich so implementiere, wie es mir vorschwebt. Die Alternative dazu ist, bei jeder Anpassung/Änderung von Services alle Felder wieder und wieder zu checken - denn die immensen Abhängigkeiten sind ein Problem.
 

faetzminator

Gesperrter Benutzer
Ich versuche nun, bei der Erstellung der Beans (von Struts) diese Methoden zu überladen. Leider hab ich es noch nicht geschafft, da die Klassen über einen CL geladen werden. Hab bis jetzt keine sinnvolle Möglichkeit gefunden.
Vielleicht bietet BCEL eine Lösung für mich? Es müsste einfach zur Compiletime die von mir benötigten Klassen erstellen und ebenfalls ins WAR packen. Allerdings scheiter ich da an den einfachsten Dingen.
Sonst noch irgendwelche Vorschläge?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Verschiedene Versionen mit Datenbanken Allgemeine Java-Themen 3
Thallius Verschiedene entities für gleichen Code…. Allgemeine Java-Themen 8
OnDemand Zentrale "Drehscheibe" für verschiedene APIs Allgemeine Java-Themen 14
M verschiedene Dokumente auslesen Allgemeine Java-Themen 1
MiMa Logging mit log4j2 in verschiedene Dateien? Allgemeine Java-Themen 22
J Verschiedene Runtime Versionen gleichzeitig? Allgemeine Java-Themen 12
H Klassen LibGDX - Verschiedene Klassen als Value in einer Map Allgemeine Java-Themen 8
P mehrer Verschiedene Objekte in einer Klasse erstellen. Allgemeine Java-Themen 4
K Verschiedene Sprachen Allgemeine Java-Themen 1
C -Verschiedene Versionen eines Programms verwalten Allgemeine Java-Themen 7
M Verschiedene Pilzartenerkennung Allgemeine Java-Themen 0
I Verschiedene Arrays auslesen Allgemeine Java-Themen 6
nrg Verschiedene JREs im Browser konfigurieren Allgemeine Java-Themen 6
S Best Practice verschiedene Exceptions fangen und neue Exception erzeugen Allgemeine Java-Themen 11
G DesignPattern Verschiedene Services Allgemeine Java-Themen 4
B Verschiedene Objekte in Abhängigkeit eines Typs instanziieren. Allgemeine Java-Themen 17
M massenhaft verschiedene Date-Pattern Allgemeine Java-Themen 3
R Eclipse Verschiedene Ergebnisse bei Berechnung eines double-Werts Allgemeine Java-Themen 5
R Implementierung eines Interface durch 2 verschiedene Klassen Allgemeine Java-Themen 6
J Verschiedene Klassen als "Object" in ArrayList und dann in for-Schleife erzeugen!? Allgemeine Java-Themen 2
S Welche Datenstruktur für verschiedene Sprachen sinnvoll? Allgemeine Java-Themen 2
H Zwei verschiedene Dateien mittels einem Binärstream übertragen? Allgemeine Java-Themen 13
M verschiedene Methonden innerhalb des gleichen Threads Allgemeine Java-Themen 7
N verschiedene Klasse laden (Designfrage) Allgemeine Java-Themen 2
S Package in verschiedene Projekten einbinden? Allgemeine Java-Themen 3
D Verschiedene Datein aus einer Zip Datei ins Programm laden Allgemeine Java-Themen 4
D Verschiedene Persistenz Strategien Allgemeine Java-Themen 7
S Konstruktoren, verschiedene Klassen, Methoden. Allgemeine Java-Themen 3
M Verschiedene Modi bei AbstractTableModel Allgemeine Java-Themen 10
J Verschiedene Klassen, verschiedene Ströme? Allgemeine Java-Themen 6
V 1 Methode für viele verschiedene Klassen? Allgemeine Java-Themen 9
L Verschiedene Versionen eines Interfaces Allgemeine Java-Themen 12
J Verschiedene Starteinstellungen Allgemeine Java-Themen 7
J Programm für verschiedene Betriebssystem vertreiben? Allgemeine Java-Themen 10
M 2 verschiedene LookAndFeels in einem Fenster möglich? Allgemeine Java-Themen 6
D Gehts praktischer? Thema:Verschiedene Instanzen einer Klasse Allgemeine Java-Themen 3
C Verschiedene JDKs Allgemeine Java-Themen 6
M Regular Expression - verschiedene Ausdrücke testen (grep | ) Allgemeine Java-Themen 5
C verschiedene Klassenarten Allgemeine Java-Themen 3
G Verschiedene Auflösungen Allgemeine Java-Themen 6
H verschiedene Java Versionen Allgemeine Java-Themen 3
A Textfeld soll verschiedene Datumseingaben akzeptieren Allgemeine Java-Themen 5
J beans.instantiate(): Klasse kann nicht instanziiert werden Allgemeine Java-Themen 2
S Stilfrage bezüglich Beans mit Collection-Properties Allgemeine Java-Themen 2
B Frage zu Stateless Session Beans Allgemeine Java-Themen 3
J java beans property editor Allgemeine Java-Themen 3
eisioriginal Java Beans und deren Elternklasse Allgemeine Java-Themen 7
G Beans und transiente Properties Allgemeine Java-Themen 4
A Java - Enterprise Java Beans - Java Server Pages Allgemeine Java-Themen 3
S Was sind eigentlich Java Beans? Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben