Skip to content

Commit ff57317

Browse files
Merge pull request #64 from holixon/fix/63_concurrency
fix(#63) fixed concurrent modification exception
2 parents 22070e2 + 5d14bcd commit ff57317

File tree

5 files changed

+18
-16
lines changed

5 files changed

+18
-16
lines changed

frontend/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@
55
<parent>
66
<groupId>com.insidion</groupId>
77
<artifactId>axon-open-admin-parent</artifactId>
8-
<version>0.3.1</version>
8+
<version>0.3.2-SNAPSHOT</version>
99
</parent>
1010
<artifactId>axon-open-admin-frontend</artifactId>
11-
<version>0.3.1</version>
11+
<version>0.3.2-SNAPSHOT</version>
1212
<name>Frontend</name>
1313

1414
<properties>

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
<groupId>com.insidion</groupId>
99
<artifactId>axon-open-admin-parent</artifactId>
10-
<version>0.3.1</version>
10+
<version>0.3.2-SNAPSHOT</version>
1111

1212
<name>Axon Open Admin parent POM</name>
1313
<description>This Spring Boot starter project contains an administration interface for Axon Framework, including managing its tracking tokens.</description>

starter/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@
66
<parent>
77
<groupId>com.insidion</groupId>
88
<artifactId>axon-open-admin-parent</artifactId>
9-
<version>0.3.1</version>
9+
<version>0.3.2-SNAPSHOT</version>
1010
</parent>
1111
<artifactId>axon-open-admin-starter</artifactId>
1212

13-
<version>0.3.1</version>
13+
<version>0.3.2-SNAPSHOT</version>
1414

1515
<modelVersion>4.0.0</modelVersion>
1616
<packaging>jar</packaging>

starter/src/main/java/com/insidion/axon/openadmin/insights/InsightRegistrationService.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@ package com.insidion.axon.openadmin.insights
22

33
import org.springframework.stereotype.Service
44
import java.util.concurrent.ConcurrentHashMap
5+
import java.util.concurrent.atomic.AtomicInteger
56

67
@Service
78
class InsightRegistrationService {
8-
private val originMessages: MutableMap<MessageKey, Int> = ConcurrentHashMap()
9+
private val originMessages: MutableMap<MessageKey, AtomicInteger> = ConcurrentHashMap()
910
private val handlers: MutableMap<Handler, HandlerStats> = ConcurrentHashMap()
1011

1112
fun getOverview() = InsightOverview(
@@ -14,23 +15,22 @@ class InsightRegistrationService {
1415
)
1516

1617
fun reportOriginMessage(handler: MessageKey) {
17-
val current = originMessages.computeIfAbsent(handler) { 0 }
18-
originMessages[handler] = current + 1
18+
originMessages.computeIfAbsent(handler) { AtomicInteger(0) }.incrementAndGet()
1919
}
2020

2121
fun reportHandlerSuccess(handler: Handler) {
22-
handlers.computeIfAbsent(handler) { HandlerStats() }.successCounter += 1
22+
handlers.computeIfAbsent(handler) { HandlerStats() }.successCounter.incrementAndGet()
2323
}
2424

2525
fun reportHandlerMessagesPublished(handler: Handler, messages: List<MessageKey>) {
2626
val map = handlers.computeIfAbsent(handler) { HandlerStats() }.publishedMessages
2727
messages.forEach { m ->
2828
map.computeIfAbsent(m) { PublishedMessageStats(m) }
29-
.count += 1
29+
.count.incrementAndGet()
3030
}
3131
}
3232

3333
fun reportHandlerRollback(handler: Handler) {
34-
handlers.computeIfAbsent(handler) { HandlerStats() }.failureCounter += 1
34+
handlers.computeIfAbsent(handler) { HandlerStats() }.failureCounter.incrementAndGet()
3535
}
3636
}

starter/src/main/java/com/insidion/axon/openadmin/insights/models.kt

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import org.axonframework.deadline.DeadlineMessage
55
import org.axonframework.eventhandling.EventMessage
66
import org.axonframework.messaging.Message
77
import org.axonframework.queryhandling.QueryMessage
8+
import java.util.concurrent.ConcurrentHashMap
9+
import java.util.concurrent.atomic.AtomicInteger
810

911
data class InsightOverview(
1012
val handlers: List<HandlerOverview>,
@@ -18,7 +20,7 @@ data class HandlerOverview(
1820

1921
data class OriginMessageOverview(
2022
val message: MessageKey,
21-
val count: Int,
23+
val count: AtomicInteger = AtomicInteger(0),
2224
)
2325

2426
data class Handler(
@@ -46,12 +48,12 @@ data class MessageKey(
4648
}
4749

4850
data class HandlerStats(
49-
var successCounter: Int = 0,
50-
var failureCounter: Int = 0,
51-
val publishedMessages: MutableMap<MessageKey, PublishedMessageStats> = HashMap()
51+
var successCounter: AtomicInteger = AtomicInteger(0),
52+
var failureCounter: AtomicInteger = AtomicInteger(0),
53+
val publishedMessages: MutableMap<MessageKey, PublishedMessageStats> = ConcurrentHashMap()
5254
)
5355

5456
data class PublishedMessageStats(
5557
val message: MessageKey,
56-
var count: Int = 0
58+
var count: AtomicInteger = AtomicInteger(0)
5759
)

0 commit comments

Comments
 (0)