97
JAVERS: CODE AUDIT LOGS EASILY IN JAVA KARSTEN SILZ, 21 OCTOBER 2020

JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

  • Upload
    others

  • View
    15

  • Download
    0

Embed Size (px)

Citation preview

Page 1: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

JAVERS: CODE AUDIT LOGS EASILY IN JAVAKARSTEN SILZ, 21 OCTOBER 2020

Page 2: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

BPF.LI/DOG

SLIDES

SAMPLE CODE

HOW TO BUILD JAVA APPS TODAY?

Page 3: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

OPTIMIZED FOR YOUTUBE ON 4.7" SCREEN (IPHONE 6)

Page 4: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

SUFFERED FROM CHANGED DATA?

Page 5: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,
Page 6: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

SHOW AUDIT LOG TO USERS: WHO CHANGED WHAT WHEN HOW?

Page 7: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

CUSTOMER: NO EMAIL

EMAIL ADDRESS: OK

Page 8: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,
Page 9: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,
Page 10: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,
Page 11: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

COMPARE 2 VERSIONS

Page 12: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

COMPARE 2 VERSIONS

VERSION INFORMATION

Page 13: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

COMPARE 2 VERSIONS

VERSION INFORMATIONCUSTOMER DATA

Page 14: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

COMPARE 2 VERSIONS

CHANGES BETWEEN VERSIONS

VERSION INFORMATIONCUSTOMER DATA

Page 15: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

COMPARE 2 VERSIONS

WRONG!CHANGES BETWEEN VERSIONS

VERSION INFORMATIONCUSTOMER DATA

Page 16: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

NO EMAIL BECAUSE INITIAL EMAIL ADDRESS WRONG!

Page 17: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

AUDIT LOGS: HAPPY USERS & LOWER SUPPORT COST

Page 18: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

HOW DO WE DO AUDIT LOGS IN JAVA?

Page 19: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

QUERY VERSIONS

CREATE VERSION

COMPARE 2 VERSIONS

JAVA BACK-ENDFRONT-END

SHOW ONE VERSION

SHOW ALL VERSIONS

COMPARE 2 VERSIONS

Page 20: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

HARD!

Page 21: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

JAVERSCODE AUDIT LOGS

EASILY IN JAVA

Page 22: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

Open-source project with Apache license

Mature with frequent releases (1.0 nearly six years ago)

One main contributor

Donations welcome!

JAVERS

Page 23: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

Computes diff of 2 Plain Old Java Objects (POJOs)

Saves POJO versions as JSON in DB (relational DB or MongoDB)

Query versions: POJOs with version data

JAVERS

Page 24: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

QUERY VERSIONS

CREATE VERSION

COMPARE 2 VERSIONS

JAVA BACK-ENDFRONT-END

SHOW ONE VERSION

SHOW ALL VERSIONS

COMPARE 2 VERSIONS

Page 25: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

WHERE DOES IT FIT IN?

ADD JAVERS TO PROJECT

UPDATE BACK-END

SAVE VERSION

CREATE VERSION

Page 26: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

DTO: Data Transfer Object

Means: Whatever application sends to UI

‣ POJO with fields & ID here

‣ Property-value map

‣ List of values

WHERE DOES IT FIT IN?

Page 27: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

BUSINESS LAYER

Page 28: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

BUSINESS LAYERPERSISTENCE

LAYER

Page 29: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

BUSINESS LAYER DATA STOREPERSISTENCE

LAYER

Page 30: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

BUSINESS LAYER DATA STOREPERSISTENCE

LAYER

Receive DTO

Page 31: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

BUSINESS LAYER DATA STOREPERSISTENCE

LAYER

Receive DTO

Validate DTO

Page 32: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

BUSINESS LAYER DATA STOREPERSISTENCE

LAYER

Receive DTO

Validate DTO

Convert for Save

Page 33: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

BUSINESS LAYER DATA STOREPERSISTENCE

LAYER

Receive DTO

Validate DTO

SaveConvert for Save

Page 34: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

BUSINESS LAYER DATA STOREPERSISTENCE

LAYER

Receive DTO

Validate DTO

Save App TablesConvert for Save

Page 35: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

BUSINESS LAYER DATA STOREPERSISTENCE

LAYER

Receive DTO

Validate DTO

Save App TablesConvert for Save

Page 36: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

BUSINESS LAYER DATA STOREPERSISTENCE

LAYER

Receive DTO

Validate DTO

Create Version

Save App TablesConvert for Save

Page 37: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

BUSINESS LAYER DATA STOREPERSISTENCE

LAYER

Receive DTO

Validate DTO

Create Version JaVers Tables

Save App TablesConvert for Save

Page 38: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

BUSINESS LAYER DATA STOREPERSISTENCE

LAYER

Receive DTO

Validate DTO

Create Version JaVers Tables

Save App TablesConvert for Save

Page 39: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

BUSINESS LAYER DATA STOREPERSISTENCE

LAYER

Receive DTO

Validate DTO

Create Version JaVers Tables

Save App TablesConvert for Save

MY ADVICE: VERSION EXISTING DTOS

Page 40: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

BUSINESS LAYER DATA STOREPERSISTENCE

LAYER

Receive DTO

Validate DTO

Create Version JaVers Tables

Save App TablesConvert for Save

MY ADVICE: VERSION EXISTING DTOS

BUILT-IN: BYPASS PERSISTENCE

LAYER

Page 41: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

Reuses UI: "version DTO" for UI same as existing DTO

Choices for creating version in back-end

‣ In persistence transaction, or in new one?

‣ In business layer call, or asynchronously?

‣ In persistence data store, or in different one?

Easy to save as JSON: DTOs already serialized for UI

WHY VERSION DTOS?

Page 42: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

Version existing DTOs

JaVers bypasses application persistence layer

WHERE DOES IT FIT IN?

Page 43: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

WHERE DOES IT FIT IN?

ADD JAVERS TO PROJECT

UPDATE BACK-END

SAVE VERSION

CREATE VERSION

Page 44: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

Spring Boot Starter for relational DB or MongoDB

Integration with Spring

JAR in other Java projects

Default configuration worked for me

ADD JAVERS TO PROJECT

Page 45: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

WHERE DOES IT FIT IN?

ADD JAVERS TO PROJECT

UPDATE BACK-END

SAVE VERSION

CREATE VERSION

Page 46: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

Version storage: Main data source in Spring Boot by default, could be different data store

POJO - JSON mapping: Good defaults, but at least 1 annotation/JaVers registration call needed

POJO version identity: "Entity ID" (unique per POJO) + class name

UPDATE BACK-END

Page 47: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

public class Customer {

private Long id; private String firstName; private String lastName;

UPDATE BACK-END: EXISTING DTO

Page 48: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

public class Customer { private Long id; private String firstName; private String lastName;

UPDATE BACK-END: UPDATED DTO

@Id

Page 49: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

POJO version identity: Unique entity ID per POJO

POJO - JSON mapping: At least @Id for entity ID

UPDATE BACK-END

Page 50: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

WHERE DOES IT FIT IN?

GETTING JAVERS

UPDATE BACK-END

SAVE VERSION

CREATE VERSION

Page 51: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

What: POJO (with entity ID) and user name

How

‣ In persistence transaction, or in new one?

‣ In business layer call, or asynchronously?

SAVE VERSION

Page 52: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

private Javers javers;

[...]

Customer customer = new Customer(50L, "Karsten", "Silz");

this.javers.commit("joecool", customer);

SAVE VERSION

Page 53: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

What: POJO (with entity ID) and user name

How: Choices for transaction and synchronicity

SAVE VERSION

Page 54: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

WHERE DOES IT FIT IN?

GETTING JAVERS

UPDATE BACK-END

SAVE VERSION

CREATE VERSION

Page 55: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

QUERY VERSIONS

CREATE VERSION

COMPARE 2 VERSIONS

JAVA BACK-ENDFRONT-END

SHOW ONE VERSION

SHOW ALL VERSIONS

COMPARE 2 VERSIONS

Page 56: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

QUERY ALL VERSIONS

QUERY ONE VERSION

QUERY NESTED POJOS

QUERY VERSIONS

Page 57: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

Why: List of all versions in UI (version, author timestamp)

Input: JQL (JaVers Query Language)

‣ Entity ID and POJO class name

‣ "Shallow scope": no nested POJOs

QUERY ALL VERSIONS

Page 58: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

Output: List of "snapshots"

‣ Version number ("commit ID"), author, timestamp

‣ Map of POJO property values

QUERY ALL VERSIONS

Page 59: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

JqlQuery query = QueryBuilder .byInstanceId(50L, Customer.class) .withShadowScope(ShadowScope.SHALLOW) .build();

List<CdoSnapshot> versions = this.javers.findSnapshots(query);

QUERY ALL VERSIONS: INPUT

Page 60: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

for (CdoSnapshot aVersion : versions) {

String versionNumber = aVersion.getCommitId().value();

CommitMetadata commitMetadata = aVersion.getCommitMetadata(); String author = commitMetadata.getAuthor(); LocalDateTime time = commitMetadata.getCommitDate();

QUERY ALL VERSIONS: OUTPUT

Page 61: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

Why: List of all versions in UI

Input: Entity ID and POJO class name

Output: Version number, author, timestamp

QUERY ALL VERSIONS

Page 62: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

QUERY ALL VERSIONS

QUERY ONE VERSION

QUERY NESTED POJOS

QUERY VERSIONS

Page 63: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

Why: Complete POJO for UI details

Input: Same JQL

‣ Same Entity ID and POJO class name

‣ Version number: From "Query All Versions"

‣ "Deep scope": All nested POJOs

QUERY ONE VERSION

Page 64: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

Output: List of "shadows" with 1 element

‣ Version number, author, timestamp

‣ POJO

QUERY ONE VERSION

Page 65: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

CommitId commitId = CommitId.valueOf("1.0");

JqlQuery query = QueryBuilder .byInstanceId(50L, Customer.class) .withCommitId(commitId) .withShadowScope(ShadowScope.DEEP_PLUS) .build();

List<Shadow<Customer>> oneVersion = this.javers.findShadows(query);

QUERY ONE VERSION: INPUT

Page 66: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

for (Shadow<Customer> aVersion : oneVersion) { String versionNumber = aVersion.getCommitId().value();

CommitMetadata commitMetadata = aVersion.getCommitMetadata(); String author = commitMetadata.getAuthor(); LocalDateTime time = commitMetadata.getCommitDate();

Customer customer = aVersion.get();

QUERY ONE VERSION: OUTPUT

Page 67: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

Why: Complete POJO for UI details

Input

‣ Entity ID and POJO class name

‣ Version number

Output: POJO

QUERY ONE VERSION

Page 68: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

QUERY ALL VERSIONS

QUERY ONE VERSION

QUERY NESTED POJOS

QUERY VERSIONS

Page 69: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

POJOs can contain other POJOs

JaVers stores other POJOs with entity ID separately from parent POJO

Impact on queries?

QUERY NESTED POJOS

Page 70: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

QUERY NESTED POJOSpublic class Address { @Id private Long id;

[…]

public class Customer { @Id private Long id; private Address address;

: NEW CLASS

Page 71: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

QUERY NESTED POJOS: SAVE VERSIONCUSTOMER

Version 1

ADDRESS

Version 1

Page 72: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

QUERY NESTED POJOS: SAVE VERSIONCUSTOMER

Version 1

ADDRESS

Version 1

CUSTOMER

ADDRESS

Version 2

Update address

Page 73: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

QUERY NESTED POJOS: SAVE VERSIONCUSTOMER

Version 1

ADDRESS

Version 1

CUSTOMER

Version 1

ADDRESS

Version 2

Update address

NESTED POJO VERSIONS DON’T UPDATE PARENT POJO VERSION - BUT USERS EXPECT IT!

Page 74: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

It’s a feature, not a bug!

Same in other libraries (e.g., Hibernate Envers)

My Solution

‣ Always change parent POJO to force new version

‣ Add "flip-flopping" boolean field (not sent to UI)

QUERY NESTED POJOS

Page 75: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

Problem: Nested POJO versions don’t update parent POJO version, but users expect it

My Solution: Always change parent POJO to force new version

QUERY NESTED POJOS

Page 76: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

QUERY ALL VERSIONS

QUERY ONE VERSION

QUERY NESTED POJOS

QUERY VERSIONS

Page 77: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

QUERY VERSIONS

CREATE VERSION

COMPARE 2 VERSIONS

JAVA BACK-ENDFRONT-END

SHOW ONE VERSION

SHOW ALL VERSIONS

COMPARE 2 VERSIONS

Page 78: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

Input: 2 POJOS

Output: List of objects, derived from Change class

‣ ValueChange: Simple property change

‣ NewObject: Nested POJO added

‣ ObjectRemoved: Nested POJO removed

Change Count: Sometimes customized per POJO

COMPARE 2 VERSIONS

Page 79: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,
Page 80: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

USER: 2 CHANGES

Page 81: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

USER: 2 CHANGESJAVERS: 1 CHANGE

Page 82: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

USER: 2 CHANGES

JAVERS: 2 CHANGES LABEL & EMAIL

JAVERS: 1 CHANGE

Page 83: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

USER: 2 CHANGES

TURN 3 CHANGES IN JAVERS INTO 2!

JAVERS: 2 CHANGES LABEL & EMAIL

JAVERS: 1 CHANGE

Page 84: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

Customer one = new Customer(50L, "Karsten", "Silz"); Customer two = new Customer(50L, "Joe", "Cool");

Diff differences = this.javers.compare(oldOne, newOne);

COMPARE 2 VERSIONS: INPUT

Page 85: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

Changes listOfDifferences = differences.getChanges();

for (Change aChange : listOfDifferences) { System.out.println(aChange.toString()); }

COMPARE 2 VERSIONS: OUTPUT

Page 86: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

ValueChange{ 'firstName' value changed from 'Karsten' to 'Joe' }

ValueChange{ 'lastName' value changed from 'Silz' to 'Cool' }

COMPARE 2 VERSIONS: CONSOLE

Page 87: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

Input: 2 POJOS

Output: List of Change instances

Change Count: Sometimes customized per POJO

COMPARE 2 VERSIONS

Page 88: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

QUERY VERSIONS

CREATE VERSION

COMPARE 2 VERSIONS

JAVA BACK-ENDFRONT-END

SHOW ONE VERSION

SHOW ALL VERSIONS

COMPARE 2 VERSIONS

Page 89: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

QUERY VERSIONS

CREATE VERSION

COMPARE 2 VERSIONS

JAVA BACK-ENDFRONT-END

SHOW ONE VERSION

SHOW ALL VERSIONS

COMPARE 2 VERSIONS

New UI, generic with version information

Page 90: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

QUERY VERSIONS

CREATE VERSION

COMPARE 2 VERSIONS

JAVA BACK-ENDFRONT-END

SHOW ONE VERSION

SHOW ALL VERSIONS

COMPARE 2 VERSIONS

Reuses UI, version information

New UI, generic with version information

Page 91: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

Extends UI with diff

QUERY VERSIONS

CREATE VERSION

COMPARE 2 VERSIONS

JAVA BACK-ENDFRONT-END

SHOW ONE VERSION

SHOW ALL VERSIONS

COMPARE 2 VERSIONS

Reuses UI, version information

New UI, generic with version information

Page 92: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

Extends UI with diff

QUERY VERSIONS

CREATE VERSION

COMPARE 2 VERSIONS

JAVA BACK-ENDFRONT-END

SHOW ONE VERSION

SHOW ALL VERSIONS

COMPARE 2 VERSIONS

Reuses UI, version information

New UI, generic with version information

Page 93: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

AUDIT LOG: WHO CHANGED WHAT WHEN HOW

AUDIT LOGS: HAPPY USERS & LOWER SUPPORT COST

JAVERS CREATES, STORES & QUERIES VERSIONS AND COMPUTES DIFFS - WE HAVE LESS CODE TO WRITE

VERSION EXISTING DTOS - WE REUSE CODE

Page 94: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,
Page 95: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

JAVERSCODE AUDIT LOGS

EASILY IN JAVA

Page 96: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

More on Spring Boot configuration

More POJO mapping customizations (ignoring or renaming fields)

How to reduce POJO JSON size in data storage

What JaVers writes to its tables

WHAT’S IN THE SAMPLE CODE?

Page 97: JaVers Code Audit Logs Easily in Java PDF · 2020. 10. 21. · FRONT-END JAVA BACK-END SHOW ONE VERSION SHOW ALL VERSIONS COMPARE 2 VERSIONS Reuses UI, version information New UI,

BPF.LI/DOG

SLIDES

SAMPLE CODE

HOW TO BUILD JAVA APPS TODAY?