Infinispan Data Grid Platform Definitive Guide
()
About this ebook
- Create highly scalable applications using the Infinispan Data Grid Platform
- Maximize your application’s performance in any cluster environment
- Become an expert in creating powerful solutions using Infinispan through ready-to-use examples
This practical guide is intended for those who want to learn how to build extremely scalable applications. This book is easy to read and is aimed at Java enterprise developers with a solid knowledge of Java. However, no previous coding experience with Infinispan is required.
Related to Infinispan Data Grid Platform Definitive Guide
Related ebooks
WildFly Configuration, Deployment, and Administration - Second Edition Rating: 0 out of 5 stars0 ratingsOracle Coherence 3.5 Rating: 4 out of 5 stars4/5Java EE 7 Development with WildFly Rating: 0 out of 5 stars0 ratingsNode.js Design Patterns - Second Edition Rating: 5 out of 5 stars5/5Troubleshooting NetScaler Rating: 0 out of 5 stars0 ratingsGlassFish Administration Rating: 0 out of 5 stars0 ratingsPHP Microservices Rating: 3 out of 5 stars3/5Learning Alfresco Web Scripts Rating: 0 out of 5 stars0 ratingsMicrosoft Application Virtualization Advanced Guide Rating: 0 out of 5 stars0 ratingsVMware Horizon 6 Desktop Virtualization Solutions Rating: 0 out of 5 stars0 ratingsCitrix XenApp® 7.5 Desktop Virtualization Solutions Rating: 0 out of 5 stars0 ratingsNode.js Web Development - Third Edition Rating: 2 out of 5 stars2/5IBM WebSphere Application Server 8.0 Administration Guide Rating: 0 out of 5 stars0 ratingsDjango Unleashed: Building Web Applications with Python's Framework Rating: 0 out of 5 stars0 ratingsWildFly Performance Tuning Rating: 0 out of 5 stars0 ratingsMastering CakePHP: A Comprehensive Guide to Rapid Web Development Rating: 0 out of 5 stars0 ratingsASP.NET MVC 4 Mobile App Development Rating: 0 out of 5 stars0 ratingsMastering JBoss Enterprise Application Platform 7 Rating: 0 out of 5 stars0 ratingsMastering Ceph: Redefine your storage system Rating: 0 out of 5 stars0 ratingsAlfresco Developer Guide Rating: 0 out of 5 stars0 ratingsGetting Started with XenDesktop® 7.x Rating: 0 out of 5 stars0 ratingsMastering Metasploit Rating: 0 out of 5 stars0 ratingsAdvanced Penetration Testing for Highly-Secured Environments - Second Edition Rating: 0 out of 5 stars0 ratingsJBoss AS 5 Performance Tuning: Build faster, more efficient enterprise Java applications Rating: 0 out of 5 stars0 ratingsMastering GeoServer Rating: 0 out of 5 stars0 ratings
Enterprise Applications For You
Excel Formulas That Automate Tasks You No Longer Have Time For Rating: 5 out of 5 stars5/5Excel : The Ultimate Comprehensive Step-By-Step Guide to the Basics of Excel Programming: 1 Rating: 5 out of 5 stars5/5QuickBooks 2024 All-in-One For Dummies Rating: 0 out of 5 stars0 ratingsQuickBooks 2023 All-in-One For Dummies Rating: 0 out of 5 stars0 ratingsBitcoin For Dummies Rating: 4 out of 5 stars4/5The New Email Revolution: Save Time, Make Money, and Write Emails People Actually Want to Read! Rating: 5 out of 5 stars5/5Enterprise AI For Dummies Rating: 3 out of 5 stars3/5Excel 101: A Beginner's & Intermediate's Guide for Mastering the Quintessence of Microsoft Excel (2010-2019 & 365) in no time! Rating: 0 out of 5 stars0 ratingsNotion for Beginners: Notion for Work, Play, and Productivity Rating: 4 out of 5 stars4/5QuickBooks Online For Dummies Rating: 0 out of 5 stars0 ratingsCreating Online Courses with ChatGPT | A Step-by-Step Guide with Prompt Templates Rating: 4 out of 5 stars4/5Managing Humans: Biting and Humorous Tales of a Software Engineering Manager Rating: 4 out of 5 stars4/5MrExcel XL: The 40 Greatest Excel Tips of All Time Rating: 4 out of 5 stars4/5Access 2019 For Dummies Rating: 0 out of 5 stars0 ratings50 Useful Excel Functions: Excel Essentials, #3 Rating: 5 out of 5 stars5/5Learning Python Rating: 5 out of 5 stars5/5Excel All-in-One For Dummies Rating: 0 out of 5 stars0 ratingsM Is for (Data) Monkey: A Guide to the M Language in Excel Power Query Rating: 4 out of 5 stars4/5101 Most Popular Excel Formulas: 101 Excel Series, #1 Rating: 4 out of 5 stars4/5Scrivener For Dummies Rating: 4 out of 5 stars4/5Mastering Excel Macros: Introduction: Mastering Excel Macros, #1 Rating: 4 out of 5 stars4/5Code like a Pro in C# Rating: 0 out of 5 stars0 ratings
Reviews for Infinispan Data Grid Platform Definitive Guide
0 ratings0 reviews
Book preview
Infinispan Data Grid Platform Definitive Guide - Wagner Roberto dos Santos
Table of Contents
Infinispan Data Grid Platform Definitive Guide
Credits
About the Author
Acknowledgments
About the Reviewers
www.PacktPub.com
Support files, eBooks, discount offers, and more
Why subscribe?
Free access for Packt account holders
Preface
What this book covers
What you need for this book
Who this book is for
Conventions
Reader feedback
Customer support
Downloading the example code
Errata
Piracy
Questions
1. Getting Started
Introducing the Infinispan data grid
Infinispan and JSR 107 – Java Temporary Caching API
Getting started with Infinispan
Installing Infinispan
Looking inside the box
Using Maven
Running the sample application
Creating your first project
Creating a Maven project manually
Building Infinispan from source
Setting up the environment
Contributing to the project
Summary
2. Barriers to Scaling Data
Understanding performance and scalability
Improving performance using Infinispan
An introduction to performance tuning
Infinispan and performance
Improving scalability
Vertical scalability
Horizontal scalability
Design tradeoffs
Points to consider about relational databases
Distributed transactions and ACID
CAP theorem
BASE
Infinispan, CAP, and BASE
Scaling out your database
Scaling options
Master-Slave replication
Active/Passive configuration
Database clustering
Database sharding
Infinispan and network partitions
Configuring partition handling
Infinispan and high availability
Summary
3. Using the APIs
Infinispan architecture
Anatomy of an Infinispan clustered cache
The embedded (P2P) mode
The client/server mode
The cache container
Default cache
Naming your caches
Configuring an Infinispan cache
Declarative configuration on Infinispan 6.0.x
Global configuration (globalType)
Configuration settings
Declarative configuration on Infinispan 7.0.x
Understanding the JGroups element
Configuring the threads subsystem
Configuring the cache-container element
Programmatic configuration
Infinispan APIs
Learning the cache API
Understanding cache evictions
Configuring cache expiration
Eviction v/s Expiration
Persisting data in Infinispan
Configuring a cache loader
Filesystem-based cache loaders
JDBC-based cache loaders
JPA cache store
Selecting a JDBC cache loader
Using passivation in your application
Writing event listeners and notifications
The listener API
Cluster listeners in Infinispan 7.0
Listening to cache-level events
Writing cache manager-level events
Registering event listeners
Configuring logging in Infinispan
Introducing JSR-107 – The Java Caching API
Summary
4. Infinispan Topologies
Clustering modes
The local mode
The invalidation mode
The replicated mode
Understanding synchronous and asynchronous replication
The synchronous replication
The asynchronous replication
The asynchronous marshalling
The replication queue
The distribution mode
Server Hinting
L1 caching
Summary
5. Data Access Patterns
Data access patterns
Understanding and configuring second-level cache in Hibernate with Infinispan
Introducing first-level and second-level caching
Configuring Infinispan as Hibernate second-level cache
Implementing the cache-aside programming pattern
Reading and writing through cache
Writing behind caching
The Unscheduled Write-behind strategy
The Scheduled Write-behind strategy
Summary
6. Case Study – The TicketMonster Application
The JBoss developer framework
Installing and running the TicketMonster application
Project structure
In Eclipse
In IntelliJ
The TicketMonster application use cases
Administrators use cases
Building the administration UI using JBoss Forge
JBoss Forge installation and setup
Forge Plugin for Eclipse
Architecture and design of TicketMonster
The TicketMonster domain model
Utility classes in TicketMonster
The service layer of TicketMonster
Scaling TicketMonster
Clustered Web servers versus stateful session
Which pattern to use?
Adding Infinispan to Ticket Monster
Configuring the infrastructure
Using caches for seat reservations
Implementing shopping carts
Summary
7. Understanding Transactions and Concurrency
Transaction fundamentals
Java Transaction API
Transactional modes
Non-transactional data access
Transactional models
Optimistic transaction
Pessimistic transaction
Choosing the better transaction model
Batch mode
Transaction recovery
Integrating with Transaction Manager
Locking and concurrency control
Multiversion concurrency control
Configuring isolation levels in Infinispan
Implicit and explicit locking
Lock timeouts
Deadlock detection
Data versioning
Summary
8. Managing and Monitoring Infinispan
An overview of monitoring and managing with Java
Monitoring and managing Java applications with JMX
Interacting with Infinispan via JMX
The CacheManager level
The cache level
Monitoring Infinispan with JConsole
Monitoring Infinispan with VisualVM
Infinispan's MBeans
Other management tools
Introducing RHQ
Installing and configuring RHQ
Installing RHQ Server
Installing the Infinispan plugin
Installing the RHQ Agent
Monitoring Infinispan
Planning and scheduling operations
Creating alerts
Summary
9. Server Modules
Client/Server access
Introduction to server modules
Starting the server
Configuration
Customizing the endpoint and Infinispan subsystem
Enabling protocol interoperability
Infinispan REST server
Introduction to REST services
Configuring the Infinispan REST Server on earlier versions
Introducing the REST API
Using HTTP request headers for GET and HEAD operations
Accept
Using HTTP request headers for POST and PUT operations
Content-Type
performAsync
timeToLiveSeconds
maxIdleTimeSeconds
Client side code
cURL
Options
Testing REST services with RESTClient
Consuming RESTful web services with Java
Java.net
Using the Hot Rod server
Hot Rod clients
Using the Hot Rod Java Client
Starting a RemoteCacheManager
Configuring authentication for your Hot Rod application
Introducing the SASL framework
Supported SASL mechanisms
Configuring authorization policies
Realm configuration
Authorization configuration
Client configuration
Infinispan memcached server
The memcached protocol
Connecting the Infinispan memcached server by using a Java Client
The Infinispan WebSocket server
Introducing WebSocket
Overview of the WebSocket API
WebSocket in Java
Using the Infinispan JavaScript API
Introducing the command line interface (CLI)
Starting the command line interface
Using Infinispan CLI commands
Defining data types and time values
Basic commands
connect
disconnect
cache
container
quit
Manipulating caches
get
put
clear
evict
remove
replace
Managing caches
upgrade
Arguments
create
encoding
Managing transactions
begin
commit
rollback
Batching
start
end
abort
Getting statistics and system information
locate
site
stats
version
info
Summary
10. Getting Started with Hibernate OGM
Introducing Hibernate OGM
Hibernate OGM features
Hibernate OGM architecture
Understanding how the mappings work
Installing and using Hibernate OGM
Creating a Hibernate OGM project using Maven
Configuring the persistence unit
Transaction management
Running Hibernate OGM in the Java EE environment
Running Hibernate OGM in a standalone JTA environment
Running Hibernate OGM without JTA
Configuration properties
Configuring Infinispan caches for Hibernate OGM
Creating the domain model
Summary
11. An Introduction to JGroups
Introduction to group communication
Understanding the JGroups project
The JGroups architecture
Customizing JGroups settings on Infinispan
An Overview of protocols used by JGroups
Transportation
Membership discovery
Merging
Failure detection
Reliable transmission
Fragmentation of large messages
Ordering protocols
Group membership
State transfer
Security
Flow control
Message stability
Summary
12. Advanced Topics
Cross-site replication
Configuring cross-site replication
Cross-site replication and transactions
Cross-site replication with non-transactional caches
Cross-site replication with transactional caches
Taking a site offline and online again
Integrating Infinispan with CDI
An introduction to CDI
Setting up CDI support in your Maven POM
Injecting an Infinispan cache into your Beans
Customizing the default configuration
Remote cache integration
JBoss AS7 configured Cache
Integrating with JCache annotations
Using the Map/Reduce API
An introduction to Map/Reduce
Map/Reduce in the Infinispan platform
Sample application – find a destination
Improving the serialization process using externalizers
Introducing the Infinispan externalizer API
Creating advanced externalizers
Summary
Index
Infinispan Data Grid Platform Definitive Guide
Infinispan Data Grid Platform Definitive Guide
Copyright © 2015 Packt Publishing
All rights reserved. No part of this book may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, without the prior written permission of the publisher, except in the case of brief quotations embedded in critical articles or reviews.
Every effort has been made in the preparation of this book to ensure the accuracy of the information presented. However, the information contained in this book is sold without warranty, either express or implied. Neither the author, nor Packt Publishing, and its dealers and distributors will be held liable for any damages caused or alleged to be caused directly or indirectly by this book.
Packt Publishing has endeavored to provide trademark information about all of the companies and products mentioned in this book by the appropriate use of capitals. However, Packt Publishing cannot guarantee the accuracy of this information.
First published: May 2015
Production reference: 1250515
Published by Packt Publishing Ltd.
Livery Place
35 Livery Street
Birmingham B3 2PB, UK.
ISBN 978-1-78216-997-0
www.packtpub.com
Credits
Author
Wagner Roberto dos Santos
Reviewers
Ben D. Cotton III
Gustavo Fernandes
Zdenek Henek
Andrii Kravets
Ugo Landini
Marko Lukša
Commissioning Editor
Usha Iyer
Acquisition Editor
Usha Iyer
Content Development Editor
Rohit Kumar Singh
Technical Editor
Bharat Patil
Copy Editors
Merilyn Pereira
Laxmi Subramanian
Project Coordinator
Mary Alex
Proofreaders
Stephen Copestake
Safis Editing
Indexer
Rekha Nair
Graphics
Jason Monteiro
Production Coordinator
Manu Joseph
Cover Work
Manu Joseph
About the Author
Wagner Roberto dos Santos is an Italian Brazilian software architect living in Dublin, Ireland. He has more than 14 years of professional IT experience in software development, architecture, and Agile methodologies.
He is specialized in Java Enterprise technologies, and has deep knowledge of new emerging technologies such as cloud computing, NoSQL, and big data. As an architect, he supports teams in designing and developing scalable and maintainable solutions, following best practices, design patterns, and Domain-Driven Design practices.
As an agile coach, he supports teams in the adoption of Agile methodologies, such as Scrum, extreme programming, and Kanban, to make faster and better software deliveries to demanding time scales.
Until last year, Wagner was an MBA professor of distributed computing and Java Enterprise Development at FIAP and was also an instructor of several Agile and Java courses at Globalcode, a well-known Brazilian educational center specialized in software development.
Wagner contributes actively to the Agile and Java communities in Brazil. He is a member of SOUJava and speaks regularly at conferences such as The Developers Conference and Campus Party. He is also the former lead editor of the Architecture Queue at InfoQ Brasil and writes regularly for IT magazines, such as Mundo Java and Java Magazine.
Acknowledgments
I would like to thank, absolutely foremost, God and his son Jesus Christ for giving me the incredible opportunity to write this book because without him, nothing is possible.
Thanks to JBoss and all members of the Infinispan development team—Manik Surtani, Galder Zamarreño, Mircea Markus, Sanne Grinovero, Vladimir Blagojevic, Pedro Ruivo, Navin Surtani, and Bela Ban—for building such a great product. Special thanks to Manik Surtani and Pete Muir who reviewed the outline and provided useful suggestions; they have made all the difference. They asked me to include the Ticket Monster application in Chapter 6, which was developed by Red Hat/JBoss developers. I think it was an extraordinary idea and I would like to thank them all; they have done a wonderful job with this application.
I would also like to thank Mohammad Rizvi, Pramila Balan, Amey Sawant, Arshad Sopariwala, Priyanka Goel, Ritika Dewani, Rohit Kumar Singh, Bharat Patil, and Priya Singh from Packt Publishing for trusting in me to write this book and for the support and effort you put into this project. Thank you!
Thanks to my technical reviewers, Ugo Landini, Marko Luksa, Gustavo Fernandes, Andrii Kravets, Ben Cotton, and Zdenek Henek. Their insightful and valuable comments really improved the book.
And special thanks to my family—my wife, Marcia, supported me throughout this time and my little daughter, Maria Luiza, who couldn't play with her daddy as much as she wanted to.
About the Reviewers
Ben D. Cotton III is an IT consultant at J.P. Morgan Chase, currently using Java data grid technology on a UHPC Linux platform to render and aggregate real-time liquidity risk. He is a Java community process member presently sitting on two active JCP expert groups defining Java standard APIs for Caching (JSR-107) and distributed data grids (JSR-347). Ben graduated from Rutgers University in May 1985 with a BS in computer science. He spent his first 11 years at AT&T Bell Laboratories writing C++ code supporting numerous proprietary telecommunications network analytics and provisioning protocols, and he spent the last 14 years writing Java code supporting low-latency and transactional fixed income/derivatives, electronic trading, clearing, pricing, and risk systems.
Gustavo Fernandes is a developer, consultant, trainer, and architect with a background in server-side software, ranging from JEE to system integration and, more recently, free text and semantic search, big data, NoSQL, and devops/automation tools.
Throughout his career, he devoted many years developing open source-based solutions and products for a wide range of customers from different industries, including finance, betting, social media, telco, and e-commerce.
He's worked in several countries in South America and Europe, he is an occasional speaker at conferences, and he writes a blog and articles. He enjoys contributing to open source projects and when not writing code, and he likes traveling to see the world.
He currently works at Red Hat as part of the Infinispan team.
Zdenek Henek lives in the Czech Republic in Zidlochovice. He is a husband and a father. He enjoys software development, solving problems, and playing chess.
Andrii Kravets is a highly motivated, Agile-minded engineer with more than 5 years of experience in software development and software project management, who wants to make the world better. He has a lot of experience with high-loaded distributed projects, big data, JVM languages, and web architecture. He is a co-founder of Mriya Ideas Lab.
Ugo Landini takes the sentence The only difference between men and boys is the cost of their toys
very seriously. He works as a software architect at Red Hat. He dedicates the rest of his time to what's new in the IT field and is strongly convinced that sharing knowledge is not only a must but also an opportunity for personal growth. A cofounder of the JUG Roma, Ugo is an Apache committer, develops games for mobile devices, and is convinced he can still play a decent football game (soccer for American people). He is also a cofounder and the chair of the technical committee at Codemotion.
I would like to thank Monica , Diego, and Luca, the most beautiful things that have happened to me.
Marko Lukša is a software engineer, currently working as a member of the Cloud Enablement team at Red Hat. He has been using Infinispan extensively as part of his work on project CapeDwarf, the open source implementation of the Google App Engine API. He has also contributed to Infinispan—mostly to its grid file system. Before joining Red Hat, he worked at various companies delivering different software solutions in healthcare, telecommunications, and hotel and restaurant management. He currently resides in Ljubljana, Slovenia.
www.PacktPub.com
Support files, eBooks, discount offers, and more
For support files and downloads related to your book, please visit www.PacktPub.com.
Did you know that Packt offers eBook versions of every book published, with PDF and ePub files available? You can upgrade to the eBook version at www.PacktPub.com and as a print book customer, you are entitled to a discount on the eBook copy. Get in touch with us at
At www.PacktPub.com, you can also read a collection of free technical articles, sign up for a range of free newsletters and receive exclusive discounts and offers on Packt books and eBooks.
https://www2.packtpub.com/books/subscription/packtlib
Do you need instant solutions to your IT questions? PacktLib is Packt's online digital book library. Here, you can search, access, and read Packt's entire library of books.
Why subscribe?
Fully searchable across every book published by Packt
Copy and paste, print, and bookmark content
On demand and accessible via a web browser
Free access for Packt account holders
If you have an account with Packt at www.PacktPub.com, you can use this to access PacktLib today and view 9 entirely free books. Simply use your login credentials for immediate access.
Preface
Relational database solutions have dominated the IT industry since the '80s. Over the last decade, relational databases have been losing its preference and importance for NoSQL databases and in-memory data grids.
There are many reasons involved in the decay of popularity, such as the fixed schema model, difficulties in scaling, and the centralized design that requires a heavy disk I/O for high write workloads.
Now, with the advent of big data and cloud computing technologies, enterprise systems have to deal with large data sets pushing pushing its products to a new level, allowing businesses to reduce costs and distribute their data across multiple channels and applications.
Infinispan is an in-memory data grid and can help solve these challenges. It supports dynamic scalability and provides excellent performance for applications that require exposing and distributing data. Infinispan is an open source Java application that exposes a Cache interface that extends the java.util.Map interface, which can optionally distribute the cache data across a cluster.
This book will cover all aspects about Infinispan, from installation to tuning tips, and important concepts related to Distributed Transactions, Session Management, Map/Reduce, Topologies, and Data Access Patterns.
What this book covers
Chapter 1, Getting Started, introduces Infinispan and discusses the concept of data grid and its background. You will learn how to prepare the perfect environment to create an application using Infinispan and some valuable tips on how to contribute to the project.
Chapter 2, Barriers to Scaling Data, describes common approaches that are used to overcome obstacles such as performance, scalability, and high availability. It also talks about how these solutions can be improved using Infinispan and why the reader should use Infinispan and its benefits.
Chapter 3, Using the APIs, covers the core aspects of Infinispan. You will learn the basic concepts of the Infinispan API, such as how to use the core API to store, retrieve, and remove data from it. It also covers configuration.
Chapter 4, Infinispan Topologies, covers various cache topologies supported by Infinispan and provides guidance on when to use each one and how to configure them.
Chapter 5, Data Access Patterns, presents some caching access patterns and their advantages and disadvantages.
Chapter 6, Case Study – The TicketMonster Application, introduces the Ticket Monster application to show how to put into practice the strategies and concepts you learned in the previous chapters.
Chapter 7, Understanding Transactions and Concurrency, introduces important concepts about transactions and how you work with transactions with Infinispan.
Chapter 8, Managing and Monitoring Infinispan, dives into management and monitoring Infinispan details. It shows you how to enable JMX to collect runtime information and how to manage multiple Infinispan instances spread across different servers using RHQ.
Chapter 9, Server Modules, teaches you about Infinispan modules, which allow you to access an Infinispan data grid from remote clients and from platforms and languages other than Java.
Chapter 10, Getting Started with Hibernate OGM, discusses Hibernate Object/Grid Mapper (OGM) and presents the Hibernate OGM architecture, its current features, and how to integrate Hibernate OGM with Infinispan.
Chapter 11, An Introduction to JGroups, shows that Infinispan uses JGroups as a network transport. In this chapter, we will see more details on JGroups and how it relates to Infinispan.
Chapter 12, Advanced Topics, discusses Infinispan advanced topics, such as cross-site replication, CDI, the Infinispan MapReduce framework, and how to plug Infinispan with user defined externalizers.
What you need for this book
To follow and run the example code covered in this book, you will need a computer with OpenJDK 1.6.0/Sun JDK 1.6.0 or above installed.
Furthermore, you will also need a Java Integrated Development Environment (IDE) such as IntelliJ or Eclipse, an Apache Maven 3 framework, JBoss Application Server 1.7, a MySQL Community Server and RHQ Server 4.9.
Who this book is for
Infinispan Data Grid Platform Definitive Guide is intended for those who want to learn how to build extremely scalable applications, providing a highly available key/value data store.
You will learn how to use Infinispan as a distributed cache, putting it in front of a database or a NoSQL store or any part of your system that is a bottleneck to improve performance and avoid data traffic jams
.
The book is easy to read and previous coding experience with Infinispan is not required. It is aimed at Java Enterprise Developers with a solid knowledge of Java.
Conventions
In this book, you will find a number of text styles that distinguish between different kinds of information. Here are some examples of these styles and an explanation of their meaning.
Code words in text, database table names, folder names, filenames, file extensions, pathnames, dummy URLs, user input, and Twitter handles are shown as follows: We can include other contexts through the use of the include directive.
A block of code is set as follows:
// cache operations
String key = 20130801
;
String tempData = Children are great comfort in your old age, and they help you to reach it faster too
;
tempCache.put(key, tempData);
String otherTempData = tempCache.get(key);
assert (otherTempData.equals(tempData));
tempCache.remove(key);
assert( tempCache.get(key) == null);
New terms and important words are shown in bold. Words that you see on the screen, for example, in menus or dialog boxes, appear in the text like this: To install the plugin, open the Preferences window, go the Plugins option, and click in the Browse Repositories button.
Note
Warnings or important notes appear in a box like this.
Tip
Tips and tricks appear like this.
Reader feedback
Feedback from our readers is always welcome. Let us know what you think about this book—what you liked or disliked. Reader feedback is important for us as it helps us develop titles that you will really get the most out of.
To send us general feedback, simply e-mail <feedback@packtpub.com>, and mention the book's title in the subject of your message.
If there is a topic that you have expertise in and you are interested in either writing or contributing to a book, see our author guide at www.packtpub.com/authors.
Customer support
Now that you are the proud owner of a Packt book, we have a number of things to help you to get the most from your purchase.
Downloading the example code
You can download the example code files from your account at http://www.packtpub.com for all the Packt Publishing books you have purchased. If you purchased this book elsewhere, you can visit http://www.packtpub.com/support and register to have the files e-mailed directly to you.
Errata
Although we have taken every care to ensure the accuracy of our content, mistakes do happen. If you find a mistake in one of our books—maybe a mistake in the text or the code—we would be grateful if you could report this to us. By doing so, you can save other readers from frustration and help us improve subsequent versions of this book. If you find any errata, please report them by visiting http://www.packtpub.com/submit-errata, selecting your book, clicking on the Errata Submission Form link, and entering the details of your errata. Once your errata are verified, your submission will be accepted and the errata will be uploaded to our website or added to any list of existing errata under the Errata section of that title.
To view the previously submitted errata, go to https://www.packtpub.com/books/content/support and enter the name of the book in the search field. The required information will appear under the Errata section.
Piracy
Piracy of copyrighted material on the Internet is an ongoing problem across all media. At Packt, we take the protection of our copyright and licenses very seriously. If you come across any illegal copies of our works in any form on the Internet, please provide us with the location address or website name immediately so that we can pursue a remedy.
Please contact us at <copyright@packtpub.com> with a link to the suspected pirated material.
We appreciate your help in protecting our authors and our ability to bring you valuable content.
Questions
If you have a problem with any aspect of this book, you can contact us at <questions@packtpub.com>, and we will do our best to address the problem.
Tip
All the source code used in this book, for both Infinispan version 6.0.2 and 7.* is available for download at https://github.com/wagnerrobsan/infinispan-guide.
Chapter 1. Getting Started
With the advent of Cloud technology, many paradigms started to change, like the way the industry tackles issues related data security and user privacy. Even the most conservative and traditional organizations have been forced to start adapting to this new technology, and are trying to use one of the many existent cloud platforms.
There are numerous benefits offered by cloud computing, both to end users and companies of all sizes and shapes. For small companies, they are a good option because it can minimize licensing software, and for big companies that want to expand their business, cloud computing can help improve accessibility without the need to spend too much money on hardware.
Moving to the field of data, a few years ago, managers and even developers assumed that nearly all data should be stored in a Relational Database Management System (RDBMS). Some years ago, it was unthinkable to run a production system that kept all of its data within memory, but now, due to the continuous decline in the prices of RAM, modern in-memory products are emerging such as big data analytics tools (in-memory computation) and in-memory data grids. One such in-memory data grid system is Infinispan.
Infinispan is an open source data grid platform distributed by JBoss, written in Java; it exposes a JSR-107 compatible cache interface in which you can store objects.
This first chapter launches you on a tour of this technology by focusing on fundamentals.
In this chapter, we will cover the following topics:
Introducing the Infinispan data grid
Infinispan and JSR 107 – Java Temporary Caching API
Getting started with Infinispan
Running the sample application
Creating your first project
Building Infinispan from source
Contributing to the project
Introducing the Infinispan data grid
Generally, data grids are considered an evolution of distributed caches. As the name implies, a distributed cache is characterized by the usage of multiple servers to host cached data, so that it can grow in size and in capacity. A distributed cache solution is mainly used to store temporary application data, such as web session data.
There are several benefits to using an in-memory data grid like Infinispan; a good and simple example is database offloading. Database offloading is the process of removing or reducing the database load, mainframes, and shared or partner services.
As mentioned in the introduction, Cloud platforms are also changing the way we store and distribute our data. A common solution adopted on cloud architectures is to expose the data through REST services.
In these cloud architectures, applications that expose the business data via REST services to clients normally decompose the system into layers, in order to separate the user interface from the business logic, as illustrated in the following image:
In the image, you can see how the data layer fits in a layered application. In our example, the data layer hides the implementation details to the database. We can consider that the database is a single repository of data, which is accessed at first by a few clients. However, that's the scenario if you're on a cloud environment, things can change fast.
From the performance point of view, retrieving data for every request from one single repository can be expensive, both in terms of time and hardware cost.
Also, you may need to provide access to your data for many clients' social media and mobile device integration, which can decrease the performance of your services, thereby impacting user experience.
This scenario can be a good example of offloading; in our scenario, we designed our database to provide a certain amount of data via REST services, which does not only impact the response time of the database request, but can also impact the whole infrastructure where the data is being transmitted.
Infinispan can work well in very demanding environments, as in this scenario. Thoughtful use of a distributed caching to offload the network and database can really improve performance. For instance, when a client makes a web method call to the service layer, which in turn performs several calls to the database, you could cache the query results in an Infinispan cache. Then, the next time this client needs to make the same Web method call, the service layer gets that data from the cache instead. This step can really improve overall performance because the application does not have to make an expensive database call. An Infinispan cache, in this scenario, can also reduce the pressure on the service layer, because data in an Infinispan cache can be distributed among all nodes of the cluster.
The following figure presents the same architecture as included in the first image, but now with an Infinispan cache:
At the same time, Infinispan can also power embedded applications, be used as a JPA/Hibernate second-level cache provider, or as a highly available key/value data store.
The scenario we presented previously is one of the two possible ways you can interact with Infinispan. We are using Infinispan in the embedded mode, which initiates the Infinispan data grid within the same JVM as the application.
The other way is the client/server mode, where you have an Infinispan data grid instance running in a separated server, which delivers and manages the grid content to be consumed by the client, including non-java clients, such as C++, Python, and .NET.
Tip
We will cover Infinispan Server in detail in Chapter 9, Server Modules.
Infinispan also provides an extremely low latency access to the cache, and high availability of the application data, by keeping the data in the memory and distributing it to several nodes of the grid, which makes your application able to load terabytes of data into memory. However, it not only provides a new attempt to use the main memory as a storage area instead of a disk, (Infinispan perform much faster than disk-based databases) but it also provides features such as:
Data partitioning across a cluster
Work with domain objects rather than only bytes, arrays, or strings
Synchronous and asynchronous operations throughout
Distributed ACID transactions
Data distribution through the use of a consistent hash algorithm to determine where keys should be located in the cluster
Write-through/behind cache store support
Eviction support
Elastic scaling
Multiple access protocols
Support for compute grids
Persisting state to configurable cache stores
We will cover all these features in detail throughout this chapter.
From a Java developer perspective, an Infinispan cache can be seen as a distributed key-value object store similar in its interface to a typical concurrent hash map, in a way that it can have any application domain object as either a value or a key.
Infinispan and JSR 107 – Java Temporary Caching API
The Java specification request 107 (JSR 107: JCACHE - Java Temporary Caching API) has been created to define a temporary caching API for the Java platform and presents a Map-like API. As in a regular java.util.Map, data is stored as values by keys.
Note
Java Specification Request (JSR) is a formal document that describes a proposal for a new feature or change in the Java Platform.
This process is defined by the Java Community Process (JCP), which is responsible for approving and developing the standard technical specifications for the Java technology.
Any organization or individual can sign up to become a JCP member and then participate on the expert group of a JSR or even submit their own JSR proposals.
With JCACHE, you can store and retrieve your objects, control how values expire from the cache, inspect the contents of the cache, and get statistics about the cache. JCACHE also provides support for optional runtime cache annotations, support for transactions, and listeners to add custom behavior when setting and deleting values.
The primary programming artifact is the javax.cache.Cache interface, with some modifications for distributed