2. @PeterVeentjer#DV13-{session hashtag}
• Working for Hazelcast
• Senior developer
• Solution architect
• Author of ‘Pragmatic Guide to Hazelcast 3'
• 13 years Java experience
• Big love
• Concurrency control
• Distributed computing
Whoami
5. @PeterVeentjer#DV13-{session hashtag}
What is Hazelcast?
• Leading Open Source Java In Memory Data/Compute Grid
• Main goal is to simplify development of:
• Scalable systems
• Highly available systems
6. @PeterVeentjer#DV13-{session hashtag}
Why Hazelcast?
• 2.5 MByte JAR
• no other dependencies!
• no need to install software!
• Its a library, not an application framework
• Scale at the application level
• Apache 2 License
• Free to use
• no limitations
66. @PeterVeentjer#DV13-{session hashtag}
private
class
BalanceTask
implements
Runnable,Serializable{
private
int
accountId,
amount;
!
public
void
run()
{
for(;;){
Account
oldAccount
=
accounts.get(accountId);
Account
newAccount
=
new
Account(oldAccount);
newAccount.balance+=amount;
if(accounts.replace(accountId,
oldAccount,newAccount)){
return;
}
}
}
}
Increment with runnable
67. @PeterVeentjer#DV13-{session hashtag}
public
void
increment(int
accountId,
int
amount){
BalanceTask
task
=
new
BalanceTask(accountId,amount);
executorService.executeOnKeyOwner(task,accountId);
}
Increment with runnable
68. @PeterVeentjer#DV13-{session hashtag}
class
BalanceProcessor
extends
AbstractEntryProcessor<Integer,Account>{
int
amount;
BalanceProcessor(int
amount)
{
this.amount
=
amount;
}
!
@Override
public
Object
process(Map.Entry<Integer,
Account>
entry)
{
entry.getValue().balance+=amount;
return
null;
}
}
Increment with EntryProcessor
69. @PeterVeentjer#DV13-{session hashtag}
public
void
increment(int
accountId,
int
amount){
BalanceProcessor
processor
=
new
BalanceProcessor(amount);
accounts.executeOnKey(accountId,
processor);
}
Using entry processor