Infinispan - NoSQL für
den Enterprise Java
Alltag

Orientation in Objects GmbH
Weinheimer Str. 68
68309 Mannheim

Version:...
Ihr Sprecher

Christian Dedek
Trainer, Berater, Entwickler

Schwerpunkte
Softwarearchitektur
Qualitätsmanagement
Performan...
Gliederung

• NoSQL und Java EE
• Infinispan
• Integrationsszenarien
• Ausblick

© 2014 Orientation in Objects GmbH

Infin...
Gliederung

• NoSQL und Java EE
• Infinispan
• Integrationsszenarien
• Ausblick

© 2014 Orientation in Objects GmbH

Infin...
NoSQL vs. Java EE

• NoSQL
–
–
–
–

Datenspeicher ohne festgelegte Tabellenschemata
skalieren horizontal
keine strenge Spe...
NoSQL

• Dokumentenorientierte Datenbanken
• Graphendatenbanken
• Key-Value-Stores
– Diskbasiert
– RAM-Cache
– Sortierte K...
CAP-Theorem (nach E. Brewer PODC Symposium 2000)

• Consistency
– roughly meaning that all clients of a data store get res...
CAP Theorem und JTA

Consistency
JTA

JTA

n.a.
Availability

Partion
Tolerance

BASE

© 2014 Orientation in Objects GmbH
...
Data Grid vs. Distributed DBMS

Consistency
Data
Grid

Distributed
DBMS

n.a.
Availability

Partion
Tolerance

BASE

© 201...
JSR 107(347) Elastic Data Grid für Java EE

Appserver

Data Grid
JSR 107

Servlet
JSR 107

Node 1

EJB
Node 1
Node 2

JSR ...
JSR 107 API - Standard für einen Distributed HashTable

• Distributed HashTable
– javax.cache.Cache
• ähnlich java.util.Co...
javax.cache.CacheLoader

JEE
Application

1. Get

Cache

CacheLoader

2. load

• Secondary Store

© 2014 Orientation in Ob...
javax.cache.CacheWriter

JEE
Application

1. Put

Cache

CacheWriter

2. store

• Secondary Store

© 2014 Orientation in O...
Expiration

get

Cache
Y
M

X

I

put

D

F

© 2014 Orientation in Objects GmbH

Infinispan - NoSQL für den Enterprise Jav...
Gliederung

• NoSQL und Java EE
• Infinispan
• Integrationsszenarien
• Ausblick

© 2014 Orientation in Objects GmbH

Infin...
Infinispan

• Key-Value-Store
–
–
–
–

Distributed HashTable(JSR 107/347)
Transactional (JTA)
Low-latency (RAM)
Optional p...
Demo

© 2014 Orientation in Objects GmbH

Infinispan - NoSQL für den Enterprise Java Alltag

17
Local Embedded Mode

JEE
UI
Application

0./3. Query
Data Access

1. get

4. Read
Cache

2. Read

Secondary
Store

© 2014 ...
Local Embedded Mode II

• Code in der gleiche VM wie infinispan
• wenig Konfigurationsarbeit
– Mit default Einstellungen
D...
Infinispan und Java EE Clustering

JEE

JEE

UI

UI

Application

Application

0./4. Query

0. Update

Data Access

Data A...
Clustered Embedded Mode

JEE

JEE

JEE

UI

UI

UI

Application

Application

Application

0./4. Query
Data Access

5. put...
Demo

© 2014 Orientation in Objects GmbH

Infinispan - NoSQL für den Enterprise Java Alltag

22
Replication

JEE

JEE

JEE

Application

Application

Application

0. query
Data Access

Data Access

Data Access

2. Put
...
Invalidation

JEE

JEE

JEE

Application

Application

Application

0. query

3. query
Data Access

4. get

Data Access

D...
Distribution [numOwner=2]

JEE

JEE

JEE

Application

Application

Application

0. query
Data Access

Data Access

Data A...
Client/Server Mode

JEE

JSE

Non Java

Application

Application

Application

Data Access

Data Access

Plenty

Hotrod

J...
Demo

© 2014 Orientation in Objects GmbH

Infinispan - NoSQL für den Enterprise Java Alltag

27
Client/Server Mode II

• Starten des Servers erfordert die Angabe des Protokolls
– bin/clustered.sh -Djboss.socket.binding...
Client/Server Remoting

Remote
Endpoint

Protokoll

Smart
Routing

Load
Balancing

Memcached

Text

-

Vordefinierte
Liste...
CacheStore

JEE
Application

1. Put

Cache

CacheStore

2. store

• Secondary Store

© 2014 Orientation in Objects GmbH

I...
Eviction

get

Cache
Y
M

X

D

F

I

put

Memorymeter

© 2014 Orientation in Objects GmbH

Strategie
z.B. LRU

Infinispan...
Storage JPA Cache Store

• Implementierung mit JPA 2
• Speicherung mit applikationsspezifischem Datenmodell
• Key muss Pri...
Storage JPA Cache Store

<namedCache name=„ myJPACache">
<loaders passivation="false" shared="true" preload="true">
<jpaSt...
Gliederung

• NoSQL und Java EE
• Infinispan
• Integrationsszenarien
• Ausblick

© 2014 Orientation in Objects GmbH

Infin...
DI-Container Integration

© 2014 Orientation in Objects GmbH

CacheStore

Cache

DAO

Service

TransactionIntereptor

Remo...
Spring Integration

• Spring 3.1 Cache Abstraktion
• Infinispan Provider
• Integration mit Spring DI für CacheManager und ...
Spring Integration

• Cache Annotation
@Cacheable("nachrichtenCache")
public List<Nachricht> findAlleUngeleseneNachrichten...
CDI

• Konfiguration und Injizierung des Infinispan Cache
– Cache Injizierung

@Inject
private Cache<String, String> cache...
CDI

• Eigene Cache Qualifier
@javax.inject.Qualifier
@Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.
METH...
CDI

• Injizierung des eigenen Caches
public class MyCDIComponent {
@Inject @NachrichtenCache
Cache<String, String> nachri...
OR/M Integration

Java Virtual Machine
PersistenceManager
Anwendung
Transient

1.Level Cache
Instanz
Instanz
Instanz

Tran...
Hibernate 2nd Level Cache

• Entity Cache
– Key der Primärschlüssel
– Cache lokal(default) oder repliziert
– Replizierter ...
Hibernate second level cache

•

JTA Transaktion Manager
– Hibernate soll/muss JTA Manager nutzen.

<property name="hibern...
Gliederung

• NoSQL und Java EE
• Infinispan
• Integrationsszenarien
• Ausblick

© 2014 Orientation in Objects GmbH

Infin...
Infinispan Ausblick

• Map/Reduce Support
• Versioned Entries
• Support Eventual Consistency (7.0 ?)
• Optimierungen:
– Tr...
? ? ?
?
?
Fragen ?

Orientation in Objects GmbH
Weinheimer Str. 68
68309 Mannheim
www.oio.de
info@oio.de

47
Vielen Dank für ihre
Aufmerksamkeit !

Orientation in Objects GmbH
Weinheimer Str. 68
68309 Mannheim
www.oio.de
info@oio.d...
Upcoming SlideShare
Loading in …5
×

Infinispan - NoSQL für den Enterprise Java Alltag

520 views

Published on

Vortrag auf dem Expertenkreis Java von
Christian Dedek, Orientation in Objects GmbH

Published in: Technology, Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
520
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Infinispan - NoSQL für den Enterprise Java Alltag

  1. 1. Infinispan - NoSQL für den Enterprise Java Alltag Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim Version: 1.2 www.oio.de info@oio.de
  2. 2. Ihr Sprecher Christian Dedek Trainer, Berater, Entwickler Schwerpunkte Softwarearchitektur Qualitätsmanagement Performanceoptimierung © 2014 Orientation in Objects GmbH Infinispan - NoSQL für den Enterprise Java Alltag 2
  3. 3. Gliederung • NoSQL und Java EE • Infinispan • Integrationsszenarien • Ausblick © 2014 Orientation in Objects GmbH Infinispan - NoSQL für den Enterprise Java Alltag 3
  4. 4. Gliederung • NoSQL und Java EE • Infinispan • Integrationsszenarien • Ausblick © 2014 Orientation in Objects GmbH Infinispan - NoSQL für den Enterprise Java Alltag 4
  5. 5. NoSQL vs. Java EE • NoSQL – – – – Datenspeicher ohne festgelegte Tabellenschemata skalieren horizontal keine strenge Spezifikation( viele gut diskutierte/erprobte Konzepte) viele Implementierungen auf verschiedenen Konzepten basierend • Java EE – strenge Spezifikation einer Softwarearchitektur – transaktionsbasierte Ausführung von Java-Komponenten – auf transkaktionsbasiertem Konzept beruhende Teilstandards • JTA/JCA/JPA/JMS/JDBC – Horizontale Skalierung als Konzept für High Availability • Antwortzeiten • Ausfall von Knoten – (insbesondere gedacht für Web-Anwendungen) © 2014 Orientation in Objects GmbH Infinispan - NoSQL für den Enterprise Java Alltag 5
  6. 6. NoSQL • Dokumentenorientierte Datenbanken • Graphendatenbanken • Key-Value-Stores – Diskbasiert – RAM-Cache – Sortierte Key-Value-Stores • • • • Eventually Consistent Stores MultivalueDatenbanken Objektdatenbanken Spaltenorientierte Datenbank © 2014 Orientation in Objects GmbH Infinispan - NoSQL für den Enterprise Java Alltag 6
  7. 7. CAP-Theorem (nach E. Brewer PODC Symposium 2000) • Consistency – roughly meaning that all clients of a data store get responses to requests that ‘make sense’. For example, if Client A writes 1 then 2 to location X, Client B cannot read 2 followed by 1. • Availability – all operations on a data store eventually return successfully. We say that a data store is ‘available’ for, e.g. write operations. • Partition tolerance – “The network will be allowed to lose arbitrarily many messages sent from one node to another” – if the network stops delivering messages between two sets of servers, will the system continue to work correctly? © 2014 Orientation in Objects GmbH Infinispan - NoSQL für den Enterprise Java Alltag 7
  8. 8. CAP Theorem und JTA Consistency JTA JTA n.a. Availability Partion Tolerance BASE © 2014 Orientation in Objects GmbH Infinispan - NoSQL für den Enterprise Java Alltag 8
  9. 9. Data Grid vs. Distributed DBMS Consistency Data Grid Distributed DBMS n.a. Availability Partion Tolerance BASE © 2014 Orientation in Objects GmbH Infinispan - NoSQL für den Enterprise Java Alltag 9
  10. 10. JSR 107(347) Elastic Data Grid für Java EE Appserver Data Grid JSR 107 Servlet JSR 107 Node 1 EJB Node 1 Node 2 JSR 107 Secondary Store JSF Node 2 Node 3 Node 3 © 2014 Orientation in Objects GmbH Infinispan - NoSQL für den Enterprise Java Alltag 10
  11. 11. JSR 107 API - Standard für einen Distributed HashTable • Distributed HashTable – javax.cache.Cache • ähnlich java.util.ConcurrentMap • Managementschnittstellen – javax.cache.CacheManager – javax.cache..CacheListener • Annotationen z.B. – @CacheResult,@CacheKeyParam,@CacheRemove. © 2014 Orientation in Objects GmbH Infinispan - NoSQL für den Enterprise Java Alltag 11
  12. 12. javax.cache.CacheLoader JEE Application 1. Get Cache CacheLoader 2. load • Secondary Store © 2014 Orientation in Objects GmbH Infinispan - NoSQL für den Enterprise Java Alltag 12
  13. 13. javax.cache.CacheWriter JEE Application 1. Put Cache CacheWriter 2. store • Secondary Store © 2014 Orientation in Objects GmbH Infinispan - NoSQL für den Enterprise Java Alltag 13
  14. 14. Expiration get Cache Y M X I put D F © 2014 Orientation in Objects GmbH Infinispan - NoSQL für den Enterprise Java Alltag 14
  15. 15. Gliederung • NoSQL und Java EE • Infinispan • Integrationsszenarien • Ausblick © 2014 Orientation in Objects GmbH Infinispan - NoSQL für den Enterprise Java Alltag 15
  16. 16. Infinispan • Key-Value-Store – – – – Distributed HashTable(JSR 107/347) Transactional (JTA) Low-latency (RAM) Optional persist to disk • Open Source Data Grid Plattform (LGPL) – JBoss/Red Hat • Java and Scala • Nicht nur für die JVM gedacht • in verschiedenen Modi einsetzbar – Embedded – Client/Server(Data Grid) © 2014 Orientation in Objects GmbH Consistency Infinispan n.a. Availability Distributed DBs Partion Tolerance BASE Infinispan - NoSQL für den Enterprise Java Alltag 16
  17. 17. Demo © 2014 Orientation in Objects GmbH Infinispan - NoSQL für den Enterprise Java Alltag 17
  18. 18. Local Embedded Mode JEE UI Application 0./3. Query Data Access 1. get 4. Read Cache 2. Read Secondary Store © 2014 Orientation in Objects GmbH Infinispan - NoSQL für den Enterprise Java Alltag 18
  19. 19. Local Embedded Mode II • Code in der gleiche VM wie infinispan • wenig Konfigurationsarbeit – Mit default Einstellungen DefaultCacheManager cacheManager = new DefaultCacheManager(); Cache<String, String> cache = cacheManager.getCache(); – Mit eigenen Einstellungen z.B: Clustereinstellungen DefaultCacheManager cacheManager = new DefaultCacheManager(„cluster.xml"); Cache<String, String> cache = cacheManager.getCache(); © 2014 Orientation in Objects GmbH Infinispan - NoSQL für den Enterprise Java Alltag 19
  20. 20. Infinispan und Java EE Clustering JEE JEE UI UI Application Application 0./4. Query 0. Update Data Access Data Access 1. get 5. get Cache Cache 2. Read A 1.x Store A1 • Secondary Store © 2014 Orientation in Objects GmbH Infinispan - NoSQL für den Enterprise Java Alltag 20
  21. 21. Clustered Embedded Mode JEE JEE JEE UI UI UI Application Application Application 0./4. Query Data Access 5. put n. n+k. Data Access Data Access Cache Cache 2. get Cache 3./6. load/Store • Secondary Store © 2014 Orientation in Objects GmbH Infinispan - NoSQL für den Enterprise Java Alltag 21
  22. 22. Demo © 2014 Orientation in Objects GmbH Infinispan - NoSQL für den Enterprise Java Alltag 22
  23. 23. Replication JEE JEE JEE Application Application Application 0. query Data Access Data Access Data Access 2. Put © 2014 Orientation in Objects GmbH Infinispan - NoSQL für den Enterprise Java Alltag
  24. 24. Invalidation JEE JEE JEE Application Application Application 0. query 3. query Data Access 4. get Data Access Data Access 1. Put Cache © 2014 Orientation in Objects GmbH Infinispan - NoSQL für den Enterprise Java Alltag 24
  25. 25. Distribution [numOwner=2] JEE JEE JEE Application Application Application 0. query Data Access Data Access Data Access 2. get Cache © 2014 Orientation in Objects GmbH Infinispan - NoSQL für den Enterprise Java Alltag 25
  26. 26. Client/Server Mode JEE JSE Non Java Application Application Application Data Access Data Access Plenty Hotrod JVM JVM Cache Cache memcached Load/Store • © 2014 Orientation in Objects GmbH Secondary Store Infinispan - NoSQL für den Enterprise Java Alltag 26
  27. 27. Demo © 2014 Orientation in Objects GmbH Infinispan - NoSQL für den Enterprise Java Alltag 27
  28. 28. Client/Server Mode II • Starten des Servers erfordert die Angabe des Protokolls – bin/clustered.sh -Djboss.socket.binding.port-offset=xxx Djboss.node.name=nodeX • org.infinispan.client.hotrod.RemoteCacheManager RemoteCacheManager rcm = new RemoteCacheManager("192.168.3.120"); RemoteCache remoteCace = rcm.getCache(); String key = "hello"; remoteCace.put(key, "world"); © 2014 Orientation in Objects GmbH Infinispan - NoSQL für den Enterprise Java Alltag 28
  29. 29. Client/Server Remoting Remote Endpoint Protokoll Smart Routing Load Balancing Memcached Text - Vordefinierte Liste ReSTful Text - http Loadbalancer HotRod Binary + Dynamische Topologie JEE Application Groovy Application Data Access Data Access JVM Cache © 2014 Orientation in Objects GmbH Infinispan - NoSQL für den Enterprise Java Alltag 29
  30. 30. CacheStore JEE Application 1. Put Cache CacheStore 2. store • Secondary Store © 2014 Orientation in Objects GmbH Infinispan - NoSQL für den Enterprise Java Alltag 30
  31. 31. Eviction get Cache Y M X D F I put Memorymeter © 2014 Orientation in Objects GmbH Strategie z.B. LRU Infinispan - NoSQL für den Enterprise Java Alltag 31
  32. 32. Storage JPA Cache Store • Implementierung mit JPA 2 • Speicherung mit applikationsspezifischem Datenmodell • Key muss Primärschlüssel der Entität sein – @Id, @EmbeddedId • Keine generierten Ids Cache<String, User> usersCache = cacheManager.getCache("myJPACache"); // configured for User entity class usersCache.put(„Gosling_James", new User()); Cache<Integer, Teacher> teachersCache = cacheManager.getCache("myJPACache"); // cannot do this when this cache is configured to use a JPA cache store teachersCache.put(1, new Teacher()); © 2014 Orientation in Objects GmbH Infinispan - NoSQL für den Enterprise Java Alltag 32
  33. 33. Storage JPA Cache Store <namedCache name=„ myJPACache"> <loaders passivation="false" shared="true" preload="true"> <jpaStore persistenceUnitName="org.infinispan.loaders.jpa.confi gurationTest" entityClassName="org.infinispan.loaders.jpa.entity.Us er" /> </loaders> </namedCache> © 2014 Orientation in Objects GmbH Infinispan - NoSQL für den Enterprise Java Alltag 33
  34. 34. Gliederung • NoSQL und Java EE • Infinispan • Integrationsszenarien • Ausblick © 2014 Orientation in Objects GmbH Infinispan - NoSQL für den Enterprise Java Alltag 34
  35. 35. DI-Container Integration © 2014 Orientation in Objects GmbH CacheStore Cache DAO Service TransactionIntereptor RemoteConnector DI Container Infinispan - NoSQL für den Enterprise Java Alltag 35
  36. 36. Spring Integration • Spring 3.1 Cache Abstraktion • Infinispan Provider • Integration mit Spring DI für CacheManager und Cache <bean id="cacheManager" class="org.infinispan.spring.provider.SpringEmbeddedCacheManagerF actoryBean" p:configurationFileLocation="classpath:META-INF/oio-infinispanconfig.xml"> </bean> • Aktivieren des Cache – <cache:annotation-driven /> © 2014 Orientation in Objects GmbH Infinispan - NoSQL für den Enterprise Java Alltag 36
  37. 37. Spring Integration • Cache Annotation @Cacheable("nachrichtenCache") public List<Nachricht> findAlleUngeleseneNachrichten() {…} @Cacheable("nachrichtenCache", key=#"projektId") public List<Nachricht> findNachrichtenFuerProjekt(BigInteger projektId) {…} • Deklarative Eviction @CacheEvict(value = "nachrichtenCache", allEntries = true) public void nachrichtMarkieren(BigInteger nachrichtId, boolean ungelesen) {…} © 2014 Orientation in Objects GmbH Infinispan - NoSQL für den Enterprise Java Alltag 37
  38. 38. CDI • Konfiguration und Injizierung des Infinispan Cache – Cache Injizierung @Inject private Cache<String, String> cache; @Inject RemoteCache<String, String> remoteCache; • Partielle Unterstützung vom JSR 107 Annotationen © 2014 Orientation in Objects GmbH Infinispan - NoSQL für den Enterprise Java Alltag 38
  39. 39. CDI • Eigene Cache Qualifier @javax.inject.Qualifier @Target({ElementType.FIELD, ElementType.PARAMETER, ElementType. METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface NachrichtenCache {} public class CacheCreator { @ConfigureCache("nachrichtencache") // cache name. @NachrichtenCache // cache qualifier. @Produces public Configuration specialCacheCfg() { return new ConfigurationBuilder() .eviction() .strategy(EvictionStrategy.LRU) .maxEntries(10) .build(); } } © 2014 Orientation in Objects GmbH Infinispan - NoSQL für den Enterprise Java Alltag 39
  40. 40. CDI • Injizierung des eigenen Caches public class MyCDIComponent { @Inject @NachrichtenCache Cache<String, String> nachrichtenCache; } © 2014 Orientation in Objects GmbH Infinispan - NoSQL für den Enterprise Java Alltag 40
  41. 41. OR/M Integration Java Virtual Machine PersistenceManager Anwendung Transient 1.Level Cache Instanz Instanz Instanz Transient Transient Transient Transient Transaction Connection QueryFacility DB 2.Level Cache Entity Cache Instanz Instanz Instanz Instanz © 2014 Orientation in Objects GmbH QueryCache Timestamp Cache Infinispan - NoSQL für den Enterprise Java Alltag 42
  42. 42. Hibernate 2nd Level Cache • Entity Cache – Key der Primärschlüssel – Cache lokal(default) oder repliziert – Replizierter Cache nicht empfohlen • Query Cache – Key ist query-name und Parameter Hash – Cache lokal(default) oder repliziert • Timestamps Cache – asynchrone Replikation(default) – keine eviction/expiration © 2014 Orientation in Objects GmbH Infinispan - NoSQL für den Enterprise Java Alltag 43
  43. 43. Hibernate second level cache • JTA Transaktion Manager – Hibernate soll/muss JTA Manager nutzen. <property name="hibernate.cache.use_second_level_cache" value="true"/> <property name="hibernate.cache.use_query_cache" value="true"/> <property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.infinispan.InfinispanRegionFactory"/ > <property name="hibernate.cache.infinispan.cfg" value="/oioinfinispan-config.xml"/> <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTSStandaloneTransactionMa nagerLookup"/> © 2014 Orientation in Objects GmbH Infinispan - NoSQL für den Enterprise Java Alltag 44
  44. 44. Gliederung • NoSQL und Java EE • Infinispan • Integrationsszenarien • Ausblick © 2014 Orientation in Objects GmbH Infinispan - NoSQL für den Enterprise Java Alltag 45
  45. 45. Infinispan Ausblick • Map/Reduce Support • Versioned Entries • Support Eventual Consistency (7.0 ?) • Optimierungen: – Transaktionen – Locking – RPC © 2014 Orientation in Objects GmbH Infinispan - NoSQL für den Enterprise Java Alltag 46
  46. 46. ? ? ? ? ? Fragen ? Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim www.oio.de info@oio.de 47
  47. 47. Vielen Dank für ihre Aufmerksamkeit ! Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim www.oio.de info@oio.de

×