für Java Entwickler und Architekten - Schema Evolution und...

52
für Java Entwickler und Architekten - Schema Evolution und Maintenance { "name" : "Timmo Freudl-Gierke", "twitter" : "@timmo_gierke", "blog" : "http://blog-it.hypoport.de/" }

Transcript of für Java Entwickler und Architekten - Schema Evolution und...

Page 1: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation

für Java Entwickler und Architekten - Schema Evolution und Maintenance

{ "name" : "Timmo Freudl-Gierke", "twitter" : "@timmo_gierke", "blog" : "http://blog-it.hypoport.de/"}

Page 2: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation
Page 3: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation
Page 4: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation

mongoenormgigantischriesig

humongous

Page 5: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation

Schema Free

Page 6: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation

Hierarchie

Page 8: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation

Ziel Platformen

Page 9: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation

Mon

go K

onso

le

Page 10: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation
Page 11: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation
Page 12: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation

Später mehr ...

Continuous Deployment

Page 13: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation
Page 14: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation

Schema / JSON Structure

{ name : "Schulze", strasse : "Sonntagstr. 20", plz : "10245", ort : "Berlin",}

Application Domain Model

Page 15: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation

MongoDB Java Driver

DBObject document = new BasicDBObject("name", "Schulze");document.put("strasse", "Sonntagstr. 20");...

{ "_id" : ObjectId("4f7258da30046355dfe6a1a8"), "name" : "Schulze", "strasse" : "Sonntagstr. 20"}

Page 16: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation

Unit Test - Setup

Page 17: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation

Unit Test - Mongo Driver

Page 18: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation

Object - Document Mapper

Spring Data

• MongoTemplate

• Exception Translation

• Rich Object Mapping

• Lifecycle Events

• Repository Support

• javax.persistence style

• Annotation Based Mapping

• DAO Support

MongoDB Jackson Mapper

• Wraps Mongo DB + Collection API

• Full Jackson Extensibility

• Fast

Page 19: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation

Unit Test

Page 20: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation
Page 21: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation

1)

1)

2)

3)

Page 22: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation

{ name : "Schulze", strasse : "Sonntagstr. 20", plz : "10245", ort : "Berlin",}

1)

1)

{ name : "Schulze", adresse : { strasse : "Sonntagstr. 20", plz : "10245", ort : "Berlin", }}

2)

{ name : "Schulze", adresse : { strasse : "Sonntagstr.", hausnummer : "20", plz : "10245", ort : "Berlin", }}

3)

Page 23: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation

1

Javascript

Page 24: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation

Field Renaming

{$rename : {"oldFieldName" : "newFieldName"} }

db.personen.update({},{$rename:{"strasse":"adresse.strasse"}},0,1)db.personen.update({},{$rename:{"plz":"adresse.plz"}},0,1)db.personen.update({},{$rename:{"ort":"adresse.ort"}},0,1)

1

Javascript

Page 25: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation

1

Javascript

var personen = db.personen.find({})personen.forEach( function(p) { if (p.adresse != null) { var original = p.adresse.strasse var strasse = original.match(/[A-Za-z\.]+/)[0] var nummer = original.match(/[0-9]+[a-z]*/)[0] p.adresse.strasse = strasse p.adresse.hausnummer = nummer db.personen.save(p)}})

Field Splitting

Page 26: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation

Console Skripting

> mongo setup.js migrate.js teardown.js

1

Javascript

Page 27: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation

Console Skripting1

Javascript

D E M O

Page 28: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation

2

Java

Page 29: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation

MigrateAdresse.java2

Java

DBObject person = ...

DBObject adresse = new BasicDBObject();adresse.put("strasse", person.get("strasse"));adresse.put("plz", person.get("plz"));adresse.put("ort", person.get("ort"));

person.put("adresse", adresse);

person.removeField("strasse");person.removeField("plz");person.removeField("ort");

collection.save(person);

Page 30: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation

MigrateAdresse.java2

Java

copy(person, "strasse", "adresse.strasse")copy(person, "plz", "adresse.plz")copy(person, "ort", "adresse.ort")

collection.save(person);

Page 31: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation

MigrateAdresseTest.java2

Java

@Testpublic void testMigrateAdresse() { // given String json = getFileAsJson(this.getClass(), "person_v1.json"); DBObject person = (DBObject) JSON.parse(json); // when new MigrateAdresse().migrate(person); // then DBObject adresse = (DBObject) person.get("adresse"); assertThat(adresse.get("plz")).isEqualTo("10245");}

Page 32: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation

Migration vor Deployment

(2)

(1)

Produktiv System

Page 33: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation

Continuous Deployment

Produktiv System

25 / Tag

Page 34: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation

Continuous Deployment

Page 35: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation
Page 36: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation

On the fly version conversion

3JavaOn the

flyconversion

Page 37: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation

3JavaOn the

flyconversion

{ "class" : "Person", "name":"Schulze", "strasse":"Sonntagstr. 20", "plz":"10245", "ort":"Berlin"}

v1{ "class":"Person", "name":"Schulze", "adresse":{ "strasse":"Sonntagstr. 20", "plz":"10245", "ort":"Berlin" }}

v2{ "class":"Person", "name":"Schulze", "adresse":{ "strasse":"Sonntagstr.", "hausnummer":"20", "plz":"10245", "ort":"Berlin" }}

v3

Page 38: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation

3JavaOn the

flyconversion

Page 39: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation

3JavaOn the

flyconversion

Version Converter Beispiel

Page 40: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation

3JavaOn the

flyconversion

Version Converter Unit Test

Page 41: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation

Composite Version Converter Beispiel

public class PersonVersionConverter extends CompositeVersionConverter { public PersonVersionConverter() { setCurrentVersion(getFileContent("/domainModel-version.txt")); registerConverter(new VersionConverter_1to2_Adresse()); registerConverter(new VersionConverter_2to3_HausnummerExtraktion()); // ... }

3 model

Version.txt

3JavaOn the

flyconversion

Page 42: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation

3JavaOn the

flyconversion

Composite Version Converter

Integrations Test

{ "class" : "Person", "name":"Schulze", "strasse":"Sonntagstr. 20", "plz":"10245", "ort":"Berlin"}

v1

{ "class":"Person", "name":"Schulze", "adresse":{ "strasse":"Sonntagstr. 20", "plz":"10245", "ort":"Berlin" }}

v2

{ "class":"Person", "name":"Schulze", "adresse":{ "strasse":"Sonntagstr.", "hausnummer":"20", "plz":"10245", "ort":"Berlin" }}

v3

Page 43: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation

Version Conversion Integrations Test

3JavaOn the

flyconversion

Page 44: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation

Queriespersonen = getCollection().find(queryBuilder().put("name").is("Schulze"))

personen.addAll( getCollection().find(queryBuilder().put("name").is("Schulze")))personen.addAll( getCollection().find(queryBuilder().put("neuerName").is("Schulze")))

3JavaOn the

flyconversion

Page 45: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation
Page 46: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation
Page 47: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation
Page 48: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation
Page 49: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation

JSON Structure

Domain Model

Page 50: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation

1Javascript

2Java

3JavaOn the

fly

Schema Evolution

Page 51: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation

MongoDB User Group Berlinin Gründung@MUGBerlin

Ausblick

VersionConversion integration in OD Mapper

Page 52: für Java Entwickler und Architekten - Schema Evolution und ...bed-con.org/2012/files/slides/mongoDB-fuer-java-entwickler.pdf · Spring Data • MongoTemplate • Exception Translation

für Java Entwickler und Architekten - Schema Evolution und Maintenance

{ "name" : "Timmo Freudl-Gierke", "twitter" : "@timmo_gierke", "blog" : "http://blog-it.hypoport.de/"}