Persistenz aus JSF-Seite ansteuern

dataframe

Mitglied
Hallo Java-Forum-Community,

Ich arbeite aktuell an einem Blogging - Service, welcher als Benutzeroberflächenframework / JSF Primefaces nutzt. Da ich aus der Mobilentwicklung (Android & iOS) komme bin ich mit den best practices der Webentwicklung nicht vertraut, sodass sich meine Frage rund um das Verständnis dieser dreht:

UseCase:
Als Einstiegspunkt in die Webapplikation biete ich dem Nutzer eine Webseite auf dieser er zwischen "Blogeintrag erstellen" und "Blogeinträge anschauen" wählen kann. Wenn der Nutzer einen Blogeintrag erstellt wird er auf die dementsprechende Seite weitergeleitet, auf dieser Ihm einige Eingabefelder und ein WYSIWYG-Editor angeboten werden. Nun möchte ich, sobald der Nutzer auf den Submit-Button drückt die Persistierung mittels Hibernate ansteuern, sodass der Eintrag in die dahinterliegende MYSQL-DB gespeichert wird.

Nochmal in Kurzform: User besucht Webseite -> erstellt Eintrag -> Eintrag soll als Entität in Datenbank gespeichert werden.

Frage: Wie stelle ich es am geschicktesten an jeden Blogeintrag in die Datenbank zu speichern?
Ich möchte hierbei den größten Nutzen aus den aktuell verwendeten Technologien ziehen (also keine komischen XML-Mappings). Hierzu ein Listing der im Einsatz befindlichen Technologien:

  • Java 6
  • Apache Tomcat 7
  • Majorra -> Primefaces 3.3
  • Hibernate 4
  • MySQL 5.5

Ich bedanke mich im Vorraus

P.S.: Webseiten, eBooks oder weitere Denkanstöße wären ausreichend.
 
Zuletzt bearbeitet:
Ich würde EJBs verwenden. Deine JSP-SEite ruft beim Speichern des Blog-Eintrags eine Bean auf, der die Inhalte des Blog-Eintrags übergeben werden. Dann kannst du mit dem String in der Bean alles machen.

Aber was sagen die Experten?
 
Hi,

JSF, Hibernate, aber auch EJBs und Java WebApps im allgemeinen sind ziemlich komplexe Themen.

Wieviel Erfahrung/theoretisches Wissen hast du denn bereits?
Welche Gründe haben dich dazu bewegt Java, JSF & Hibernate auszuwählen?
 
Hi,

JSF, Hibernate, aber auch EJBs und Java WebApps im allgemeinen sind ziemlich komplexe Themen.

Wieviel Erfahrung/theoretisches Wissen hast du denn bereits?
Welche Gründe haben dich dazu bewegt Java, JSF & Hibernate auszuwählen?

Ich bin bereits seit einiger Zeit als Entwickler tätig, jedoch nicht im Bereich der Webentwicklung. Ich habe diese Technologien auferlegt bekommen, da diese auch von meinem Arbeitgeber im großen Stil verwendet werden. Dies soll nur eine Einarbeitung in die Themengebiete sein.

Schau dir mal die Online-Referenz von MyFaces an:
JSFAtWork, JSF 2.0 und Apache MyFaces

Das Beispiel Projekt mygourmet (ist mit spring) - paßt ganz gut zu deinem Use-Case.

Grüße

Werde ich mir ansehen, Danke dafür.
 
Nun, das ist ein sehr guter Grund 😀

Würde dir empfehlen nicht zu versuchen alles auf einmal erlernen zu wollen, Hiebrnate kann man komplett ohne JSF erlernen, umgekehrt genauso.

Für Hibernate zB. empfehle ich die Hibernate Doku 😉

Bin mir nicht sicher, ob JSF mit Hibernate/JPA aber ohne EJBs wirklich einfacher ist als mit EJBs...
 
Nun, das ist ein sehr guter Grund 😀

Würde dir empfehlen nicht zu versuchen alles auf einmal erlernen zu wollen, Hiebrnate kann man komplett ohne JSF erlernen, umgekehrt genauso.

Für Hibernate zB. empfehle ich die Hibernate Doku 😉

Bin mir nicht sicher, ob JSF mit Hibernate/JPA aber ohne EJBs wirklich einfacher ist als mit EJBs...

Danke für den Beitrag. Es hapert lediglich, wie ich feststellen musste, an meinen mangelnden JSF Kenntnissen. Die anderen Technologien stellen kein Problem dar, da Ich diese auch schon in anderen Projekten eingesetzt hab.

Dann kann der Thread hiermit beendet werden. Nach ner gewissen Zeit vor der IDE sieht man die Probleme vor dem Rechner nicht mehr.
 
Howdy,

Du muss eine ManagedBean für deinen View (jsp, xhtml) schreiben (einfachster Weg).
In deinem View kannst du dann per Expression Language auf deine ManagedBean zugreifen

In einem DataTable oder ähnlichen kannst du dann mit value="#{myManagedBean.blogEntries}" darauf zugreifen...

Java:
@ManagedBean
public class MyManagedBean {

private List<BlogEintrag> blogEntries;

private EntityManagerFactory emf = Persistence.getEntityManagerFactory();
private EntityManager           em;

public classMyManagedBean() {
}

public List<BlogBeitrag> getBlogEntries(){
em = emf.createEntityManager();

Query q = "select a from BlogEintrag a";
this.blogEntries = q.getResultList();
em.close;

if (this.blogEntries != null) {
return this.blogEntries;
} else {
this.blogEntries = new ArrayList<BlogEintrag>();
return this.blogEntries;
}

}
 
Zuletzt bearbeitet:
Das ist schlechter Programmierstil - Businesslogik o. Datenbank Abfragen in den getter zu implementieren - zumal JSF den getter 2mal aufruft d.h. gehört sowas in die @PostConstruct- oder in eine action-Methode und warum heißt der Konstruktor anders als die Klasse?
Java:
public class MyManagedBean {
...
public classMyManagedBean() {
}
 
Das ist schlechter Programmierstil - Businesslogik o. Datenbank Abfragen in den getter zu implementieren - zumal JSF den getter 2mal aufruft d.h. gehört sowas in die @PostConstruct- oder in eine action-Methode und warum heißt der Konstruktor anders als die Klasse?
Java:
public class MyManagedBean {
...
public classMyManagedBean() {
}

Konstruktor ist natürlich ein CopyAndPaste-Fehler gewesen.
Hast du ein Beispiel für eine SessionScopedBean, die automatisch bei jedem Aufruf einen DataTable mit aktuellen Daten füllt? Wenn ich die Persistenz in eine Action-Methode packe muss ich die ja jedes Mal explizit aufrufen, stecke ich die in den Getter (um den Reload-Button zu sparen) wird sie auch zweimal aufgerufen. Bin für jeden Hinweis dankbar, ich habe damals keine Möglichkeit gefunden das effektiver zu realisieren.

In vielen Tutorials und Büchern steht das auch so drinn. Nochmal, ich weiß dass das redundant ist.

Chris
 

Neue Themen


Zurück
Oben