Hibernate + Struts: DTO verwenden?

MadM

Mitglied
Mahlzeit,

in meinem derzeitigen Projekt kommen Hibernate und Struts zum Einsatz. Beide Technologien sind Neuland für mich.
Ich suche nach einer guten Lösung für den Weg von der Datenbank zur Weboberfläche (Formulare).
Eine (einfache) Möglichkeit wäre ja, in der Form-Bean ein Hibernate-POJO zu verwenden und auf dessen Getter und Setter zu verweisen/weiterzuleiten. Allerdings würde man auf diese Weise ja die View vom Model abhängig machen, was dem MVC-Prinzip von Struts wiederspricht.
Die andere Möglich ist die Verwendung von DTOs, wobei das i.d.R. nur Rumkopieren von Werten bedeutet aber die Trennung besser wahrt. Andererseits sind hier Konvertierungen (z.B. String aus Formular <--> Date aus POJO) besser unterzubringen.
Was ist die bessere Wahl? Gibt es Patterns dafür?

Gruß

MadM
 
Zuletzt bearbeitet:
Hi Tom,

danke für die schnelle Antwort, doch leider weiss ich nicht so recht was ich mir aus dem Beispiel ableiten soll.:confused: :(

Meinst du die Verwendung der DTOs in den Forms-Beans und den Zugriff in den JSPs über property="<name>.<attribut>" ?
Das wäre sicher einfacher als in den Forms-Beans Getter und Setter für jedes einzelne Attribut des DTO vorzusehen, wäre aber vom Prinzip her das selbe, wenn man für das Beispiel annimmt DTO=Hibernate POJO

Gruß

ein etwas verwirrter
MadM
 
Zuletzt bearbeitet:
Hallo!

Ich wuerde das so machen:
spezifische ActionsForms pro Domain Objekt mit entsprechender Validierung.
(-> Stubs kann man beispielsweise aus POJO's generieren)
Jede ActionForm kennt das dazugehoerige Domain Object. Innerhalb einer Struts Action wird an eine Service Facade delegiert. Diese ServiceFacade bietet Methoden
zum anlegen, aendern, auslesen und loeschen von Entitaeten an (Bietet entsprechende
Methoden fuer die benoetigten Use Cases an, also Bestellung anlegen, Kunde anlegen, etc.). Die ServiceFacade delegiert an eine entsprechende Service Implementierung.
Die ServiceImplementierung interagiert dann ueber DAOs (DataAccessObjects) mit Hibernate. Die

Gruss Tom
 
Hi Thomas,

danke für den Tipp, werde versuchen das so umzusetzen.
Ein Problem konnte ich bisher noch nicht lösen, da mir der richtige Ansatz fehlt.

Situation:
Mein Hibernate-POJO Projekt enthält u.A. ein Feld beginn und ende vom Typ java.util.Date. In meiner Formbean verwende ich eine Instanz von Projekt.
Das Problem ist nun, dass aus dem Formular in der entsprechenden JSP-Seite ja kein Date sondern ein String zurückkommt, so dass bei Auruf des Setters für eines der beiden Felder ein Fehler (illegal argument) verursacht wird.
Die Frage ist nun, an welcher Stelle ich die Umwandlung vornehmen muss, damit der String aus dem Formular als Date in das POJO geschrieben werden kann.

Gruß

Matthias
 
..und wieder geht ein Dank an den Gradnmaster of Java ;-)
Ich ahbe das Ganze als Struts-Plugin installiert, falls es jemanden interessiert hier der Code:

struts-config.xml
Code:
[...]
<plug-in className="tools.Converter" />
[...]

Converter.java
Code:
package tools;

import java.sql.Date;
import java.util.Locale;

import javax.servlet.ServletException;

import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.locale.converters.SqlDateLocaleConverter;
import org.apache.log4j.Logger;
import org.apache.struts.action.ActionServlet;
import org.apache.struts.action.PlugIn;
import org.apache.struts.config.ModuleConfig;

public class Converter implements PlugIn {

    private static final Logger logger = Logger.getLogger(Converter.class);

    public Converter() {
        super();        
    }

    
    public void destroy() {        
    }

    public void init(ActionServlet arg0, ModuleConfig arg1)
            throws ServletException {
        logger.info("BEGIN INIT CONVERTER");        
         Locale locale = Locale.getDefault();
         SqlDateLocaleConverter converter = new SqlDateLocaleConverter(locale, "yyyy-MM-dd", false);         
         ConvertUtils.register(converter, Date.class);        
         logger.info("END INIT CONVERTER");
        

    }
}
 

Neue Beiträge

Zurück