• Save
Ebean
Upcoming SlideShare
Loading in...5
×
 

Ebean

on

  • 936 views

Topiconf 2009

Topiconf 2009

Statistics

Views

Total Views
936
Views on SlideShare
934
Embed Views
2

Actions

Likes
0
Downloads
0
Comments
0

1 Embed 2

http://www.linkedin.com 2

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • 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.

Ebean Ebean Presentation Transcript

  • Ebean
    Een hibernate killer
    Hielke Hoeve
    TopicusOnderwijs
  • Ebean
    (Yet another) ORM implementatie
    Sessies / Autofetching / Queries / Transactions / Async. Query Executions
  • Sessieloos
    Sessie management is vies
  • Autofetching
    Statistischeanalyse voor lazy loading
    Ali Ibrahim & William R. Cook
    University of Texas
    http://www.cs.utexas.edu/~aibrahim/autofetch/
  • Queries
    Makkelijke queries maken
  • Queries (voorbeeld 1)
    List<Order> list = Ebean.find(Order.class)
    .join("customer")
    .where().eq("status.code", "SHIPPED")
    .findList();
  • Queries (voorbeeld 2)
    find order (orderDate, shipDate)
    join orderDetails (*)
    join product (sku, name)
    where customer.name like :custname
    3 auto joins
  • 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
  • Queries (voorbeeld 3)
    @NamedQueries(value={
    @NamedQuery(name="bugsSummary“, query=“..."),
    @NamedQuery(name="bugStatus“, query=“...")
    })
    @Entity
    @Table(name="s_user")
    public class User implements Serializable {
  • Transactions
    Not invented by me
  • Async. Query Executions
    FutureList & PagingList
  • 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);
  • 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();
  • Conclusie
  • Fin