2009-03-27 2 views
1

wir verwenden EJB3 in unserer Anwendung. Unser Entwurfsziel besteht darin, die Persistenzschicht von der Business-Schicht zu trennen. Daher haben wir XXXbean-Klassen entwickelt, die als SLSB- und XXXRepository-Klassen zur Verwendung als Persistenzklassen verwendet werden können. Wir haben auch POJO, die wiederverwendbare NICHT-Geschäftslogik implementieren (Liste der Länder usw.) und wir nennen dann service/helper-Klassen.Wann verwenden wir POJO und wann verwenden wir SLSB

Wir verwenden EJB3 JPA (mit Hibernate Provider) und Repository-Klassen verfügt über alle Methoden für CRUD-Operation und die Methoden zum Datenzugriff zu erhalten. Derzeit sind XXXRepository-Klassen alle POJO und wir instanziieren diese Klassen direkt von den Bean XXXClasses oder von den Service-Objekten.

Sollten die XXXRepository-Klassen SLSB sein? Was wären die Vorteile und Fallstricke bei der Umstellung auf SLSB?

Antwort

0

Ein EJB ist eine containergesteuerte Bean. Dies bedeutet, dass der Container viele Optionen wie Transaktion, Sicherheit, Ressourcenzugriff (z. B. Datenbank) verwaltet und Möglichkeiten wie Timer, Fernzugriff oder Interzeptoren bietet. Ein weiterer Vorteil ist der Pool und die Wiederverwendung von Instanzen.

Ich würde sagen, wenn Sie etwas aus diesem Container verwaltete Optionen wie ein Entity Manager benötigen, dann verwenden Sie eine EJB, in Ihrem Fall eine SLSB. Wenn Sie jedoch keine der bereitgestellten Funktionen benötigen, wird ein üblicher POJO diese Aufgabe übernehmen.

Wenn die XXXRepository-Klassen keine SLSB sind, wie greifen sie auf die Datenbank zu, um die CRUD-Operationen auszuführen? Verwenden Sie die Hibernate-Sitzung direkt? Wie werden die Transaktionen verwaltet? Es kann sinnvoll sein, diese Klassen in SLSB umzuwandeln und den injizierten Entitätsmanager für diesen Fall zu verwenden.

Adam Bien hat ein Buch mit dem Namen Real World Java EE Pattern geschrieben. In diesem Buch schreibt er über gute EJB-Architekturen und erwähnt auch, welche Klassen ein EJB sein sollten (zum Beispiel eine ServiceFacade als Transaktionsgrenze) und welche Klassen als POJOs verwendet werden können.