mit EJB 3.0 und JSF Webseiten entwickeln...

Status
Nicht offen für weitere Antworten.

rider

Aktives Mitglied
Hallo,
EJB ist ziemliches Neuland für mich.
Ich komme eher aus der Ecke mit Spring, Hibernate...
Es geht mir erst mal ums Verständnis:

Bei Spring habe ich von einer Entity auf eine Repository (Datenschicht) -> diese auf den Anwendungskern (Service-Klasse) und schließlich auf eine JSF Seite zugegriffen.
Im ManagedBean hab ich die Daten von der JSF Seite gespeichert, die wiederum zu der Service - Klasse gehen etc.

Nun möchte ich ein Projekt realisieren, das OHNE Spring auskommt, sondern EJB 3.0!
Ich habe gehört, dass ich dann nur eine Service - Klasse brauche, in der ich dann meine NamedQueries auch reinstecke.
Jetzt ist mir aber unklar, ob ich ein ManagedBean brauche etc.
Vorteilhaft wäre, wenn mir hier jemand einen einfachen Code hinschreiben könnte, der zB nach einer ID sucht.
Das würde mir ungemein helfen. Oder gibts irgendwo Beispiele?
Hier ist mal der Code von dem bisherigen ServiceBean:

Java:
package session;

import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import ..............entity.ServiceDefinition;


@Stateless(name="ejb/ServiceManagementBean")
public class ServiceManagementBean implements ServiceManagementLocal {

	@PersistenceContext(unitName="service-config")
	EntityManager entityManager;
	
	@Override
	public void addNewServiceDefinition(ServiceDefinition sd) {
		entityManager.persist(sd);
	}
	
	@Override
	public void removeNewServiceDefinition(ServiceDefinition sd) {
		entityManager.remove(sd);
	}
	
	@Override
	public void updateServiceDefinition(ServiceDefinition sd) {
		entityManager.merge(sd);
	}
	
	
	@Override
	public ServiceDefinition[] getAllServiceDefinitions() {
		Query query = entityManager.createQuery("from ServiceBinding");
		return (ServiceDefinition[]) query.getResultList().toArray(new ServiceDefinition[]{});
	}


	
	@Override
	public List<ServiceDefinition> findByInternalCategory(String category){
		Query query = entityManager.createQuery("FROM ServiceDefinition sd WHERE UPPER(sd.INTERNAL_CATEGORY) LIKE UPPER(:internalCategory)");
		query.setParameter("category","%"+category+"%");
		List<ServiceDefinition> servicedefinition=query.getResultList();
	
		return servicedefinition;
	}
 

rider

Aktives Mitglied
könntest du mir noch Aussagen zum Grundverständnis zeigen?
Oder die Klassen aufschreiben, die ich benötige etc.
 
M

maki

Gast
Spring und EJB3 sind sich sehr ähnlich..

Bei Spring habe ich von einer Entity auf eine Repository (Datenschicht) -> diese auf den Anwendungskern (Service-Klasse) und schließlich auf eine JSF Seite zugegriffen.
Hört sich nach DDD an ;)
Geht mit EJB3 auch so, ausser dass du eben weniger DI Möglichkeiten hast.

Im ManagedBean hab ich die Daten von der JSF Seite gespeichert, die wiederum zu der Service - Klasse gehen etc
Ist in reinem JSF/EJB3 auch viel anders ;)

ManagedBean -> EJB Session Bean -> etc. pp.

"etc. pp." steht jeweils für das Vorgehen dass du möchtest, eher Prozedural nach J2EE bzw. Spring: EJB Session Bean -> Dao/Repository, oder eben DDD: EJB SessionBean -> Entity -> Repository
 

rider

Aktives Mitglied
gibts irgendwo ein Beispiel um eine einfache Methode auf einer JSF Seite anzeigen zu lassen.
zB "findAll"! Dabei soll es einfach folgende Spalten der Entity auflisten (id, name, vorname).

Um etwas konkreter zu sein: Ich benutze den Jboss und als Datenbank Oracle.
Läuft auch beides schon korrekt!

Welche Konfigdateien brauche ich dafür? web.xml, faces-config.xml ... was noch? Brauche ich die jboss-web.xml?
Habe ich wo gelesen, dennoch auf einer andere Seite wurde es verneint.

Ein einfaches Beispiel würde mir ungemein weiterhelfen. Hat jemand etwas?
 

rider

Aktives Mitglied
cool, hilft mir schon weiter, danke!

Nun noch eine weitere Frage:
welche Config - Dateien benötige ich denn alles?
Denn einmal steht es so, einmal so usw.

Noch mal zu meinen verwendeten Frameworks, Server etc.

JBoss, EJB 3.0 als Entwicklungsumgebung eben Ecklipse, dann noch Hibernate,
zum Testen JUnit, ANT, und als DB nehme ich Oracle.
 

JanHH

Top Contributor
Das Konzept von seam basiert ja gerade darauf, einem die ganze Arbeit mit den diversen xml-Konfigurationsdateien abzunehmen (und grösstenteils durch Annotationen zu ersetzen), und zum zweiten, die verschiedenen Container (JSF-managed beans, EJB-Container) zu einem universellen "seam-Container" zu einen. Damit zu arbeiten ist wirklich sehr einfach, aber es einmal konfiguriert zu kriegen, etwas nervig. Man kann damit auch ganz gut arbeiten, ohne wirklich zu verstehen was im Hintergrund passiert, aber auf Dauer ist das wohl nicht so klug.

Klassen, die man standardmässig benötigt, sind zum einen die Data-Model-Klassen (das, wo @Entity drüber steht), und stateless EJBs, die als ActionListener fungieren und die Arbeit übernehmen. JSF-managed beans braucht man bei seam gar nicht mehr, statt dessen werden stateless und stateful EJBs benutzt (auf die man aber direkt von der JSF-Seite aus zugreifen kann, da sich ja alles im universellen seam-Container befindet).

Für Dein Beispiel brauchst Du entsprechend die Entity-Klasse für die Datenbank, eine stateless EJB, die bei Klick auf irgendeinen Button aufgerufen wird und die Query ausführt, und eine Liste/Array aus den Entity-Objekten zurückliefert, die du dann mit JSF in einer datatable darstellst (beispielsweise).

Es ist etwas schwierig, das alles in ein paar kurzen Sätzen zu beschreiben, ausserdem arbeite ich mich dea selber auch gerade erst ein, aber es kommt mir sehr logisch, klar und sinnvoll vor.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben