diff --git a/artemis-core-client/pom.xml b/artemis-core-client/pom.xml
index ac01cd8428..538cb76116 100644
--- a/artemis-core-client/pom.xml
+++ b/artemis-core-client/pom.xml
@@ -78,8 +78,8 @@
org.hamcrest
- hamcrest-core
- 1.3
+ hamcrest
+ ${hamcrest.version}
test
diff --git a/artemis-server/pom.xml b/artemis-server/pom.xml
index ba9b4ceb7c..c8bb63b966 100644
--- a/artemis-server/pom.xml
+++ b/artemis-server/pom.xml
@@ -198,6 +198,12 @@
mockito-core
test
+
+ org.hamcrest
+ hamcrest
+ ${hamcrest.version}
+ test
+
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/persistence/impl/journal/JournalStorageManager.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/persistence/impl/journal/JournalStorageManager.java
index 555da5210d..1d5fd2926a 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/persistence/impl/journal/JournalStorageManager.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/persistence/impl/journal/JournalStorageManager.java
@@ -75,7 +75,7 @@ public class JournalStorageManager extends AbstractJournalStorageManager {
protected SequentialFileFactory bindingsFF;
- SequentialFileFactory largeMessagesFactory;
+ protected SequentialFileFactory largeMessagesFactory;
protected Journal originalMessageJournal;
@@ -818,7 +818,7 @@ public class JournalStorageManager extends AbstractJournalStorageManager {
file.position(file.size());
if (bytes.byteBuf() != null && bytes.byteBuf().nioBufferCount() == 1) {
final ByteBuffer nioBytes = bytes.byteBuf().internalNioBuffer(bytes.readerIndex(), bytes.readableBytes());
- file.writeDirect(nioBytes, false);
+ file.blockingWriteDirect(nioBytes, false, false);
if (isReplicated()) {
//copy defensively bytes
@@ -843,8 +843,10 @@ public class JournalStorageManager extends AbstractJournalStorageManager {
readLock();
try {
file.position(file.size());
-
- file.writeDirect(ByteBuffer.wrap(bytes), false);
+ //that's an additional precaution to avoid ByteBuffer to be pooled:
+ //NIOSequentialFileFactory doesn't pool heap ByteBuffer, but better to make evident
+ //the intention by calling the right method
+ file.blockingWriteDirect(ByteBuffer.wrap(bytes), false, false);
if (isReplicated()) {
replicator.largeMessageWrite(messageId, bytes);
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/persistence/impl/journal/JournalStorageManagerTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/persistence/impl/journal/JournalStorageManagerTest.java
index 861b5e08ac..a0580941be 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/persistence/impl/journal/JournalStorageManagerTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/persistence/impl/journal/JournalStorageManagerTest.java
@@ -15,6 +15,7 @@
*/
package org.apache.activemq.artemis.core.persistence.impl.journal;
+import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Collection;
import java.util.UUID;
@@ -26,8 +27,11 @@ import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Stream;
+import org.apache.activemq.artemis.api.core.ActiveMQBuffer;
+import org.apache.activemq.artemis.api.core.ActiveMQBuffers;
import org.apache.activemq.artemis.api.core.SimpleString;
-import org.apache.activemq.artemis.core.config.impl.ConfigurationImpl;
+import org.apache.activemq.artemis.core.config.Configuration;
+import org.apache.activemq.artemis.core.io.SequentialFile;
import org.apache.activemq.artemis.core.io.aio.AIOSequentialFileFactory;
import org.apache.activemq.artemis.core.message.impl.CoreMessage;
import org.apache.activemq.artemis.core.paging.PagingManager;
@@ -36,6 +40,7 @@ import org.apache.activemq.artemis.core.replication.ReplicationManager;
import org.apache.activemq.artemis.core.server.JournalType;
import org.apache.activemq.artemis.core.server.LargeServerMessage;
import org.apache.activemq.artemis.core.server.impl.JournalLoader;
+import org.apache.activemq.artemis.tests.util.ActiveMQTestBase;
import org.apache.activemq.artemis.utils.ExecutorFactory;
import org.apache.activemq.artemis.utils.actors.OrderedExecutorFactory;
import org.junit.AfterClass;
@@ -46,21 +51,22 @@ import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import static java.util.stream.Collectors.toList;
+import static org.hamcrest.Matchers.is;
import static org.junit.Assume.assumeTrue;
+import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
@RunWith(Parameterized.class)
-public class JournalStorageManagerTest {
+public class JournalStorageManagerTest extends ActiveMQTestBase {
@Parameterized.Parameter
public JournalType journalType;
@Parameterized.Parameters(name = "journal type={0}")
public static Collection