Toon posts:

Annotations en Hibernate

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Ik ben bezig met het bouwen van een (JAVA) web applicatie. De weblaag is gebaseerd op spring mvc, spring IOC wordt gebruikt voor de business/service laag en hibernate voor de persistance laag.

Ik heb al wat ervaring met hibernate oude manier, en zat te denken nu annotations te gaan gebruiken.

Zoals ik het nu in gedachten heb ik een java bean die ik gebruik als domein object.
Deze wordt in de gui laag gevuld door hem te gebruiken als backingBean / Command object of hoe je het ook wil noemen.
Vanuit hier wordt ie doorgesluist naar de businesslaag en daar wordt dan de dao laag gebruikt om hem weer op te slaan. Redelijk standaard lijkt me.

Ik wil nu annotations gaan gebruiken wat betekend dat ik aan dat aan het domein object JPA (java persistance API) annotations ga toevoegen.
Maar doordat ik in alle lagen hetzelfde domein object gebruik, gebruik ik nu dus in m'n gui laag een domein object met hibernate annotations. En dat lijkt me wat vreemd.

Waar zit ik nu verkeerd te denken? Gebruik ik uberhaupt de term domein object wel goed.
Is het wel handig om datzelfde object door al die lagen te sturen? Het lijkt me zo vreemd om daar verschillende objecten voor te gebruiken als dat niet nodig is omdat je anders variablelen moet gaan kopieren?

Alvast bedankt!

  • DutchCommando
  • Registratie: November 2000
  • Laatst online: 12:07
Ik neem aan dat je met domein object eigenlijk je entity beans bedoelt. Java bean zegt niet zoveel over de soort bean, daar kunnen we dus (zeker als het verhaal op andere punten ook niet duidelijk is) weinig mee. De entity beans gebruik je doorgaans binnen je session beans (Door gebruik te maken van een EntityManager). Binnen een goed model stuur je dus ook niet een entity bean helemaal terug naar de Servlet of iets dergelijks.

Eigenlijk snap ik je vraag maar half. Ik hoop dat je aan het bovenstaande toch wat hebt.

Als voorbeeld voeg ik nog een model toe dat wij gebruiken voor een project op school. Hierbij gaat het om een eenvoudige bank met een Office Session Bean voor de klant en een Manager Session Bean voor de managers om nieuwe rekeningen etc. aan te maken.

Afbeeldingslocatie: http://tweakers.net/ext/f/f87fb5cbaae75ee26c4b8acc1ae525e6/full.jpg

[ Voor 10% gewijzigd door DutchCommando op 16-03-2007 15:22 ]


Verwijderd

DutchCommando schreef op vrijdag 16 maart 2007 @ 15:21:
Ik neem aan dat je met domein object eigenlijk je entity beans bedoelt. Java bean zegt niet zoveel over de soort bean, daar kunnen we dus (zeker als het verhaal op andere punten ook niet duidelijk is) weinig mee. De entity beans gebruik je doorgaans binnen je session beans (Door gebruik te maken van een EntityManager). Binnen een goed model stuur je dus ook niet een entity bean helemaal terug naar de Servlet of iets dergelijks.

Eigenlijk snap ik je vraag maar half. Ik hoop dat je aan het bovenstaande toch wat hebt.

Als voorbeeld voeg ik nog een model toe dat wij gebruiken voor een project op school. Hierbij gaat het om een eenvoudige bank met een Office Session Bean voor de klant en een Manager Session Bean voor de managers om nieuwe rekeningen etc. aan te maken.

[afbeelding]
Ik denk dat je het volledig verkeerd begrepen hebt DutchCommando. Maar dat komt door je opleiding. Tegenwoordig leren ze je nog steeds Entity en Session Beans te gebruiken. De zogenaamde Enterprise JavaBeans (EJB's). Maar in de praktijk worden deze (vooral bij nieuwe software) niet meer gebruikt. Hibernate is een zgn lightweight persistence API. Hibernate gebruik je in plaats van Entity Beans. Met de domein objecten bedoelt Temmink vermoed ik simpele beans (een Java class met private vars en public getters en setters), om data van de ene plaats naar de andere plaats de vervoeren.

Verder begrijp ik de vraag ook niet volledig. De annotations gebruik je in de domein objecten die je waarschijnlijk in je datalaag definieerd, en gewoon hergebruikt in andere lagen. Wat bedoel je precies met beans kopieren en annotations in de presentatielaag gebruiken?

Verwijderd

Topicstarter
Bedankt voor de reacties.

Ik heb het inderdaad niet over EJB's.

Ik zal proberen het wat duidelijker te maken met een voorbeeld.

Stel ik heb een web pagina waar ik mijn adres gegevens kan invullen. Wanneer ik nu op de submit button druk zorgt spring mvc ervoor dat die data wordt gebonden aan een java bean
Java:
1
2
3
4
5
6
7
8
9
10
11
12
public class NAWBean{
  String naam;
  String adress;
  etc......

  public String getName(){
    return name;
  }
  public void setName(String name){
    this.name=name;
  }
  etc..

In mijn business layer heb ik een NAWService waarmee ik een nieuw NAW data object kan opslaan. Deze roep ik aan vanuit de presentatie laag wanneer ik de gegevens wil opslaan.

Java:
1
2
3
4
5
6
public class NAWServiceImpl implements NAWService{
  NAWDao nawDao;

  public void createNAWObject(NAWBean nawBean){
      nawDao.createNAWObject(nawBean);
  }


De dao slaat dan uiteindelijk mbv hibernate dit object op

Java:
1
2
3
4
public class NAWHibernateDaoImpl extends HibernateDaoSupport implements NAWDao{

  public void createNAWObject(NAWBean nawBean){
    getHibernateTemplate.save(nawBean);


Ik maak in mijn presentatie laag een data object aan(NAWBean) en deze geef ik via de business laag door aan de dao laag.
Op de oude manier (zonder annotations) kan ik een naw.hbm.xml file aanmaken waarin ik aangeef naar welke tabel en welke kolom een veld moet worden gepersisteerd en dan ben ik klaar.

Wanneer ik annotations ga gebruiken moet ik die annotions gaan toevoegen aan mijn dataobject(NAWBean). Maar ik gebruik diezelfde bean ook in mijn presentatie laag. Het lijkt mij dat jpa annotaties niet thuishoren in de presentatielaag. Stel ik besluit alles naar een xml bestand te schrijven, dan vervang ik mijn NAWHibernateDao door een NAWXMLDao, maar dan heb ik nog steeds die annotations in mijn dataobject(NAWBean) zitten.

Enige optie die ik dan zie is:
Kopieer in de dao de variablelen in mijn dataobject(NAWBean) naar een geannoteerde versie en sla die op.
Maar ja, lijkt me een beetje nutteloze kopieerslag en dus niet netjes. Heeft iemand hier ideeen over?

offtopic
Hibernate is een zgn lightweight persistence API. Hibernate gebruik je in plaats van Entity Beans.
Ik denk niet dat het in plaats van is, Het hibernate project valt tegenwoordig onder JBoss, JBoss maakt dan ook gebruikt van hibernate om haar Entity beans te implementeren.
Wil niet bijdehand overkomen, maar toch even ter info. ;)

[ Voor 7% gewijzigd door Verwijderd op 17-03-2007 22:25 ]


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Verwijderd schreef op vrijdag 16 maart 2007 @ 14:53:
Hallo,

Ik ben bezig met het bouwen van een (JAVA) web applicatie. De weblaag is gebaseerd op spring mvc, spring IOC wordt gebruikt voor de business/service laag en hibernate voor de persistance laag.

Ik heb al wat ervaring met hibernate oude manier, en zat te denken nu annotations te gaan gebruiken.

Zoals ik het nu in gedachten heb ik een java bean die ik gebruik als domein object.
Deze wordt in de gui laag gevuld door hem te gebruiken als backingBean / Command object of hoe je het ook wil noemen.
Vanuit hier wordt ie doorgesluist naar de businesslaag en daar wordt dan de dao laag gebruikt om hem weer op te slaan. Redelijk standaard lijkt me.
check de volgende blog Business layer: why save/update(entity) is bad


En verder zie ik nog steeds niet het grote voordeel van annotations. Ik heb de indruk dat veel mensen aan het doorslaan zijn omdat ze zo van XML walgen en ze nog niet helemaal begrijpen dat het externalizeren van die informatie wel zo handig is ivm overzicht en wijzigbaarheid,

leuk voorbeeldje van hibernate annotations gone bad:
dude, where is my class