You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Next »

JEST is a REST style access to any OpenJPA runtime.
REST (Representational State Transfer) is a foundational concept in the architecture for World Wide Web. JEST promotes REST style interaction between a client and an application based on OpenJPA. A JEST-enabled OpenJPA runtime embeds a specialized HTTP server such that a client (neither necessarily in Java nor having any definition of the persistent server objects) can send HTTP requests and receive persistent data as response in JSON, XML or other string based format.

Effectively there are three aspects to JEST

  • Protocol of client-server communication
  • Representation of persistent state
  • Transaction semantics

Protocol

The communication protocol for JEST is HTTP. The client sends request in standard HTTP URI (Uniform Resource Identifier) e.g. http://www.jpa.com:6789/find?Person&John to a JEST-enabled OpenJPA application to find a Person with primary key 'John'. The server will send a HTTP response back to the client. The content of the HTTP response can be formatted as XML or as JSON. The URI syntax governs the server response. Before describing the syntax in detail, here are few typical example URI and their associated effect on the server.

 

Server Function

JEST URI

01

Get name of the persistent unit

http://www.jpa.com:6789/

02

List simple name of the domain classes

http://www.jpa.com:6789/domain

03

List the key-value properties of the persistent unit

http://www.jpa.com:6789/properties

04

Find an instance by key

http://www.jpa.com:6789/find?Person&123456789

05

Find an instance by key

http://www.jpa.com:6789/find?Person&ssn=123456789&name=John

06

Get the result of the query with no parameter

http://www.jpa.com:6789/query?select p from Person p

07

Get the result of the query with single parameter

http://www.jpa.com:6789/query?select p from Person p where p.name=:name&name=John

08.1

Get the result of the query with multiple parameters

http://www.jpa.com:6789/query?select p from Person p where p.name=:name and age > :age&name=John&age=20

08.2

 

http://www.jpa.com:6789/query?select p from Person p where p.first=:first and p.last=:last&first=John&last=Doe

09

Get the single result of the query

http://www.jpa.com:6789/query/single?select p from Person p where p.name=:name&name=John

10

Get the result of the named query

http://www.jpa.com:6789/query/named?QueryPersonByName&name=John

11.1

Get the single result of the named query

http://www.jpa.com:6789/query/single/named?QueryPersonByName&name=John

11.2

or

http://www.jpa.com:6789/query/named/single?QueryPersonByName&name=John

12

Get first 20 rows of query using a fetch plan

http://www.jpa.com:6789/query/fecthplan=myPlan/ignoreCache/maxResult=20?select

p from Person p

URI syntax for JEST
   uri := http://host[:port]/action/[qualifier]*['?'[parameter]'&'*]

   qualifier := qualifier-key['='qualifier-value]
   parameter := parameter-key'='parameter-value 
   
   action    : denotes the JPA operation to be performed.
               For example, find, query, insert, merge, remove, properties, domain etc.

   qualifier : qualifies the action. 
               specific to the action, e.g. a query action can qualify with query/single to get a single result as in above ex09.
               zero or more qualifier can be specified. 
               qualifier may have value separated by '='  
               each qualifier is separated by '/' 
               qualifier ordering is not significant (see above ex11.1 and ex11.2)
            
   parameter  : parameter for the action
            For example, JPQL string is a parameter for a query action
            zero or more parameter can be specified
            parameter may have value separated by '='
            each parameter is separated by '&' 
            first parameter can have special semantics based on action, e.g. first parameter for 'query' is JPQL string, 
            or first parameter for 'find' is the entity name, etc.
  • No labels