SlideShare ist ein Scribd-Unternehmen logo
1 von 34
Downloaden Sie, um offline zu lesen
Introduction to Datastore
Assoc.Prof. Dr.Thanachart Numnonda
 Asst.Prof. Thanisa Kruawaisayawan

        www.imcinstitute.com
             July 2012
Agenda
What is DataStore?

Using DataStore

JPA in DataStore
What is DataStore?
What is Datastore?
Google App Engine Datastore is a schema-less persistence
  system, whose fundamental persistence unit is called Entity, c
  omposed by an immutable Key and a collection of mutable pr
  operties.
Entities can be created, updated, deleted, loaded by key and
  queried for properties values.
DataStore is consistent and transactional, with support to
  current transaction.
The DataStore
The Datastore is not a relational database nor a
 façade.
Relational database technology doesn’t scale
 horizontally
   – Connection pools, shared caching are a problem
The Datastore is one of many public APIs used for
 accessing Google’s
The DataStore
The DataStore
The DataStore : Operations
Transactions and Index are based on MegaTable.
File persistence it's done with Google File System
 (GFS).
It's distributed by Chubby, a lock service for loosely-
 coupled distributed systems.
BigTable
BigTable is a compressed, high performance, and
 proprietary database system built on Google File
 System (GFS), Chubby Lock Service, and a few other
 Google programs
Currently not distributed or used outside of Google.
BigTable development began in 2004. and is now used
 by a number of Google application Google Earth,
 Google Map, Gmail, Youtube, etc..
BigTable : Design
BigTable is a fast and extremely large-scale DBMS.
It is a sparse, distributed multi-dimensional sorted map,
 sharing characteristics of both row-oriented and column-
 oriented databases.
  sparse because only "not null" values are persisted
  distributed in Google cloud
  persistent on Google File System
  multidimensional in columns values
  ordered lexicographically by key
BigTable : Design
Tables are optimized for GFS by being split into
 multiple tablets - segments of the table.
BigTable is designed to scale into the petabyte.
Each table has multiple dimensions (one of which is a
 feld for time, allowing for versioning and garbage
 collection).
It allows an infnite number of rows and columns.
Google File System
GFS is a proprietary distributed fle system developed
 by Google.
It is designed to provide effcient, reliable access to
 data using large clusters of commodity hardware.
GFS grew out of an earlier Google effort, BigFiles,
 developed by Larry Page and Sergey Brin in the early
 days of Google, while it was still located in Stanford.
Using DataStore
DataStore Operations
Datastore operations are defned around entities (data
 models) which are objects with one or more properties
  Types: string, user, Boolean, and so on
  Entities may be recursive or self-referential
Entity relationships are one-to-many or many-to-many.
Entities may be fxed or grow as needed.
DataStore Storage Model
Every entity is of a particular kind
Entities in a kind need not have the same properties
  One entity may have different “columns” from another in
   the same kind!
Unique IDs are automatically assigned unless the user
 defnes a key_name
Compare DataStore with Others
DataStore Storage Model
Basic unit of storage is an Entity consisting of
   Kind (table)
   Key (primary key)
   Entity Group (partition)
   0..N typed Properties (columns)
Datastore Quotas
Each call to Datastore counts towards the quota
The amount of data cannot exceed the billable
      Includes properties and keys but not the indices
CPU and Datastore CPU time quotas apply
Using the Datastore
Applications may access the Datastore using the JDO
 or the JPA classes.
The JDO and JPA classes are abstracted using the
 DataNucleus API
  Open source
   Not very popular
   Support for Java standards
   Poor documentation
JPA in DataStore
Setting Up JPA
The JPA and datastore JARs must be in the app's
 war/WEB-INF/lib/ directory.
A confguration fle named persistence.xml must be in
 the app's war/WEB-INF/classes/META-INF/ directory,
A confguration fle tells JPA to use the App Engine
 datastore.
The appengine-api.jar must also be in the war/WEB-
 INF/lib/ directory.
persistence.xml: Example
<?xml version="1.0" encoding="UTF-8"?>
 <?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence"
 <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
   http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
    http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
    <persistence-unit name="thaijavaappPU" transaction-type="RESOURCE_LOCAL">
     <persistence-unit name="thaijavaappPU" transaction-type="RESOURCE_LOCAL">

  <provider>org.datanucleus.store.appengine.jpa.DatastorePersistenceProvider
   <provider>org.datanucleus.store.appengine.jpa.DatastorePersistenceProvider
  </provider>
   </provider>
   <non-jta-data-source/>
    <non-jta-data-source/>
  <properties>
   <properties>
      <property name="datanucleus.ConnectionURL" value="appengine"/>
       <property name="datanucleus.ConnectionURL" value="appengine"/>
      <property name="datanucleus.NontransactionalRead" value="true"/>
       <property name="datanucleus.NontransactionalRead" value="true"/>
      <property name="datanucleus.NontransactionalWrite" value="true"/>
       <property name="datanucleus.NontransactionalWrite" value="true"/>
    </properties>
     </properties>
  </persistence-unit>
   </persistence-unit>
</persistence>
 </persistence>
Getting an EntityManager Instance
An app interacts with JPA using an instance of the EntityManager.

import javax.persistence.EntityManagerFactory;
 import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
 import javax.persistence.Persistence;
public class EMF {{
 public class EMF

     private static final EntityManagerFactory emfInstance ==
      private static final EntityManagerFactory emfInstance
      Persistence.createEntityManagerFactory("transactions-optional");
       Persistence.createEntityManagerFactory("transactions-optional");

     public static EntityManagerFactory get() {{
      public static EntityManagerFactory get()
         return emfInstance;
          return emfInstance;
     }}
}}
Entity Class : Example
@Entity
 @Entity
public class GuestList implements Serializable {{
 public class GuestList implements Serializable
     ……
     @Id
      @Id
     private String id;
      private String id;

     @Basic
      @Basic
     private User author;
      private User author;
     private String content;
      private String content;
     @Temporal(javax.persistence.TemporalType.DATE)
      @Temporal(javax.persistence.TemporalType.DATE)
     private Date visitDate;
      private Date visitDate;
     ……
     // Getter and Setter methods
      // Getter and Setter methods
}}
Queries and Indices
A query operates on every entity of a given kind.
     Specify zero or more sort orders
     Specify zero or more flters on property values
Indices are defned in the App Engine confguration fles
     Results are fetched directly from these indices; no indices are
      created on the fly
     WEB-INF/datastore-indexes.xml - non-standard fles
Normalization is not recommended
     Optimization techniques for RDBMSs may result in poor
      Datastore performance!
Query : Example
EntityManager em == EMF.get().createEntityManager();
 EntityManager em    EMF.get().createEntityManager();
try {{
 try
     Query query == em.createQuery("SELECT oo FROM GuestList AS o");
      Query query    em.createQuery("SELECT    FROM GuestList AS o");
     @SuppressWarnings("unchecked")
      @SuppressWarnings("unchecked")
     List<GuestList> results == (List<GuestList>) query.getResultList();
      List<GuestList> results     (List<GuestList>) query.getResultList();
     for (Object obj :: results) {{
      for (Object obj    results)
              GuestList guest == (GuestList) obj;
               GuestList guest    (GuestList) obj;
         String nickname == guest.getAuthor().getNickname();
          String nickname    guest.getAuthor().getNickname();
         out.println(nickname ++ "" "" ++ guest.getId());
          out.println(nickname             guest.getId());
   }}
}} catch(Exception ex) {{
    catch(Exception ex)
     out.println(ex);
      out.println(ex);
}}
Entity Relationships
Models association between entities.
There are four types of relationship multiplicities:
     @OneToOne
     @OneToMany
     @ManyToOne
Supports unidirectional as well as bidirectional relationships
     Unidirectional relationship: Entity A references B, but B doesn't
      reference A.
Example : ManyToOne Mapping
Example : OneToMany Mapping
Transactions and Entity Groups
Transaction = Group of Datastore operations that either
 succeed or fail
Entity groups are required because all grouped entities are
 stored in the same Datastore node
An entity may be either created or modifed once per
 transaction
Transactions may fail if a different user or process tries an
 update in the same group at the same time
Users decide whether to retry or roll the transaction back
Transaction in JPA : Example
Book book == em.find(Book.class, "9780596156732");
 Book book    em.find(Book.class, "9780596156732");
BookReview bookReview == new BookReview();
 BookReview bookReview    new BookReview();
bookReview.rating == 5;
 bookReview.rating    5;
book.getBookReviews().add(bookReview);
 book.getBookReviews().add(bookReview);
Transaction txn == em.getTransaction();
 Transaction txn    em.getTransaction();
txn.begin();
 txn.begin();
try {{
 try
   book == em.merge(book);
    book    em.merge(book);
    txn.commit();
     txn.commit();
}} finally {{
    finally
     if (txn.isActive()) {{
      if (txn.isActive())
          txn.rollback();
           txn.rollback();
     }}
}}
Unsupported Features of JPA
Owned many-to-many relationships, and unowned
 relationships.
"Join" queries.
Aggregation queries (group by, having, sum, avg, max, min)
Polymorphic queries.
Resources
Google App Engine for Java HOWTO, Andrew Lombardi, Mar
 2010
The Softer Side Of Schemas, Max Ross, May 2009
Official Google App Engine Tutorial,
 http://code.google.com/appengine/docs/java/gettingstarted/
Programming Google App Engine, Don Sanderson, O'Reilly,
 2010
Thank you

   thananum@gmail.com
www.facebook.com/imcinstitute
   www.imcinstitute.com

Weitere ähnliche Inhalte

Was ist angesagt?

Suportando Aplicações Multi-tenancy com Java EE
Suportando Aplicações Multi-tenancy com Java EESuportando Aplicações Multi-tenancy com Java EE
Suportando Aplicações Multi-tenancy com Java EERodrigo Cândido da Silva
 
Java EE and Spring Side-by-Side
Java EE and Spring Side-by-SideJava EE and Spring Side-by-Side
Java EE and Spring Side-by-SideReza Rahman
 
Integration of Backbone.js with Spring 3.1
Integration of Backbone.js with Spring 3.1Integration of Backbone.js with Spring 3.1
Integration of Backbone.js with Spring 3.1Michał Orman
 
Java Spring MVC Framework with AngularJS by Google and HTML5
Java Spring MVC Framework with AngularJS by Google and HTML5Java Spring MVC Framework with AngularJS by Google and HTML5
Java Spring MVC Framework with AngularJS by Google and HTML5Tuna Tore
 
Java Web Programming [3/9] : Servlet Advanced
Java Web Programming [3/9] : Servlet AdvancedJava Web Programming [3/9] : Servlet Advanced
Java Web Programming [3/9] : Servlet AdvancedIMC Institute
 
Android intents-3 www.j2program.blogspot.com
Android intents-3 www.j2program.blogspot.comAndroid intents-3 www.j2program.blogspot.com
Android intents-3 www.j2program.blogspot.comMohamed Rimzan
 
CTS Conference Web 2.0 Tutorial Part 2
CTS Conference Web 2.0 Tutorial Part 2CTS Conference Web 2.0 Tutorial Part 2
CTS Conference Web 2.0 Tutorial Part 2Geoffrey Fox
 
Javatwo2012 java frameworkcomparison
Javatwo2012 java frameworkcomparisonJavatwo2012 java frameworkcomparison
Javatwo2012 java frameworkcomparisonJini Lee
 
OSGi and Spring Data for simple (Web) Application Development - Christian Bar...
OSGi and Spring Data for simple (Web) Application Development - Christian Bar...OSGi and Spring Data for simple (Web) Application Development - Christian Bar...
OSGi and Spring Data for simple (Web) Application Development - Christian Bar...mfrancis
 
MVC on the server and on the client
MVC on the server and on the clientMVC on the server and on the client
MVC on the server and on the clientSebastiano Armeli
 
Java Web Programming [8/9] : JSF and AJAX
Java Web Programming [8/9] : JSF and AJAXJava Web Programming [8/9] : JSF and AJAX
Java Web Programming [8/9] : JSF and AJAXIMC Institute
 
Local storage in Web apps
Local storage in Web appsLocal storage in Web apps
Local storage in Web appsIvano Malavolta
 
Spring 3.x - Spring MVC
Spring 3.x - Spring MVCSpring 3.x - Spring MVC
Spring 3.x - Spring MVCGuy Nir
 
Soa development using javascript
Soa development using javascriptSoa development using javascript
Soa development using javascriptDsixE Inc
 

Was ist angesagt? (18)

Suportando Aplicações Multi-tenancy com Java EE
Suportando Aplicações Multi-tenancy com Java EESuportando Aplicações Multi-tenancy com Java EE
Suportando Aplicações Multi-tenancy com Java EE
 
Java EE and Spring Side-by-Side
Java EE and Spring Side-by-SideJava EE and Spring Side-by-Side
Java EE and Spring Side-by-Side
 
Integration of Backbone.js with Spring 3.1
Integration of Backbone.js with Spring 3.1Integration of Backbone.js with Spring 3.1
Integration of Backbone.js with Spring 3.1
 
Java Spring MVC Framework with AngularJS by Google and HTML5
Java Spring MVC Framework with AngularJS by Google and HTML5Java Spring MVC Framework with AngularJS by Google and HTML5
Java Spring MVC Framework with AngularJS by Google and HTML5
 
Java Web Programming [3/9] : Servlet Advanced
Java Web Programming [3/9] : Servlet AdvancedJava Web Programming [3/9] : Servlet Advanced
Java Web Programming [3/9] : Servlet Advanced
 
Spring MVC
Spring MVCSpring MVC
Spring MVC
 
Android intents-3 www.j2program.blogspot.com
Android intents-3 www.j2program.blogspot.comAndroid intents-3 www.j2program.blogspot.com
Android intents-3 www.j2program.blogspot.com
 
CTS Conference Web 2.0 Tutorial Part 2
CTS Conference Web 2.0 Tutorial Part 2CTS Conference Web 2.0 Tutorial Part 2
CTS Conference Web 2.0 Tutorial Part 2
 
Javatwo2012 java frameworkcomparison
Javatwo2012 java frameworkcomparisonJavatwo2012 java frameworkcomparison
Javatwo2012 java frameworkcomparison
 
OSGi and Spring Data for simple (Web) Application Development - Christian Bar...
OSGi and Spring Data for simple (Web) Application Development - Christian Bar...OSGi and Spring Data for simple (Web) Application Development - Christian Bar...
OSGi and Spring Data for simple (Web) Application Development - Christian Bar...
 
MVC on the server and on the client
MVC on the server and on the clientMVC on the server and on the client
MVC on the server and on the client
 
Spring MVC Basics
Spring MVC BasicsSpring MVC Basics
Spring MVC Basics
 
4. jsp
4. jsp4. jsp
4. jsp
 
Java Web Programming [8/9] : JSF and AJAX
Java Web Programming [8/9] : JSF and AJAXJava Web Programming [8/9] : JSF and AJAX
Java Web Programming [8/9] : JSF and AJAX
 
Local storage in Web apps
Local storage in Web appsLocal storage in Web apps
Local storage in Web apps
 
Spring 3.x - Spring MVC
Spring 3.x - Spring MVCSpring 3.x - Spring MVC
Spring 3.x - Spring MVC
 
Soa development using javascript
Soa development using javascriptSoa development using javascript
Soa development using javascript
 
DataFX - JavaOne 2013
DataFX - JavaOne 2013DataFX - JavaOne 2013
DataFX - JavaOne 2013
 

Andere mochten auch

Developing Java Web Applications In Google App Engine
Developing Java Web Applications In Google App EngineDeveloping Java Web Applications In Google App Engine
Developing Java Web Applications In Google App EngineTahir Akram
 
บทความเรื่อง การใช้ Cloud Computing ในประเทศไทย
บทความเรื่อง การใช้ Cloud Computing ในประเทศไทยบทความเรื่อง การใช้ Cloud Computing ในประเทศไทย
บทความเรื่อง การใช้ Cloud Computing ในประเทศไทยIMC Institute
 
วิธีการประยุกต์ใช้ระบบ Cloud storage ของ Google Drive ในการบริหารจัดการข้อมูล
วิธีการประยุกต์ใช้ระบบ Cloud storage ของ Google Drive ในการบริหารจัดการข้อมูลวิธีการประยุกต์ใช้ระบบ Cloud storage ของ Google Drive ในการบริหารจัดการข้อมูล
วิธีการประยุกต์ใช้ระบบ Cloud storage ของ Google Drive ในการบริหารจัดการข้อมูลK S
 
๋Java Web Programming on Cloud Computing using Google App Engine
๋Java Web Programming on Cloud Computing using Google App Engine๋Java Web Programming on Cloud Computing using Google App Engine
๋Java Web Programming on Cloud Computing using Google App EngineIMC Institute
 
Cloud Computing กับการใช้งานในองค์กรต่างๆ
Cloud Computing กับการใช้งานในองค์กรต่างๆCloud Computing กับการใช้งานในองค์กรต่างๆ
Cloud Computing กับการใช้งานในองค์กรต่างๆSoftware Park Thailand
 
การประยุกต์ใช้ Cloud Computing สำหรับองค์กร
การประยุกต์ใช้  Cloud Computing สำหรับองค์กรการประยุกต์ใช้  Cloud Computing สำหรับองค์กร
การประยุกต์ใช้ Cloud Computing สำหรับองค์กรIMC Institute
 

Andere mochten auch (7)

คู่มือ Dropbox
คู่มือ Dropboxคู่มือ Dropbox
คู่มือ Dropbox
 
Developing Java Web Applications In Google App Engine
Developing Java Web Applications In Google App EngineDeveloping Java Web Applications In Google App Engine
Developing Java Web Applications In Google App Engine
 
บทความเรื่อง การใช้ Cloud Computing ในประเทศไทย
บทความเรื่อง การใช้ Cloud Computing ในประเทศไทยบทความเรื่อง การใช้ Cloud Computing ในประเทศไทย
บทความเรื่อง การใช้ Cloud Computing ในประเทศไทย
 
วิธีการประยุกต์ใช้ระบบ Cloud storage ของ Google Drive ในการบริหารจัดการข้อมูล
วิธีการประยุกต์ใช้ระบบ Cloud storage ของ Google Drive ในการบริหารจัดการข้อมูลวิธีการประยุกต์ใช้ระบบ Cloud storage ของ Google Drive ในการบริหารจัดการข้อมูล
วิธีการประยุกต์ใช้ระบบ Cloud storage ของ Google Drive ในการบริหารจัดการข้อมูล
 
๋Java Web Programming on Cloud Computing using Google App Engine
๋Java Web Programming on Cloud Computing using Google App Engine๋Java Web Programming on Cloud Computing using Google App Engine
๋Java Web Programming on Cloud Computing using Google App Engine
 
Cloud Computing กับการใช้งานในองค์กรต่างๆ
Cloud Computing กับการใช้งานในองค์กรต่างๆCloud Computing กับการใช้งานในองค์กรต่างๆ
Cloud Computing กับการใช้งานในองค์กรต่างๆ
 
การประยุกต์ใช้ Cloud Computing สำหรับองค์กร
การประยุกต์ใช้  Cloud Computing สำหรับองค์กรการประยุกต์ใช้  Cloud Computing สำหรับองค์กร
การประยุกต์ใช้ Cloud Computing สำหรับองค์กร
 

Ähnlich wie Java Web Programming on Google Cloud Platform [2/3] : Datastore

Hibernate Training Session1
Hibernate Training Session1Hibernate Training Session1
Hibernate Training Session1Asad Khan
 
Patni Hibernate
Patni   HibernatePatni   Hibernate
Patni Hibernatepatinijava
 
S03 hybrid app_and_gae_datastore_v1.0
S03 hybrid app_and_gae_datastore_v1.0S03 hybrid app_and_gae_datastore_v1.0
S03 hybrid app_and_gae_datastore_v1.0Sun-Jin Jang
 
Slice: OpenJPA for Distributed Persistence
Slice: OpenJPA for Distributed PersistenceSlice: OpenJPA for Distributed Persistence
Slice: OpenJPA for Distributed PersistencePinaki Poddar
 
What is struts_en
What is struts_enWhat is struts_en
What is struts_entechbed
 
App Grid Dev With Coherence
App Grid Dev With CoherenceApp Grid Dev With Coherence
App Grid Dev With CoherenceJames Bayer
 
Application Grid Dev with Coherence
Application Grid Dev with CoherenceApplication Grid Dev with Coherence
Application Grid Dev with CoherenceJames Bayer
 
App Grid Dev With Coherence
App Grid Dev With CoherenceApp Grid Dev With Coherence
App Grid Dev With CoherenceJames Bayer
 
[2015/2016] Local data storage for web-based mobile apps
[2015/2016] Local data storage for web-based mobile apps[2015/2016] Local data storage for web-based mobile apps
[2015/2016] Local data storage for web-based mobile appsIvano Malavolta
 
Configuring jpa in a Spring application
Configuring jpa in a  Spring applicationConfiguring jpa in a  Spring application
Configuring jpa in a Spring applicationJayasree Perilakkalam
 

Ähnlich wie Java Web Programming on Google Cloud Platform [2/3] : Datastore (20)

Introduction to Datastore
Introduction to DatastoreIntroduction to Datastore
Introduction to Datastore
 
ORM JPA
ORM JPAORM JPA
ORM JPA
 
Hibernate Training Session1
Hibernate Training Session1Hibernate Training Session1
Hibernate Training Session1
 
Patni Hibernate
Patni   HibernatePatni   Hibernate
Patni Hibernate
 
S03 hybrid app_and_gae_datastore_v1.0
S03 hybrid app_and_gae_datastore_v1.0S03 hybrid app_and_gae_datastore_v1.0
S03 hybrid app_and_gae_datastore_v1.0
 
.Net template solution architecture
.Net template solution architecture.Net template solution architecture
.Net template solution architecture
 
Data access
Data accessData access
Data access
 
Hibernate
HibernateHibernate
Hibernate
 
Slice: OpenJPA for Distributed Persistence
Slice: OpenJPA for Distributed PersistenceSlice: OpenJPA for Distributed Persistence
Slice: OpenJPA for Distributed Persistence
 
WPF and Databases
WPF and DatabasesWPF and Databases
WPF and Databases
 
Hibernate
HibernateHibernate
Hibernate
 
Spring data requery
Spring data requerySpring data requery
Spring data requery
 
What is struts_en
What is struts_enWhat is struts_en
What is struts_en
 
JavaEE Spring Seam
JavaEE Spring SeamJavaEE Spring Seam
JavaEE Spring Seam
 
App Grid Dev With Coherence
App Grid Dev With CoherenceApp Grid Dev With Coherence
App Grid Dev With Coherence
 
Application Grid Dev with Coherence
Application Grid Dev with CoherenceApplication Grid Dev with Coherence
Application Grid Dev with Coherence
 
App Grid Dev With Coherence
App Grid Dev With CoherenceApp Grid Dev With Coherence
App Grid Dev With Coherence
 
Struts2
Struts2Struts2
Struts2
 
[2015/2016] Local data storage for web-based mobile apps
[2015/2016] Local data storage for web-based mobile apps[2015/2016] Local data storage for web-based mobile apps
[2015/2016] Local data storage for web-based mobile apps
 
Configuring jpa in a Spring application
Configuring jpa in a  Spring applicationConfiguring jpa in a  Spring application
Configuring jpa in a Spring application
 

Mehr von IMC Institute

นิตยสาร Digital Trends ฉบับที่ 14
นิตยสาร Digital Trends ฉบับที่ 14นิตยสาร Digital Trends ฉบับที่ 14
นิตยสาร Digital Trends ฉบับที่ 14IMC Institute
 
Digital trends Vol 4 No. 13 Sep-Dec 2019
Digital trends Vol 4 No. 13  Sep-Dec 2019Digital trends Vol 4 No. 13  Sep-Dec 2019
Digital trends Vol 4 No. 13 Sep-Dec 2019IMC Institute
 
บทความ The evolution of AI
บทความ The evolution of AIบทความ The evolution of AI
บทความ The evolution of AIIMC Institute
 
IT Trends eMagazine Vol 4. No.12
IT Trends eMagazine  Vol 4. No.12IT Trends eMagazine  Vol 4. No.12
IT Trends eMagazine Vol 4. No.12IMC Institute
 
เพราะเหตุใด Digitization ไม่ตอบโจทย์ Digital Transformation
เพราะเหตุใด Digitization ไม่ตอบโจทย์ Digital Transformationเพราะเหตุใด Digitization ไม่ตอบโจทย์ Digital Transformation
เพราะเหตุใด Digitization ไม่ตอบโจทย์ Digital TransformationIMC Institute
 
IT Trends 2019: Putting Digital Transformation to Work
IT Trends 2019: Putting Digital Transformation to WorkIT Trends 2019: Putting Digital Transformation to Work
IT Trends 2019: Putting Digital Transformation to WorkIMC Institute
 
มูลค่าตลาดดิจิทัลไทย 3 อุตสาหกรรม
มูลค่าตลาดดิจิทัลไทย 3 อุตสาหกรรมมูลค่าตลาดดิจิทัลไทย 3 อุตสาหกรรม
มูลค่าตลาดดิจิทัลไทย 3 อุตสาหกรรมIMC Institute
 
IT Trends eMagazine Vol 4. No.11
IT Trends eMagazine  Vol 4. No.11IT Trends eMagazine  Vol 4. No.11
IT Trends eMagazine Vol 4. No.11IMC Institute
 
แนวทางการทำ Digital transformation
แนวทางการทำ Digital transformationแนวทางการทำ Digital transformation
แนวทางการทำ Digital transformationIMC Institute
 
บทความ The New Silicon Valley
บทความ The New Silicon Valleyบทความ The New Silicon Valley
บทความ The New Silicon ValleyIMC Institute
 
นิตยสาร IT Trends ของ IMC Institute ฉบับที่ 10
นิตยสาร IT Trends ของ  IMC Institute  ฉบับที่ 10นิตยสาร IT Trends ของ  IMC Institute  ฉบับที่ 10
นิตยสาร IT Trends ของ IMC Institute ฉบับที่ 10IMC Institute
 
แนวทางการทำ Digital transformation
แนวทางการทำ Digital transformationแนวทางการทำ Digital transformation
แนวทางการทำ Digital transformationIMC Institute
 
The Power of Big Data for a new economy (Sample)
The Power of Big Data for a new economy (Sample)The Power of Big Data for a new economy (Sample)
The Power of Big Data for a new economy (Sample)IMC Institute
 
บทความ Robotics แนวโน้มใหม่สู่บริการเฉพาะทาง
บทความ Robotics แนวโน้มใหม่สู่บริการเฉพาะทาง บทความ Robotics แนวโน้มใหม่สู่บริการเฉพาะทาง
บทความ Robotics แนวโน้มใหม่สู่บริการเฉพาะทาง IMC Institute
 
IT Trends eMagazine Vol 3. No.9
IT Trends eMagazine  Vol 3. No.9 IT Trends eMagazine  Vol 3. No.9
IT Trends eMagazine Vol 3. No.9 IMC Institute
 
Thailand software & software market survey 2016
Thailand software & software market survey 2016Thailand software & software market survey 2016
Thailand software & software market survey 2016IMC Institute
 
Developing Business Blockchain Applications on Hyperledger
Developing Business  Blockchain Applications on Hyperledger Developing Business  Blockchain Applications on Hyperledger
Developing Business Blockchain Applications on Hyperledger IMC Institute
 
Digital transformation @thanachart.org
Digital transformation @thanachart.orgDigital transformation @thanachart.org
Digital transformation @thanachart.orgIMC Institute
 
บทความ Big Data จากบล็อก thanachart.org
บทความ Big Data จากบล็อก thanachart.orgบทความ Big Data จากบล็อก thanachart.org
บทความ Big Data จากบล็อก thanachart.orgIMC Institute
 
กลยุทธ์ 5 ด้านกับการทำ Digital Transformation
กลยุทธ์ 5 ด้านกับการทำ Digital Transformationกลยุทธ์ 5 ด้านกับการทำ Digital Transformation
กลยุทธ์ 5 ด้านกับการทำ Digital TransformationIMC Institute
 

Mehr von IMC Institute (20)

นิตยสาร Digital Trends ฉบับที่ 14
นิตยสาร Digital Trends ฉบับที่ 14นิตยสาร Digital Trends ฉบับที่ 14
นิตยสาร Digital Trends ฉบับที่ 14
 
Digital trends Vol 4 No. 13 Sep-Dec 2019
Digital trends Vol 4 No. 13  Sep-Dec 2019Digital trends Vol 4 No. 13  Sep-Dec 2019
Digital trends Vol 4 No. 13 Sep-Dec 2019
 
บทความ The evolution of AI
บทความ The evolution of AIบทความ The evolution of AI
บทความ The evolution of AI
 
IT Trends eMagazine Vol 4. No.12
IT Trends eMagazine  Vol 4. No.12IT Trends eMagazine  Vol 4. No.12
IT Trends eMagazine Vol 4. No.12
 
เพราะเหตุใด Digitization ไม่ตอบโจทย์ Digital Transformation
เพราะเหตุใด Digitization ไม่ตอบโจทย์ Digital Transformationเพราะเหตุใด Digitization ไม่ตอบโจทย์ Digital Transformation
เพราะเหตุใด Digitization ไม่ตอบโจทย์ Digital Transformation
 
IT Trends 2019: Putting Digital Transformation to Work
IT Trends 2019: Putting Digital Transformation to WorkIT Trends 2019: Putting Digital Transformation to Work
IT Trends 2019: Putting Digital Transformation to Work
 
มูลค่าตลาดดิจิทัลไทย 3 อุตสาหกรรม
มูลค่าตลาดดิจิทัลไทย 3 อุตสาหกรรมมูลค่าตลาดดิจิทัลไทย 3 อุตสาหกรรม
มูลค่าตลาดดิจิทัลไทย 3 อุตสาหกรรม
 
IT Trends eMagazine Vol 4. No.11
IT Trends eMagazine  Vol 4. No.11IT Trends eMagazine  Vol 4. No.11
IT Trends eMagazine Vol 4. No.11
 
แนวทางการทำ Digital transformation
แนวทางการทำ Digital transformationแนวทางการทำ Digital transformation
แนวทางการทำ Digital transformation
 
บทความ The New Silicon Valley
บทความ The New Silicon Valleyบทความ The New Silicon Valley
บทความ The New Silicon Valley
 
นิตยสาร IT Trends ของ IMC Institute ฉบับที่ 10
นิตยสาร IT Trends ของ  IMC Institute  ฉบับที่ 10นิตยสาร IT Trends ของ  IMC Institute  ฉบับที่ 10
นิตยสาร IT Trends ของ IMC Institute ฉบับที่ 10
 
แนวทางการทำ Digital transformation
แนวทางการทำ Digital transformationแนวทางการทำ Digital transformation
แนวทางการทำ Digital transformation
 
The Power of Big Data for a new economy (Sample)
The Power of Big Data for a new economy (Sample)The Power of Big Data for a new economy (Sample)
The Power of Big Data for a new economy (Sample)
 
บทความ Robotics แนวโน้มใหม่สู่บริการเฉพาะทาง
บทความ Robotics แนวโน้มใหม่สู่บริการเฉพาะทาง บทความ Robotics แนวโน้มใหม่สู่บริการเฉพาะทาง
บทความ Robotics แนวโน้มใหม่สู่บริการเฉพาะทาง
 
IT Trends eMagazine Vol 3. No.9
IT Trends eMagazine  Vol 3. No.9 IT Trends eMagazine  Vol 3. No.9
IT Trends eMagazine Vol 3. No.9
 
Thailand software & software market survey 2016
Thailand software & software market survey 2016Thailand software & software market survey 2016
Thailand software & software market survey 2016
 
Developing Business Blockchain Applications on Hyperledger
Developing Business  Blockchain Applications on Hyperledger Developing Business  Blockchain Applications on Hyperledger
Developing Business Blockchain Applications on Hyperledger
 
Digital transformation @thanachart.org
Digital transformation @thanachart.orgDigital transformation @thanachart.org
Digital transformation @thanachart.org
 
บทความ Big Data จากบล็อก thanachart.org
บทความ Big Data จากบล็อก thanachart.orgบทความ Big Data จากบล็อก thanachart.org
บทความ Big Data จากบล็อก thanachart.org
 
กลยุทธ์ 5 ด้านกับการทำ Digital Transformation
กลยุทธ์ 5 ด้านกับการทำ Digital Transformationกลยุทธ์ 5 ด้านกับการทำ Digital Transformation
กลยุทธ์ 5 ด้านกับการทำ Digital Transformation
 

Kürzlich hochgeladen

Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 

Kürzlich hochgeladen (20)

Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 

Java Web Programming on Google Cloud Platform [2/3] : Datastore

  • 1. Introduction to Datastore Assoc.Prof. Dr.Thanachart Numnonda Asst.Prof. Thanisa Kruawaisayawan www.imcinstitute.com July 2012
  • 2. Agenda What is DataStore? Using DataStore JPA in DataStore
  • 4. What is Datastore? Google App Engine Datastore is a schema-less persistence system, whose fundamental persistence unit is called Entity, c omposed by an immutable Key and a collection of mutable pr operties. Entities can be created, updated, deleted, loaded by key and queried for properties values. DataStore is consistent and transactional, with support to current transaction.
  • 5. The DataStore The Datastore is not a relational database nor a façade. Relational database technology doesn’t scale horizontally – Connection pools, shared caching are a problem The Datastore is one of many public APIs used for accessing Google’s
  • 8. The DataStore : Operations Transactions and Index are based on MegaTable. File persistence it's done with Google File System (GFS). It's distributed by Chubby, a lock service for loosely- coupled distributed systems.
  • 9. BigTable BigTable is a compressed, high performance, and proprietary database system built on Google File System (GFS), Chubby Lock Service, and a few other Google programs Currently not distributed or used outside of Google. BigTable development began in 2004. and is now used by a number of Google application Google Earth, Google Map, Gmail, Youtube, etc..
  • 10. BigTable : Design BigTable is a fast and extremely large-scale DBMS. It is a sparse, distributed multi-dimensional sorted map, sharing characteristics of both row-oriented and column- oriented databases. sparse because only "not null" values are persisted distributed in Google cloud persistent on Google File System multidimensional in columns values ordered lexicographically by key
  • 11. BigTable : Design Tables are optimized for GFS by being split into multiple tablets - segments of the table. BigTable is designed to scale into the petabyte. Each table has multiple dimensions (one of which is a feld for time, allowing for versioning and garbage collection). It allows an infnite number of rows and columns.
  • 12. Google File System GFS is a proprietary distributed fle system developed by Google. It is designed to provide effcient, reliable access to data using large clusters of commodity hardware. GFS grew out of an earlier Google effort, BigFiles, developed by Larry Page and Sergey Brin in the early days of Google, while it was still located in Stanford.
  • 14. DataStore Operations Datastore operations are defned around entities (data models) which are objects with one or more properties Types: string, user, Boolean, and so on Entities may be recursive or self-referential Entity relationships are one-to-many or many-to-many. Entities may be fxed or grow as needed.
  • 15. DataStore Storage Model Every entity is of a particular kind Entities in a kind need not have the same properties One entity may have different “columns” from another in the same kind! Unique IDs are automatically assigned unless the user defnes a key_name
  • 17. DataStore Storage Model Basic unit of storage is an Entity consisting of Kind (table) Key (primary key) Entity Group (partition) 0..N typed Properties (columns)
  • 18. Datastore Quotas Each call to Datastore counts towards the quota The amount of data cannot exceed the billable  Includes properties and keys but not the indices CPU and Datastore CPU time quotas apply
  • 19. Using the Datastore Applications may access the Datastore using the JDO or the JPA classes. The JDO and JPA classes are abstracted using the DataNucleus API Open source  Not very popular  Support for Java standards  Poor documentation
  • 21. Setting Up JPA The JPA and datastore JARs must be in the app's war/WEB-INF/lib/ directory. A confguration fle named persistence.xml must be in the app's war/WEB-INF/classes/META-INF/ directory, A confguration fle tells JPA to use the App Engine datastore. The appengine-api.jar must also be in the war/WEB- INF/lib/ directory.
  • 22. persistence.xml: Example <?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?> <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"> http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"> <persistence-unit name="thaijavaappPU" transaction-type="RESOURCE_LOCAL"> <persistence-unit name="thaijavaappPU" transaction-type="RESOURCE_LOCAL"> <provider>org.datanucleus.store.appengine.jpa.DatastorePersistenceProvider <provider>org.datanucleus.store.appengine.jpa.DatastorePersistenceProvider </provider> </provider> <non-jta-data-source/> <non-jta-data-source/> <properties> <properties> <property name="datanucleus.ConnectionURL" value="appengine"/> <property name="datanucleus.ConnectionURL" value="appengine"/> <property name="datanucleus.NontransactionalRead" value="true"/> <property name="datanucleus.NontransactionalRead" value="true"/> <property name="datanucleus.NontransactionalWrite" value="true"/> <property name="datanucleus.NontransactionalWrite" value="true"/> </properties> </properties> </persistence-unit> </persistence-unit> </persistence> </persistence>
  • 23. Getting an EntityManager Instance An app interacts with JPA using an instance of the EntityManager. import javax.persistence.EntityManagerFactory; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import javax.persistence.Persistence; public class EMF {{ public class EMF private static final EntityManagerFactory emfInstance == private static final EntityManagerFactory emfInstance Persistence.createEntityManagerFactory("transactions-optional"); Persistence.createEntityManagerFactory("transactions-optional"); public static EntityManagerFactory get() {{ public static EntityManagerFactory get() return emfInstance; return emfInstance; }} }}
  • 24. Entity Class : Example @Entity @Entity public class GuestList implements Serializable {{ public class GuestList implements Serializable …… @Id @Id private String id; private String id; @Basic @Basic private User author; private User author; private String content; private String content; @Temporal(javax.persistence.TemporalType.DATE) @Temporal(javax.persistence.TemporalType.DATE) private Date visitDate; private Date visitDate; …… // Getter and Setter methods // Getter and Setter methods }}
  • 25. Queries and Indices A query operates on every entity of a given kind. Specify zero or more sort orders Specify zero or more flters on property values Indices are defned in the App Engine confguration fles Results are fetched directly from these indices; no indices are created on the fly WEB-INF/datastore-indexes.xml - non-standard fles Normalization is not recommended Optimization techniques for RDBMSs may result in poor Datastore performance!
  • 26. Query : Example EntityManager em == EMF.get().createEntityManager(); EntityManager em EMF.get().createEntityManager(); try {{ try Query query == em.createQuery("SELECT oo FROM GuestList AS o"); Query query em.createQuery("SELECT FROM GuestList AS o"); @SuppressWarnings("unchecked") @SuppressWarnings("unchecked") List<GuestList> results == (List<GuestList>) query.getResultList(); List<GuestList> results (List<GuestList>) query.getResultList(); for (Object obj :: results) {{ for (Object obj results) GuestList guest == (GuestList) obj; GuestList guest (GuestList) obj; String nickname == guest.getAuthor().getNickname(); String nickname guest.getAuthor().getNickname(); out.println(nickname ++ "" "" ++ guest.getId()); out.println(nickname guest.getId()); }} }} catch(Exception ex) {{ catch(Exception ex) out.println(ex); out.println(ex); }}
  • 27. Entity Relationships Models association between entities. There are four types of relationship multiplicities: @OneToOne @OneToMany @ManyToOne Supports unidirectional as well as bidirectional relationships Unidirectional relationship: Entity A references B, but B doesn't reference A.
  • 30. Transactions and Entity Groups Transaction = Group of Datastore operations that either succeed or fail Entity groups are required because all grouped entities are stored in the same Datastore node An entity may be either created or modifed once per transaction Transactions may fail if a different user or process tries an update in the same group at the same time Users decide whether to retry or roll the transaction back
  • 31. Transaction in JPA : Example Book book == em.find(Book.class, "9780596156732"); Book book em.find(Book.class, "9780596156732"); BookReview bookReview == new BookReview(); BookReview bookReview new BookReview(); bookReview.rating == 5; bookReview.rating 5; book.getBookReviews().add(bookReview); book.getBookReviews().add(bookReview); Transaction txn == em.getTransaction(); Transaction txn em.getTransaction(); txn.begin(); txn.begin(); try {{ try book == em.merge(book); book em.merge(book); txn.commit(); txn.commit(); }} finally {{ finally if (txn.isActive()) {{ if (txn.isActive()) txn.rollback(); txn.rollback(); }} }}
  • 32. Unsupported Features of JPA Owned many-to-many relationships, and unowned relationships. "Join" queries. Aggregation queries (group by, having, sum, avg, max, min) Polymorphic queries.
  • 33. Resources Google App Engine for Java HOWTO, Andrew Lombardi, Mar 2010 The Softer Side Of Schemas, Max Ross, May 2009 Official Google App Engine Tutorial, http://code.google.com/appengine/docs/java/gettingstarted/ Programming Google App Engine, Don Sanderson, O'Reilly, 2010
  • 34. Thank you thananum@gmail.com www.facebook.com/imcinstitute www.imcinstitute.com