Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,12 @@
* <code>org/springframework/integration/jdbc/schema-*.sql</code>,
* where <code>*</code> is the target database type.
* <p>
* The {@code METADATA_VALUE} column is {@code NOT NULL}. Values passed to
* {@link #put(String, String)} and {@link #putIfAbsent(String, String)} must be non-null;
* a {@code null} value cannot be stored and is rejected by the API.
* Existing databases created with older schema scripts should migrate the column to
* {@code NOT NULL} (and remove any rows with a {@code null} value) when upgrading.
* <p>
* The transaction management is required to use this {@link ConcurrentMetadataStore}.
* <p>
* This class implements {@link SmartLifecycle} and calls
Expand All @@ -54,6 +60,7 @@
* @author Artem Bilan
* @author Gary Russell
* @author Sanghun Lee
* @author Burak Kalayci
*
* @since 5.0
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ CREATE INDEX INT_CHANNEL_MSG_DELETE_IDX ON INT_CHANNEL_MESSAGE (REGION, GROUP_KE

CREATE TABLE INT_METADATA_STORE (
METADATA_KEY VARCHAR(255) NOT NULL,
METADATA_VALUE VARCHAR(4000),
METADATA_VALUE VARCHAR(4000) NOT NULL,
REGION VARCHAR(100) NOT NULL,
constraint INT_METADATA_STORE_PK primary key (METADATA_KEY, REGION)
);
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ CREATE INDEX INT_CHANNEL_MSG_DELETE_IDX ON INT_CHANNEL_MESSAGE (REGION, GROUP_KE

CREATE TABLE INT_METADATA_STORE (
METADATA_KEY VARCHAR(255) NOT NULL,
METADATA_VALUE VARCHAR(4000),
METADATA_VALUE VARCHAR(4000) NOT NULL,
REGION VARCHAR(100) NOT NULL,
constraint INT_METADATA_STORE_PK primary key (METADATA_KEY, REGION)
);
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ CREATE INDEX INT_CHANNEL_MSG_DELETE_IDX ON INT_CHANNEL_MESSAGE (REGION, GROUP_KE

CREATE TABLE INT_METADATA_STORE (
METADATA_KEY VARCHAR(255) NOT NULL,
METADATA_VALUE VARCHAR(4000),
METADATA_VALUE VARCHAR(4000) NOT NULL,
REGION VARCHAR(100) NOT NULL,
constraint INT_METADATA_STORE_PK primary key (METADATA_KEY, REGION)
);
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ CREATE INDEX INT_CHANNEL_MSG_DELETE_IDX ON INT_CHANNEL_MESSAGE (REGION, GROUP_KE

CREATE TABLE INT_METADATA_STORE (
METADATA_KEY VARCHAR(255) NOT NULL,
METADATA_VALUE VARCHAR(4000),
METADATA_VALUE VARCHAR(4000) NOT NULL,
REGION VARCHAR(100) NOT NULL,
constraint INT_METADATA_STORE_PK primary key (METADATA_KEY, REGION)
);
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ CREATE INDEX INT_CHANNEL_MSG_DELETE_IDX ON INT_CHANNEL_MESSAGE (REGION, GROUP_KE

CREATE TABLE INT_METADATA_STORE (
METADATA_KEY VARCHAR(255) NOT NULL,
METADATA_VALUE VARCHAR(4000),
METADATA_VALUE VARCHAR(4000) NOT NULL,
REGION VARCHAR(100) NOT NULL,
constraint INT_METADATA_STORE_PK primary key (METADATA_KEY, REGION)
) ENGINE=InnoDB;
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ CREATE INDEX INT_CHANNEL_MSG_DELETE_IDX ON INT_CHANNEL_MESSAGE (REGION, GROUP_KE

CREATE TABLE INT_METADATA_STORE (
METADATA_KEY VARCHAR2(255) NOT NULL,
METADATA_VALUE VARCHAR2(4000),
METADATA_VALUE VARCHAR2(4000) NOT NULL,
REGION VARCHAR2(100) NOT NULL,
constraint INT_METADATA_STORE_PK primary key (METADATA_KEY, REGION)
);
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ CREATE INDEX INT_CHANNEL_MSG_DELETE_IDX ON INT_CHANNEL_MESSAGE (REGION, GROUP_KE

CREATE TABLE INT_METADATA_STORE (
METADATA_KEY VARCHAR(255) NOT NULL,
METADATA_VALUE VARCHAR(4000),
METADATA_VALUE VARCHAR(4000) NOT NULL,
REGION VARCHAR(100) NOT NULL,
constraint INT_METADATA_STORE_PK primary key (METADATA_KEY, REGION)
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ CREATE INDEX INT_CHANNEL_MSG_DELETE_IDX ON INT_CHANNEL_MESSAGE (REGION, GROUP_KE

CREATE TABLE INT_METADATA_STORE (
METADATA_KEY NVARCHAR(255) NOT NULL,
METADATA_VALUE NVARCHAR(4000),
METADATA_VALUE NVARCHAR(4000) NOT NULL,
REGION NVARCHAR(100) NOT NULL,
constraint INT_METADATA_STORE_PK primary key (METADATA_KEY, REGION)
);
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ CREATE INDEX INT_CHANNEL_MSG_DELETE_IDX ON INT_CHANNEL_MESSAGE (REGION, GROUP_KE

CREATE TABLE INT_METADATA_STORE (
METADATA_KEY VARCHAR(255) NOT NULL,
METADATA_VALUE VARCHAR(4000),
METADATA_VALUE VARCHAR(4000) NOT NULL,
REGION VARCHAR(100) NOT NULL,
constraint INT_METADATA_STORE_PK primary key (METADATA_KEY, REGION)
) LOCK DATAROWS;
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,9 @@

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContextException;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.integration.test.util.TestUtils;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
import org.springframework.transaction.annotation.Transactional;
Expand All @@ -37,6 +39,7 @@
/**
* @author Bojan Vukasovic
* @author Artem Bilan
* @author Burak Kalayci
*
* @since 5.0
*/
Expand Down Expand Up @@ -124,4 +127,27 @@ void noTableThrowsExceptionOnStart() {
}
}

@Test
void metadataValueColumnRejectsNull() {
JdbcTemplate jdbcTemplate = new JdbcTemplate(this.dataSource);
assertThatExceptionOfType(DataIntegrityViolationException.class)
.isThrownBy(() -> jdbcTemplate.update(
"INSERT INTO INT_METADATA_STORE(METADATA_KEY, METADATA_VALUE, REGION) VALUES (?, ?, ?)",
"nullValued", null, "DEFAULT"));
}

@Test
void putIfAbsentRejectsNullValue() {
assertThatExceptionOfType(IllegalArgumentException.class)
.isThrownBy(() -> this.metadataStore.putIfAbsent("testKey", null))
.withMessageContaining("value");
}

@Test
void putRejectsNullValue() {
assertThatExceptionOfType(IllegalArgumentException.class)
.isThrownBy(() -> this.metadataStore.put("testKey", null))
.withMessageContaining("value");
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ For example, the following listing shows the H2 DDL for the metadata table:
----
CREATE TABLE INT_METADATA_STORE (
METADATA_KEY VARCHAR(255) NOT NULL,
METADATA_VALUE VARCHAR(4000),
METADATA_VALUE VARCHAR(4000) NOT NULL,
REGION VARCHAR(100) NOT NULL,
constraint INT_METADATA_STORE_PK primary key (METADATA_KEY, REGION)
);
Expand Down
7 changes: 7 additions & 0 deletions src/reference/antora/modules/ROOT/pages/whats-new.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,10 @@ The `wait-for-confirm` option on the outbound channel adapter now also works wit
When the message has no correlation data, the send is performed within the scope of a `RabbitTemplate.invoke()` operation and `waitForConfirmsOrDie()` is used.
A warning is now logged when the option is set but the connection factory supports no publisher confirms at all.
See xref:amqp/outbound-channel-adapter.adoc[] for more information.

[[x7.2-jdbc-changes]]
=== JDBC Support Changes

The `METADATA_VALUE` column in the `JdbcMetadataStore` schema scripts is now `NOT NULL`.
Existing databases created with older scripts should remove any null-valued rows and alter the column to `NOT NULL` when upgrading.
See xref:jdbc/metadata-store.adoc[] for more information.