Jakarta EE 10: Ein erster Blick auf Eclipse
JNoSQL
Expertenkreis Java - 28.04.2022
Markus Pauer, GEDOPLAN GmbH
Markus Pauer
Seit 20 Jahren in der Java Enterprise-Entwicklung
Jakarta EE Full-Stack-Entwickler
IT-Consultant, Trainer
➢ Einsatz von Prozessmodellen und regelbasierten
Entscheidungen in der Anwendungsentwicklung
➢ Komponentenorientierte Entwicklung
➢ Persistenzmodelle
Einsatz einer NoSQL-Datenbank
Welche Vorteile bringt mir der Einsatz einer NoSQL-Datenbank?
Welche NoSQL-Datenbank soll eingesetzt werden?
Welche Struktur haben meine Daten?
Erlernen einer neuen API für den Zugriff
Es droht DB-Vendor-Lockin
Jakarta NoSQL
Eine API für jeden NoSQL-Datenbank-Typ
Convention Over Configuration
Einheitliche Annotationen für das Mapping
Angelehnt an die Jakarta Persistence Annotationen
Unterstützung für mehr als 20 NoSQL-Datenbanken
API mit dem Fokus der Simplizität
Kompatible Implementierung: JNoSQL 1.0.0-b3
https://jakarta.ee/specifications/nosql/1.0/
Unterstützte Datenbanken
Quelle: http://www.jnosql.org/docs/supported_dbs.html
NoSQL-Datenbanken
Not-Only-SQL
Datenbanktypen
Key-Value (Redis)
Dokumentenorientiert (CouchDB, MongoDB)
Spaltenbasiert (Cassandra)
Graph (Neo4J)
Architektur
Communication Layer
Einheitliche API für die Kommunikation mit der Datenbank
Vergleichbar zur Java DataBase Connection API (JDBC)
Mapping Layer
Annotationen, CDI und Bean Validation für das einfache
Mapping zwischen Java und der DB
Vergleichbar zu objekt-relationen Frameworks (Hibernate,
Eclipselink)
Annotationen
@Entity
@Id
@Column
@MappedSuperclass
@Embeddable
Bekannt aus Jakarta Persistence (anderes Package)!
Einfache Entity Klasse
@Entity
public class Person {
@Id
private Long id;
@Column
private String name;
…
}
@Entity
public class Order {
@Id
private Long id;
@Column
private List<String> lines;
…
}
{
id: 4711,
name: Markus,
…
}
{
id: 4712,
lines: [ „Line1“, „Line2“ ],
…
}
@Entity
public class Person {
@Id
private Long id;
…
@Column
private Address address;
…
}
Eingebettete Entity Klasse
@Embeddable
public class Address {
@Column
private String street;
@Column
private String city;
…
}
{
id: 4711,
…
address: {
street: „Hubertusweg“,
city: „Bielefeld“,
…
}
…
}
Weitere Möglichkeiten
@MappedSuperclass
@Convert
@Entity
public class PersonConverter
implements AttributeConverter<Person, String> {
@Override
public String convertToDatabaseColumn(Person attribute) {
return attribute.toString();
}
@Override
public Person convertToEntityAttribute(String dbData) {
return Person.parse(dbData);
}
}
Template Klassen
Nutzung von Template Klassen für die Basis DB-Funktionalitäten
@ApplicationScoped
public class DocumentService {
@Inject
private DocumentTemplate template;
public Person insert(Person person) {
template.insert(person);
}
…
}
@Inject private DocumentTemplate template;
Repositories
Erstellen der Repository Klassen auf Basis eines Interfaces
@ApplicationScoped
public class DocumentService {
@Inject
@Database(DatabaseType.DOCUMENT)
private PersonRepository repository;
public Person save(Person person) {
repository.save(person);
}
…
}
DatabaseType.DOCUMENT
public interface CustomerRepository
extends Repository<Customer, Long> {}
Code
Quelle: http://www.jnosql.org/
Fazit
Mapping Annotationen bekannt von Jakarta Persistence
Automatische Erstellung der Repository Klassen
Basis DB-Funktionalitäten bereits vorhanden
Einheitliche API für den Zugriff auf die unterschiedlichen DB-Typen
Spezifikation noch nicht vollständig
Hat es nicht in Jakarta EE 10 geschafft
https://jakarta.ee/specifications/nosql/
https://github.com/GEDOPLAN/jnosql-demo

Jakarta EE 10: Ein erster Blick auf Eclipse JNoSQL

  • 1.
    Jakarta EE 10:Ein erster Blick auf Eclipse JNoSQL Expertenkreis Java - 28.04.2022 Markus Pauer, GEDOPLAN GmbH
  • 2.
    Markus Pauer Seit 20Jahren in der Java Enterprise-Entwicklung Jakarta EE Full-Stack-Entwickler IT-Consultant, Trainer ➢ Einsatz von Prozessmodellen und regelbasierten Entscheidungen in der Anwendungsentwicklung ➢ Komponentenorientierte Entwicklung ➢ Persistenzmodelle
  • 3.
    Einsatz einer NoSQL-Datenbank WelcheVorteile bringt mir der Einsatz einer NoSQL-Datenbank? Welche NoSQL-Datenbank soll eingesetzt werden? Welche Struktur haben meine Daten? Erlernen einer neuen API für den Zugriff Es droht DB-Vendor-Lockin
  • 4.
    Jakarta NoSQL Eine APIfür jeden NoSQL-Datenbank-Typ Convention Over Configuration Einheitliche Annotationen für das Mapping Angelehnt an die Jakarta Persistence Annotationen Unterstützung für mehr als 20 NoSQL-Datenbanken API mit dem Fokus der Simplizität Kompatible Implementierung: JNoSQL 1.0.0-b3 https://jakarta.ee/specifications/nosql/1.0/
  • 5.
  • 6.
  • 7.
    Architektur Communication Layer Einheitliche APIfür die Kommunikation mit der Datenbank Vergleichbar zur Java DataBase Connection API (JDBC) Mapping Layer Annotationen, CDI und Bean Validation für das einfache Mapping zwischen Java und der DB Vergleichbar zu objekt-relationen Frameworks (Hibernate, Eclipselink)
  • 8.
  • 9.
    Einfache Entity Klasse @Entity publicclass Person { @Id private Long id; @Column private String name; … } @Entity public class Order { @Id private Long id; @Column private List<String> lines; … } { id: 4711, name: Markus, … } { id: 4712, lines: [ „Line1“, „Line2“ ], … }
  • 10.
    @Entity public class Person{ @Id private Long id; … @Column private Address address; … } Eingebettete Entity Klasse @Embeddable public class Address { @Column private String street; @Column private String city; … } { id: 4711, … address: { street: „Hubertusweg“, city: „Bielefeld“, … } … }
  • 11.
    Weitere Möglichkeiten @MappedSuperclass @Convert @Entity public classPersonConverter implements AttributeConverter<Person, String> { @Override public String convertToDatabaseColumn(Person attribute) { return attribute.toString(); } @Override public Person convertToEntityAttribute(String dbData) { return Person.parse(dbData); } }
  • 12.
    Template Klassen Nutzung vonTemplate Klassen für die Basis DB-Funktionalitäten @ApplicationScoped public class DocumentService { @Inject private DocumentTemplate template; public Person insert(Person person) { template.insert(person); } … } @Inject private DocumentTemplate template;
  • 13.
    Repositories Erstellen der RepositoryKlassen auf Basis eines Interfaces @ApplicationScoped public class DocumentService { @Inject @Database(DatabaseType.DOCUMENT) private PersonRepository repository; public Person save(Person person) { repository.save(person); } … } DatabaseType.DOCUMENT public interface CustomerRepository extends Repository<Customer, Long> {}
  • 14.
  • 15.
    Fazit Mapping Annotationen bekanntvon Jakarta Persistence Automatische Erstellung der Repository Klassen Basis DB-Funktionalitäten bereits vorhanden Einheitliche API für den Zugriff auf die unterschiedlichen DB-Typen Spezifikation noch nicht vollständig Hat es nicht in Jakarta EE 10 geschafft https://jakarta.ee/specifications/nosql/ https://github.com/GEDOPLAN/jnosql-demo