{"id":390,"date":"2009-08-19T09:25:00","date_gmt":"2009-08-19T09:25:00","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=390"},"modified":"2009-08-19T09:25:00","modified_gmt":"2009-08-19T09:25:00","slug":"zusammenfassung-der-anderungen-von-ejb-3-1-und-jpa-2","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2009\/08\/zusammenfassung-der-anderungen-von-ejb-3-1-und-jpa-2\/","title":{"rendered":"Zusammenfassung der \u00c4nderungen von EJB 3.1 und JPA 2"},"content":{"rendered":"<ul>\n<li>Die lokale Schnittstelle (local view) einer lokalen Session Bean kann nun entfallen, da direkt die \u00f6ffentlichen Methoden als Schnittstelle verwendet werden k\u00f6nnen. Eine lokale Session Bean muss daher keine Schnittstelle mehr implementieren, um injiziert zu werden und Methoden anzubieten. <\/li>\n<li>EJBs m\u00fcssen nicht mehr in einem EAR-Archiv verpackt sein, sondern k\u00f6nnen einfach in einem WAR deployed werden. Im Fall von WAR-Archiven liegen dann die Klassen unter WEB-INF\/classes.\n<li>Mit der Annotation @Singleon l\u00e4sst ein Singleton markieren, sodass sich eine Session Bean (die auch Business Schnittstellen implementieren kann) von unterschieden Stellen nutzen l\u00e4sst, aber eben nur einmal in der JVM vorhanden ist.\n<li>Die Annotation @Startup ist ein Zusatz f\u00fcr @Singleton, um \u00fcber das Hoch-\/Runterfahren des Applikationsservers informiert zu werden. Die Callbackmethoden nutzen das bekannte @PostConstruct und @PreDestroy.\n<li>Der EntityManager erlaubt ein detach().\n<li>Embeddable&#8217;s k\u00f6nnen in JPA 2.0 geschachtelt sein und Relationen eingehen.\n<li>Weitere Mappings bei JPA-Tabellen. Map-Keys k\u00f6nnen nun einfache Objekte, Entities und embedded Entities sein.\n<li>Bisher konnten etwa 1:n-Assoziationen immer nur Verweise auf Entity-Beans realisieren, aber keine Sammlungen etwa von Strings oder Datums-Objekten. Das \u00e4ndert sich mit JPA 2.0, das Collections von Elementen erlaubt. Hier zieht JPA eine Collection-Table heran.\n<li>Die Entities im Persistence Context eines Entity-Managers sind in einem Cache, dem Level 1 Cache. Bei zwei Entity-Managern ist es implementierungsabh\u00e4ngig, wie zum Beispiel zwei gleiche Entity-Beans in den beiden EM gehalten werden. Das bestimmt ein Level 2 Cache. Dieser Level 2 Cache l\u00e4sst sich \u00fcber die Shared Cache API von JPA 2.0 rudiment\u00e4r kontrollieren.\n<li>Mit einer @Version-Spalte erlaubt JPA 1.0 schon immer optimistisches Locking, allerdings nur optimistische Lese- oder Schreib-Sperren. Mit JPA 2.0 wird \u00fcber die Enum LockMode nun Optimistisches und auch Pessimistisches Locking unterst\u00fctzt.\n<li>Eine neue Criteria-API kommt in JPA 2.0 und damit neue Typen wie QueryBuilder, CriteriaQuery. Die API folgt dem Fluent-Interface Prinzip, etwa wie bei criteriaQuery.select(entity.get(&#8222;id&#8220;)).where(queryBuilder.cojunction(queryBuilder.equals(&#8230;), &#8230;)).\n<li>JPA-QL kennt f\u00fcr Datumswerte nun auch Literale.\n<li>JPA-QL unterst\u00fctzt polymorphe Anfragen der Art WHERE CLASS(e) = Klassenname.\n<li>JPA-QL erm\u00f6glicht CASE-Anfragen wie eine Fallunterscheidung.\n<li>JPA-QL erlaubt in der WHERE-Klausel Zugriff auf den Index einer Liste.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Die lokale Schnittstelle (local view) einer lokalen Session Bean kann nun entfallen, da direkt die \u00f6ffentlichen Methoden als Schnittstelle verwendet werden k\u00f6nnen. Eine lokale Session Bean muss daher keine Schnittstelle mehr implementieren, um injiziert zu werden und Methoden anzubieten. EJBs m\u00fcssen nicht mehr in einem EAR-Archiv verpackt sein, sondern k\u00f6nnen einfach in einem WAR deployed [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[9],"tags":[],"class_list":["post-390","post","type-post","status-publish","format-standard","hentry","category-java-ee"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/390","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=390"}],"version-history":[{"count":0,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/390\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=390"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=390"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=390"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}