json persistence framework

24
JSON, SQLite & Persistence Daniel Oskarsson Know IT

Upload: danieloskarsson

Post on 06-May-2015

3.153 views

Category:

Technology


2 download

DESCRIPTION

Presented at JavaForum 2011-11-24.

TRANSCRIPT

Page 1: Json Persistence Framework

JSON, SQLite & Persistence

Daniel Oskarsson Know IT

Page 2: Json Persistence Framework

Preface

24 slides and Netbeans Demo

Contents are more towards avoiding pitfalls than learning the basics.

Page 3: Json Persistence Framework

"Simplicity"

Page 4: Json Persistence Framework

JSON

json.org

Page 5: Json Persistence Framework

http://www.json.org

Page 6: Json Persistence Framework

+ -

json

xml

size validation

validation size

Page 7: Json Persistence Framework

JAX-RS JAX-WS

public class Tv { @GET @Path("/tv/") @Produces({"application/json"}) public List<Channel> getChannels() { List<Channel> channels = getChannels(); return channels; }}

Page 8: Json Persistence Framework

JAX-B

@XmlRootElementpublic class Channel { public Channel() {} @XmlElement private String id; @XmlElement private String name; @XmlElement public String getLogo() { return String.format(path, id); } @XmlElement public List<Program> getPrograms() { return getPrograms(); }}

Page 9: Json Persistence Framework

{

"channel":[

{

"id":"svt1.svt.se",

"name":"SVT1",

"logo":"svt1.svt.se.png",

"programs":[

{

"name":"Kulturnyheterna",

"start":"2011-11-23T18:00:00Z",

"stop":"2011-11-23T18:15:00Z"

},

{

"name":"Regionala nyheter",

"start":"2011-11-23T18:15:00Z",

"stop":"2011-11-23T18:30:00Z"

}

]

}]}

Page 10: Json Persistence Framework

SQLite

sqlite.org

Page 11: Json Persistence Framework

SQLite

"SQLite is a software library that implements a self-contained, server-less, zero-configuration, transactional SQL database engine"

"SQLite does not have a separate server process"

"SQLite reads and writes directly to ordinary disk files"

"Think of SQLite not as a replacement for Oracle but as a replacement for fopen()"

http://www.sqlite.org/about.html

Page 12: Json Persistence Framework

Storage Classes

Values are one of the following storage classes:

INTEGER (signed) REAL TEXT (UTF) NULL BLOB

BOOL (INTEGER 0 or INTEGER 1)DATE (ISO8601 TEXT or Unix Time INTEGER or Julian days)TIME (ISO8601 TEXT or Unix Time INTEGER or Julian days)

http://www.sqlite.org/datatype3.html

Page 13: Json Persistence Framework

Type Affinity

Columns are one the following type affinities:

INTEGERREALNUMERICTEXT (NULL, BLOB)NONE

Internally values may be casted before stored

http://www.sqlite.org/datatype3.html

Page 14: Json Persistence Framework

http://www.sqlite.org/lang_createtable.html

Page 15: Json Persistence Framework

Foreign keys

"Foreign key constraints are disabled by default (for backwards compatibility), so must be enabled separately for each database connection separately." (http://www.sqlite.org/foreignkeys.html)Class.forName("org.sqlite.JDBC");final String url = "jdbc:sqlite:json.db";

SQLiteConfig config = new SQLiteConfig();config.enforceForeignKeys(true);

Connection connection = DriverManager.getConnection(url, config.toProperties());

Page 16: Json Persistence Framework

As an in-memory-database

Class.forName("org.sqlite.JDBC");final String url = "jdbc:sqlite::memory:";Connection connection = DriverManager.getConnection(url);

Page 17: Json Persistence Framework

JDBC

http://www.xerial.org/trac/Xerial/wiki/SQLiteJDBC

<dependency> <groupId>org.xerial</groupId> <artifactId>sqlite-jdbc</artifactId></dependency>

Page 18: Json Persistence Framework

1+1=3

Page 19: Json Persistence Framework

JSON Persistence Framework

github.com/danieloskarsson/json-persistence

Page 20: Json Persistence Framework

Characteristics

Key-value-based persistence

Zero configuration No database setup No mappings

No modifications of domain objects No serializable No annotations

Apache 2.0 License

Page 21: Json Persistence Framework

Design decisions

Serialization & Deserialization JSON Serialization and Deserialization is NOT provided The user selects their favorite JSON library for the task

Versioning is NOT supported Some JSON libraries support versioning Some JSON libraries navigates the tree of the desired type As opposed to navigating the tree of the input

The data type is used as the key / id E.g. tv.domain.Channel[] or tv.domain.Channel Multiple instance of the same class must be in a list JSON should be parsed before it is persisted

Page 22: Json Persistence Framework

A perfect match with Smartphones

Page 23: Json Persistence Framework

SmartPhones often...

Comes bundled with support for JSONComes bundled with support for SQLiteReceive JSON data from a REST call

JSON Persistence Framework is forthcoming on Android iOS Windows Phone

Page 24: Json Persistence Framework

github.com/danieloskarsson

linkedin.com/in/danieloskarsson