JNoSQL is a framework and collection of tools that make integration between Java applications and NoSQL quick and easy—for developers as well as vendors. The API is easy to implement, so NoSQL vendors can quickly implement, test, and become compliant by themselves. And with its low learning curve and just a minimal set of artifacts, Java developers can start coding by worrying not about the complexity of specific NoSQL databases but only their core aspects (such as graph or document properties). Built with functional programming in mind, it leverages all the features of Java 8. This session covers how the API is structured, how it relates to the multiple NoSQL database types, and how you can get started and involved in this open source technology.
2. Who am I?
Werner Keil
Consultant – Coach
Open Source Evangelist
Software Architect
Apache, Eclipse Committer,
Agile Alliance Member
Expert Group member in many JSRs
Spec Lead – JSR385
Jakarta EE Specification Committee Member
Twitter @wernerkeil
[www.linkedin.com/in/catmedia]
15. JPA problem for NoSQL
01
02
03
04
05
06
Saves Async
Async Callback
Time to Live (TTL)
Consistency Level
SQL based
Diversity in NoSQL
16. The Eclipse JNoSQL Solution
DIANA
ARTEMIS
JNoSQL
DAO
Mapping
Communication
Column Documents Key Graph
Data Tier
01
02
03
04
Mapping API
Communication API
No lock-in
Divide and Conquer
32. Diversity
@Entity("god")
public class God {
@Column
private String name;
@UDT("weapon")
@Column
private Weapon weapon;
}
interface GodRepository extends
CassandraRepository<God, String> {
@CQL("select * from God where name = ?")
List<God> findByName(String name);
}
33. We have Query by Text
DocumentTemplate documentTemplate = ...;
ColumnTemplate columnTemplate = ...;
KeyValueTempalte keyValueTemplate =...;
GraphTemplate graphTemplate =...;
List<Movie> movies = documentTemplate.query("select * from Movie where
year > 2012");
List<Person> people = columnTemplate.query("select * from Person where
age = 25");
Optional<God> god = keyValueTemplate.query("get "Diana"");
List<City> cities = graphTemplate.query("g.V().hasLabel('City')");
34. We have Query by Text
PreparedStatement preparedStatement = template.prepare("select * from
Person where name = @name");
preparedStatement.bind("name", "Ada");
List<Person> adas = preparedStatement.getResultList();
//to graph just keep using gremlin
PreparedStatement prepare =
graphTemplate().prepare("g.V().hasLabel(param)");
prepare.bind("param", "Person");
List<Person> people = preparedStatement.getResultList();
35. We have Query by Text
interface PersonRepository extends Repository<Person, Long> {
@Query("select * from Person")
Optional<Person> findByQuery();
@Query("select * from Person where id = @id")
Optional<Person> findByQuery(@Param("id") String id);
}
39. Specification Process
● Java EE now contributed to Eclipse Foundation
● Jakarta EE
● Code First
Jakarta EE forwards with new specifications
● Hopefully a new spec and namespace confirmed around
Oracle Code One / ECE
“jakarta.nosql”
See https://www.tomitribe.com/blog/jnosql-and-jakarta-ee/
41. Oracle Code SF
● HOL5998 Eclipse JNoSQL: One API to Many NoSQL Databases - BYOL
● DEV6043 Let’s Make Graph Databases Fun Again with Java
● DEV6109 Jakarta EE Meets NoSQL in the Cloud Age
See https://www.oracle.com/code-one/index.html
42. Eclipse Community Day
● Eclipse Foundation Orientation for Jakarta EE
● Meet the spec: JNoSQL
See https://wiki.eclipse.org/JakartaEE_-_MicroProfile_-_Community_day
43. References
Communication API
Support to Async operations
APIs
Mapping API
Bean Validation
Events
Repository
Template
Query by text
Prepared Statement
http://jnosql.org/
https://github.com/eclipse?q=Jnosql
https://dev.eclipse.org/mailman/listinfo/jnosql-dev
https://gitter.im/JNOSQL/developers
https://wiki.eclipse.org/JNoSQL