Your SlideShare is downloading. ×
Ebean
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Ebean

881

Published on

Topiconf 2009

Topiconf 2009

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
881
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • Aannames:Enigekennis van DatabasesJava/.net
  • IkzaljullielatenzienwatEbeaninhoudt, sommigedelenzullenbekendvoorkomen, maareenaantalaspectenzijnveelbelovend. GezienEbeannogaardig in ontwikkeling is kanikniet van elkeonderdeelalles tot in de diepteuitleggen. Maar ten eerste:
  • Is ebeansessieloos. In tegenstelling tot andere ORM pakkettenheeftebeangeensessie management. In plaatshiervanwordtditvoornamelijk in de entiteitzelfonthouden. Wanneeriemandietswijzigtweet het object zelf of het “dirty” is. Ofwel of het gewijzigd is t.o.v. de database.Watebeanwelheeft is eenpersistance context. Dezezorgtervoordatelke object maar 1 keerbestaat. Je krijgt in feitealleennieuwereferentiesnaarhetzelfde object. Dit is tovandere ORM pakettennietechtanders. De persistance context bestaat van het begin van eentransactie tot het eind van de request cycle.Eennadeel vandezeaanpak is weldatwijzigingen op properties van het entiteit van mutable types nietwordenmeegenomen. Denkhierbijaaneen Date, als je hiereen dag bijopteltwordtdit intern gedaan en niet op het entiteit. Je moetdandus de date vervangen met eennieuwe.Van sessiesgaan we naarautofetching.
  • Autofetching is een term die bedacht is door Ali Ibrahim en William Cook, zijhebbenditideeuitgewerkt in een paper waarinzeuitleggen hoe autofetchingwerkt. In het kortwerkt het door het gedrag van de applicatie live te analyseren en te kijkenwelkevelden van de opgehaaldeEnteitennodigzijn en dezeautomatisch op te halen. Ditwerkt in combinatie met zogeheten lazy objects, objecten die maargedeeltelijkzijnopgehaalduit de database omzo de round-trip tijd te verkorten.
  • APIeigen query taal named queries
  • Net als elk ander ORMkan je via een API queries bouwen, maarwanneerwenselijkkanditook via eeneigen query taal..NET mensenzullendeze method chaining herkennen van Linq, het lijkteropmaardat is danookalles.
  • // find all the orders (with orderDetails and products)// ... fetching the order id, orderDate and shipDate// ... fetching all the properties for orderDetail// ... fetching the product id, sku and name
  • Ebeanheeftzijneigentransactiemethoden@TransactionalTxRunnable en TxCallablecreateTransaction() en beginTransaction()Spring transaction support wordtaangewerkt.
  • // get the row count in the background...// ... otherwise it is fetched on demand// ... when getTotalRowCount() or getTotalPageCount()// ... is called
  • Demeesteprojectenhebben Hibernate al erg ingeburgerd en ondanksverwoedepogingen van veelontwikkelaarsomtussen de sproetjes Hibernate overalzoveelmogelijk te verwijderenzalditnooitlukken. Met proxies en met specialeactiesom de beloofde performance te halen is diteenhel.Voor nieuweprojectenzal het eenleukideezijn, zelfbenik al bezig met eenkleinprojectjeom Hibernate te verwijderen. Met maareenhandjevolentiteitenzalditniet erg moeilijkzijn, het meestezal in het onderwijs framework Cobra zitten. Hier is hibernate al knap irritant maarechtebikkelsgevenniet op.Een van de voordelenzaltochwelzijndatergeensessiebij je entiteiten is en dat je zodoende je objectenkanbewarenzoals je datzelf correct acht. Met autofetching is ebeaneengoedewegingeslagen want ditzalbijzwaresystementochweleenboelschelen.
  • Transcript

    • 1. Ebean
      Een hibernate killer
      Hielke Hoeve
      TopicusOnderwijs
    • 2. Ebean
      (Yet another) ORM implementatie
      Sessies / Autofetching / Queries / Transactions / Async. Query Executions
    • 3. Sessieloos
      Sessie management is vies
    • 4. Autofetching
      Statistischeanalyse voor lazy loading
      Ali Ibrahim & William R. Cook
      University of Texas
      http://www.cs.utexas.edu/~aibrahim/autofetch/
    • 5. Queries
      Makkelijke queries maken
    • 6. Queries (voorbeeld 1)
      List<Order> list = Ebean.find(Order.class)
      .join("customer")
      .where().eq("status.code", "SHIPPED")
      .findList();
    • 7. Queries (voorbeeld 2)
      find order (orderDate, shipDate)
      join orderDetails (*)
      join product (sku, name)
      where customer.name like :custname
      3 auto joins
    • 8. Queries (voorbeeld 2)
      select order.orderDate, order.shipDate,
      orderDetails.*, product.sku, product.name
      from order
      left outer join orderDetails
      onorderDetails .order = order.id
      left outer join product
      on orderDetails.product = product.id
      inner join customer
      on customer.id = order.customer
      where customer.name like :custname
    • 9. Queries (voorbeeld 3)
      @NamedQueries(value={
      @NamedQuery(name="bugsSummary“, query=“..."),
      @NamedQuery(name="bugStatus“, query=“...")
      })
      @Entity
      @Table(name="s_user")
      public class User implements Serializable {
    • 10. Transactions
      Not invented by me
    • 11. Async. Query Executions
      FutureList & PagingList
    • 12. Async. Query Executions
      Query<Order> query = Ebean.find(Order.class);
      FutureList<Order> futureList = query.findFutureList();
      if (!futureList.isDone())
      futureList.cancel(true);
      List<Order> list = futureList.get();
      // or with a timeout
      List<Order> list2 = futureList.get(30, TimeUnit.SECONDS);
    • 13. Async. Query Executions
      PagingList<TOne> pagingList = Ebean.find(TOne.class).findPagingList(pageSize);
      Future<Integer> futRowCount = pagingList.getFutureRowCount();
      Page<TOne> page = pagingList.getPage(0);
      List<TOne> pageList = page.getList();
      int totalRows = page.getTotalRowCount();
    • 14. Conclusie
    • 15. Fin

    ×