1 package com.atlassian.cache.hazelcast;
2
3 import java.util.concurrent.atomic.AtomicInteger;
4
5 import com.atlassian.hazelcast.serialization.OsgiClassLoaderRegistry;
6 import com.atlassian.hazelcast.serialization.OsgiSafe;
7 import com.atlassian.hazelcast.serialization.OsgiSafeStreamSerializer;
8 import com.atlassian.hazelcast.test.DefaultNodeConfigurer;
9 import com.atlassian.hazelcast.test.HazelcastCluster;
10
11 import com.hazelcast.config.Config;
12 import com.hazelcast.config.SerializerConfig;
13
14
15
16
17 public class InitOnceHazelcastCluster extends HazelcastCluster
18 {
19 private static final InitOnceHazelcastCluster INSTANCE = new Builder().size(2).nodeConfigurer(new DefaultNodeConfigurer()
20 {
21 @Override
22 public Config createConfig(int nodeIndex)
23 {
24 Config config = super.createConfig(nodeIndex);
25 config.getSerializationConfig().addSerializerConfig(
26 new SerializerConfig()
27 .setTypeClass(OsgiSafe.class)
28 .setImplementation(new OsgiSafeStreamSerializer(new OsgiClassLoaderRegistry()))
29 );
30 return config;
31 }
32 }).build();
33
34
35
36 private final AtomicInteger activeCount = new AtomicInteger();
37
38 protected InitOnceHazelcastCluster(Builder builder)
39 {
40 super(builder);
41 }
42
43 public int size()
44 {
45 return getNodes().size();
46 }
47
48 @Override
49 protected void after()
50 {
51 if (activeCount.decrementAndGet() == 0)
52 {
53
54 super.after();
55 } else {
56 super.reset();
57 }
58 }
59
60 @Override
61 protected void before() throws Throwable
62 {
63 if (activeCount.getAndIncrement() == 0)
64 {
65
66 super.before();
67 } else {
68 super.reset();
69 }
70 }
71
72 public static InitOnceHazelcastCluster getInstance()
73 {
74 return INSTANCE;
75 }
76
77 public static class Builder extends AbstractBuilder<Builder, InitOnceHazelcastCluster>
78 {
79 @Override
80 public InitOnceHazelcastCluster build()
81 {
82 return new InitOnceHazelcastCluster(this);
83 }
84
85 @Override
86 protected Builder self()
87 {
88 return this;
89 }
90 }
91 }