extends StringParser, StringFormatter, ScalarData
* This type should be consistent with the toJdbcType() method in converting
* the type to the appropriate type for binding to preparedStatements.
*/
- int getJdbcType();
+ int jdbcType();
/**
* Return the type that matches the bean property type.
*
* This represents the 'logical' type rather than the JDBC type this maps to.
*/
- Class getType();
+ Class type();
+
+ /**
+ * Return the type this maps to for JSON document stores.
+ */
+ DocPropertyType docType();
/**
* Read the value from the resultSet and convert if necessary to the logical
@@ -101,12 +105,6 @@ public interface ScalarType extends StringParser, StringFormatter, ScalarData
@Override
T read(DataReader reader) throws SQLException;
- /**
- * Ignore the reading of this value. Typically, this means moving the index
- * position in the ResultSet.
- */
- void loadIgnore(DataReader reader);
-
/**
* Convert (if necessary) and bind the value to the preparedStatement.
*
@@ -135,6 +133,14 @@ public interface ScalarType extends StringParser, StringFormatter, ScalarData
*/
T toBeanType(Object value);
+ /**
+ * Convert the string value to the appropriate java object.
+ *
+ * Mostly used to support CSV, JSON and XML parsing.
+ */
+ @Override
+ T parse(String value);
+
/**
* Convert the type into a string representation.
*/
@@ -147,34 +153,10 @@ public interface ScalarType extends StringParser, StringFormatter, ScalarData
*
* This is so that ScalarType also implements the StringFormatter interface.
*/
+ @SuppressWarnings("unchecked")
@Override
- String format(Object value);
-
- /**
- * Convert the string value to the appropriate java object.
- *
- * Mostly used to support CSV, JSON and XML parsing.
- */
- @Override
- T parse(String value);
-
- /**
- * Return the type this maps to for JSON document stores.
- */
- DocPropertyType getDocType();
-
- /**
- * Return true if the type can accept long systemTimeMillis input.
- *
- * This is used to determine if it is sensible to use the
- * {@link #convertFromMillis(long)} method.
- *
- * This includes the Date, Calendar, sql Date, Time, Timestamp, JODA types
- * as well as Long, BigDecimal and String (although it generally is not
- * expected to parse systemTimeMillis to a String or BigDecimal).
- */
- default boolean isDateTimeCapable() {
- return false;
+ default String format(Object value) {
+ return formatValue((T) value);
}
/**
@@ -184,15 +166,6 @@ public interface ScalarType extends StringParser, StringFormatter, ScalarData
throw new UnsupportedOperationException();
}
- /**
- * Convert the systemTimeMillis into the appropriate java object.
- *
- * For non dateTime types this will throw an exception.
- */
- default T convertFromMillis(long dateTime) {
- throw new UnsupportedOperationException();
- }
-
/**
* Read the value from binary input.
*/
diff --git a/ebean-core-type/src/main/java/io/ebean/core/type/ScalarTypeBase.java b/ebean-core-type/src/main/java/io/ebean/core/type/ScalarTypeBase.java
new file mode 100644
index 000000000..3231016c2
--- /dev/null
+++ b/ebean-core-type/src/main/java/io/ebean/core/type/ScalarTypeBase.java
@@ -0,0 +1,33 @@
+package io.ebean.core.type;
+
+/**
+ * Base ScalarType object.
+ */
+public abstract class ScalarTypeBase implements ScalarType {
+
+ protected final Class type;
+ protected final boolean jdbcNative;
+ protected final int jdbcType;
+
+ public ScalarTypeBase(Class type, boolean jdbcNative, int jdbcType) {
+ this.type = type;
+ this.jdbcNative = jdbcNative;
+ this.jdbcType = jdbcType;
+ }
+
+ @Override
+ public boolean jdbcNative() {
+ return jdbcNative;
+ }
+
+ @Override
+ public int jdbcType() {
+ return jdbcType;
+ }
+
+ @Override
+ public Class type() {
+ return type;
+ }
+
+}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBaseDate.java b/ebean-core-type/src/main/java/io/ebean/core/type/ScalarTypeBaseDate.java
similarity index 70%
rename from ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBaseDate.java
rename to ebean-core-type/src/main/java/io/ebean/core/type/ScalarTypeBaseDate.java
index 4e55d34de..5d76cfade 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBaseDate.java
+++ b/ebean-core-type/src/main/java/io/ebean/core/type/ScalarTypeBaseDate.java
@@ -1,4 +1,4 @@
-package io.ebeaninternal.server.type;
+package io.ebean.core.type;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
@@ -7,6 +7,7 @@ import io.ebean.config.JsonConfig;
import io.ebean.core.type.DataBinder;
import io.ebean.core.type.DataReader;
import io.ebean.core.type.DocPropertyType;
+import io.ebean.core.type.ScalarTypeBase;
import java.io.DataInput;
import java.io.DataOutput;
@@ -18,15 +19,20 @@ import java.sql.Types;
/**
* Base class for Date types.
*/
-abstract class ScalarTypeBaseDate extends ScalarTypeBase {
+public abstract class ScalarTypeBaseDate extends ScalarTypeBase {
protected final JsonConfig.Date mode;
- ScalarTypeBaseDate(JsonConfig.Date mode, Class type, boolean jdbcNative, int jdbcType) {
+ public ScalarTypeBaseDate(JsonConfig.Date mode, Class type, boolean jdbcNative, int jdbcType) {
super(type, jdbcNative, jdbcType);
this.mode = mode;
}
+ /**
+ * Convert the value to ISO8601 format.
+ */
+ protected abstract String toIsoFormat(T value);
+
/**
* Convert the target value to millis.
*/
@@ -53,38 +59,27 @@ abstract class ScalarTypeBaseDate extends ScalarTypeBase {
@Override
public T read(DataReader reader) throws SQLException {
- Date ts = reader.getDate();
- return ts == null ? null : convertFromDate(ts);
+ final Date date = reader.getDate();
+ return date == null ? null : convertFromDate(date);
}
@Override
- public String formatValue(T t) {
- Date date = convertToDate(t);
- // format all dates into epoch millis
- long epochMillis = date.getTime();
- return Long.toString(epochMillis);
+ public String formatValue(T value) {
+ final Date date = convertToDate(value);
+ return Long.toString(date.getTime());
}
@Override
public T parse(String value) {
try {
- long epochMillis = Long.parseLong(value);
- return convertFromDate(new Date(epochMillis));
+ return convertFromDate(new Date(Long.parseLong(value)));
} catch (NumberFormatException e) {
- Date date = Date.valueOf(value);
- return convertFromDate(date);
+ return convertFromDate(Date.valueOf(value));
}
}
- @Override
public T convertFromMillis(long systemTimeMillis) {
- Date ts = new Date(systemTimeMillis);
- return convertFromDate(ts);
- }
-
- @Override
- public boolean isDateTimeCapable() {
- return true;
+ return convertFromDate(new Date(systemTimeMillis));
}
@Override
@@ -105,13 +100,8 @@ abstract class ScalarTypeBaseDate extends ScalarTypeBase {
}
}
- /**
- * Convert the value to ISO8601 format.
- */
- protected abstract String toIsoFormat(T value);
-
@Override
- public DocPropertyType getDocType() {
+ public DocPropertyType docType() {
return DocPropertyType.DATE;
}
@@ -120,9 +110,7 @@ abstract class ScalarTypeBaseDate extends ScalarTypeBase {
if (!dataInput.readBoolean()) {
return null;
} else {
- long val = dataInput.readLong();
- Date date = new Date(val);
- return convertFromDate(date);
+ return convertFromDate(new Date(dataInput.readLong()));
}
}
@@ -132,8 +120,7 @@ abstract class ScalarTypeBaseDate extends ScalarTypeBase {
dataOutput.writeBoolean(false);
} else {
dataOutput.writeBoolean(true);
- Date date = convertToDate(value);
- dataOutput.writeLong(date.getTime());
+ dataOutput.writeLong(convertToDate(value).getTime());
}
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBaseDateTime.java b/ebean-core-type/src/main/java/io/ebean/core/type/ScalarTypeBaseDateTime.java
similarity index 85%
rename from ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBaseDateTime.java
rename to ebean-core-type/src/main/java/io/ebean/core/type/ScalarTypeBaseDateTime.java
index aa1670df7..0ee2cb82f 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBaseDateTime.java
+++ b/ebean-core-type/src/main/java/io/ebean/core/type/ScalarTypeBaseDateTime.java
@@ -1,11 +1,8 @@
-package io.ebeaninternal.server.type;
+package io.ebean.core.type;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import io.ebean.config.JsonConfig;
-import io.ebean.core.type.DataBinder;
-import io.ebean.core.type.DataReader;
-import io.ebean.core.type.DocPropertyType;
import java.io.DataInput;
import java.io.DataOutput;
@@ -16,16 +13,14 @@ import java.sql.Timestamp;
import java.sql.Types;
import java.time.Instant;
-import static io.ebeaninternal.server.type.IsoJsonDateTimeParser.parseIso;
-
/**
* Base type for DateTime types.
*/
-abstract class ScalarTypeBaseDateTime extends ScalarTypeBase {
+public abstract class ScalarTypeBaseDateTime extends ScalarTypeBase {
protected final JsonConfig.DateTime mode;
- ScalarTypeBaseDateTime(JsonConfig.DateTime mode, Class type, boolean jdbcNative, int jdbcType) {
+ public ScalarTypeBaseDateTime(JsonConfig.DateTime mode, Class type, boolean jdbcNative, int jdbcType) {
super(type, jdbcNative, jdbcType);
this.mode = mode;
}
@@ -53,7 +48,6 @@ abstract class ScalarTypeBaseDateTime extends ScalarTypeBase {
/**
* Convert from epoch millis to the value.
*/
- @Override
public abstract T convertFromMillis(long systemTimeMillis);
/**
@@ -75,7 +69,7 @@ abstract class ScalarTypeBaseDateTime extends ScalarTypeBase {
* Convert the value to ISO8601 format.
*/
protected T fromJsonISO8601(String value) {
- return convertFromInstant(parseIso(value));
+ return convertFromInstant(ScalarTypeUtils.parseInstant(value));
}
@Override
@@ -101,7 +95,7 @@ abstract class ScalarTypeBaseDateTime extends ScalarTypeBase {
* Helper method that given epoch seconds and nanos return a JSON nanos formatted string.
*/
protected String toJsonNanos(long epochSecs, int nanos) {
- return DecimalUtils.toDecimal(epochSecs, nanos);
+ return ScalarTypeUtils.toDecimal(epochSecs, nanos);
}
@Override
@@ -112,7 +106,7 @@ abstract class ScalarTypeBaseDateTime extends ScalarTypeBase {
}
case VALUE_NUMBER_FLOAT: {
BigDecimal value = parser.getDecimalValue();
- Timestamp timestamp = DecimalUtils.toTimestamp(value);
+ Timestamp timestamp = ScalarTypeUtils.toTimestamp(value);
return convertFromTimestamp(timestamp);
}
default: {
@@ -139,7 +133,7 @@ abstract class ScalarTypeBaseDateTime extends ScalarTypeBase {
}
@Override
- public DocPropertyType getDocType() {
+ public DocPropertyType docType() {
return DocPropertyType.DATETIME;
}
@@ -160,11 +154,6 @@ abstract class ScalarTypeBaseDateTime extends ScalarTypeBase {
}
}
- @Override
- public boolean isDateTimeCapable() {
- return true;
- }
-
@Override
public T readData(DataInput dataInput) throws IOException {
if (!dataInput.readBoolean()) {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBaseVarchar.java b/ebean-core-type/src/main/java/io/ebean/core/type/ScalarTypeBaseVarchar.java
similarity index 79%
rename from ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBaseVarchar.java
rename to ebean-core-type/src/main/java/io/ebean/core/type/ScalarTypeBaseVarchar.java
index 75eaa17b5..99c83561b 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBaseVarchar.java
+++ b/ebean-core-type/src/main/java/io/ebean/core/type/ScalarTypeBaseVarchar.java
@@ -1,11 +1,7 @@
-package io.ebeaninternal.server.type;
+package io.ebean.core.type;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
-import io.ebean.core.type.DataBinder;
-import io.ebean.core.type.DataReader;
-import io.ebean.core.type.DocPropertyType;
-import io.ebean.text.TextException;
import java.io.DataInput;
import java.io.DataOutput;
@@ -17,13 +13,13 @@ import java.sql.Types;
* Base ScalarType for types which converts to and from a VARCHAR database
* column.
*/
-abstract class ScalarTypeBaseVarchar extends ScalarTypeBase {
+public abstract class ScalarTypeBaseVarchar extends ScalarTypeBase {
- ScalarTypeBaseVarchar(Class type) {
+ public ScalarTypeBaseVarchar(Class type) {
super(type, false, Types.VARCHAR);
}
- ScalarTypeBaseVarchar(Class type, boolean jdbcNative, int jdbcType) {
+ public ScalarTypeBaseVarchar(Class type, boolean jdbcNative, int jdbcType) {
super(type, jdbcNative, jdbcType);
}
@@ -88,12 +84,6 @@ abstract class ScalarTypeBaseVarchar extends ScalarTypeBase {
return format(value);
}
- @Override
- @SuppressWarnings("unchecked")
- public String format(Object value) {
- return formatValue((T) value);
- }
-
@Override
public T readData(DataInput dataInput) throws IOException {
if (!dataInput.readBoolean()) {
@@ -108,7 +98,8 @@ abstract class ScalarTypeBaseVarchar extends ScalarTypeBase {
if (value == null) {
dataOutput.writeBoolean(false);
} else {
- ScalarHelp.writeUTF(dataOutput, convertToDbString(value));
+ dataOutput.writeBoolean(true);
+ dataOutput.writeUTF(convertToDbString(value));
}
}
@@ -123,7 +114,7 @@ abstract class ScalarTypeBaseVarchar extends ScalarTypeBase {
}
@Override
- public DocPropertyType getDocType() {
+ public DocPropertyType docType() {
return DocPropertyType.TEXT;
}
diff --git a/ebean-core-type/src/main/java/io/ebean/core/type/ScalarTypeSet.java b/ebean-core-type/src/main/java/io/ebean/core/type/ScalarTypeSet.java
new file mode 100644
index 000000000..725ebac3f
--- /dev/null
+++ b/ebean-core-type/src/main/java/io/ebean/core/type/ScalarTypeSet.java
@@ -0,0 +1,28 @@
+package io.ebean.core.type;
+
+import io.avaje.lang.Nullable;
+
+/**
+ * A ScalarType that has variations based on the mapped JDBC type (like VARCHAR, CLOB, JSON etc).
+ */
+public interface ScalarTypeSet {
+
+ /**
+ * The property type these scalar types map to.
+ */
+ Class> type();
+
+ /**
+ * Return a default ScalarType to use when no other annotations like {@code @DbJson} are present.
+ */
+ @Nullable
+ ScalarType> defaultType();
+
+ /**
+ * Return the scalarType to use for the given jdbc type.
+ *
+ * For example VARCHAR, CLOB, JSON etc.
+ */
+ ScalarType forType(int jdbcType);
+
+}
diff --git a/ebean-core-type/src/main/java/io/ebean/core/type/ScalarTypeSetFactory.java b/ebean-core-type/src/main/java/io/ebean/core/type/ScalarTypeSetFactory.java
new file mode 100644
index 000000000..21d133a37
--- /dev/null
+++ b/ebean-core-type/src/main/java/io/ebean/core/type/ScalarTypeSetFactory.java
@@ -0,0 +1,17 @@
+package io.ebean.core.type;
+
+import io.avaje.lang.Nullable;
+import io.ebean.config.DatabaseConfig;
+
+/**
+ * Factory to create ScalarTypeSet.
+ */
+public interface ScalarTypeSetFactory {
+
+ /**
+ * Create the ScalarTypeSet given the config and optional objectMapper.
+ */
+ @Nullable
+ ScalarTypeSet> createTypeSet(DatabaseConfig config, @Nullable Object objectMapper);
+
+}
diff --git a/ebean-core-type/src/main/java/io/ebean/core/type/ScalarTypeUtils.java b/ebean-core-type/src/main/java/io/ebean/core/type/ScalarTypeUtils.java
new file mode 100644
index 000000000..efd4b6780
--- /dev/null
+++ b/ebean-core-type/src/main/java/io/ebean/core/type/ScalarTypeUtils.java
@@ -0,0 +1,179 @@
+package io.ebean.core.type;
+
+import java.math.BigDecimal;
+import java.sql.Timestamp;
+import java.time.Duration;
+import java.time.Instant;
+import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeFormatterBuilder;
+import java.util.UUID;
+
+/**
+ * Utilities to aid in the translation of decimal types to/from multiple parts.
+ *
+ * @author Nick Williams
+ * @since 2.2.0
+ */
+public final class ScalarTypeUtils {
+
+ private static final char[] ZEROES = new char[]{'0', '0', '0', '0', '0', '0', '0', '0', '0'};
+
+ private static final BigDecimal ONE_BILLION = new BigDecimal(1000000000L);
+
+ private static final DateTimeFormatter ISO_MILLIS = new DateTimeFormatterBuilder()
+ .parseCaseInsensitive()
+ .appendInstant(3)
+ .toFormatter();
+
+ /**
+ * Parse using ISO8601.
+ */
+ public static Instant parseInstant(String jsonDateTime) {
+ return Instant.parse(jsonDateTime);
+ }
+
+ /**
+ * Format using ISO8601.
+ */
+ public static String formatInstant(Instant value) {
+ return ISO_MILLIS.format(value);
+ }
+
+ /**
+ * Convert decimal to duration with nanos.
+ */
+ public static Duration toDuration(BigDecimal value) {
+ long seconds = value.longValue();
+ int nanoseconds = extractNanosecondDecimal(value, seconds);
+ return Duration.ofSeconds(seconds, nanoseconds);
+ }
+
+ /**
+ * Convert duration to decimal with nanos.
+ */
+ public static BigDecimal toDecimal(Duration instant) {
+ return new BigDecimal(toDecimal(instant.getSeconds(), instant.getNano()));
+ }
+
+ /**
+ * Convert decimal to timestamp with nanos.
+ */
+ public static Timestamp toTimestamp(BigDecimal value) {
+ long seconds = value.longValue();
+ int nanoseconds = extractNanosecondDecimal(value, seconds);
+ Timestamp ts = new Timestamp(seconds * 1000);
+ ts.setNanos(nanoseconds);
+ return ts;
+ }
+
+ /**
+ * Convert timestamp to decimal with nanos.
+ */
+ public static BigDecimal toDecimal(Timestamp instant) {
+ long millis = instant.getTime();
+ long secs = millis / 1000;
+ return new BigDecimal(toDecimal(secs, instant.getNanos()));
+ }
+
+ /**
+ * Convert to decimal string with nanos.
+ */
+ public static String toDecimal(long seconds, int nanoseconds) {
+ StringBuilder string = new StringBuilder(Integer.toString(nanoseconds));
+ if (string.length() < 9)
+ string.insert(0, ZEROES, 0, 9 - string.length());
+ return seconds + "." + string;
+ }
+
+ private static int extractNanosecondDecimal(BigDecimal value, long integer) {
+ return value.subtract(new BigDecimal(integer)).multiply(ONE_BILLION).intValue();
+ }
+
+
+ /**
+ * Convert from byte[] to UUID.
+ */
+ public static UUID uuidFromBytes(byte[] bytes, boolean optimized) {
+ int usableBytes = Math.min(bytes.length, 16);
+
+ // Need exactly 16 bytes - pad the input if not enough bytes are provided
+ // Use provided bytes in the least significant position; if more than 16 bytes are given,
+ // then use the first 16 bytes from the array;
+ byte[] barr = new byte[16];
+ for (int i = 15, j = usableBytes - 1; j >= 0; i--, j--) {
+ barr[i] = bytes[j];
+ }
+
+ long msb;
+ if (optimized) {
+ msb = ((long)barr[4] << 56) + // XXXXXXXX-____-____-...
+ ((long)(barr[5] & 255) << 48) + // -> put at end 4..7 of buf
+ ((long)(barr[6] & 255) << 40) +
+ ((long)(barr[7] & 255) << 32) +
+ ((long)(barr[2] & 255) << 24) + // ________-XXXX-____-...
+ ((barr[3] & 255) << 16) + // put at 2..3 in buf
+ ((barr[0] & 255) << 8) + // ________-____-XXXX-...
+ ((barr[1] & 255) << 0); // put at 0..1 in buf
+ } else {
+ msb = ((long)barr[0] << 56) + // XXXXXXXX-____-____-...
+ ((long)(barr[1] & 255) << 48) +
+ ((long)(barr[2] & 255) << 40) +
+ ((long)(barr[3] & 255) << 32) +
+ ((long)(barr[4] & 255) << 24) + // ________-XXXX-____-...
+ ((barr[5] & 255) << 16) +
+ ((barr[6] & 255) << 8) + // ________-____-XXXX-...
+ ((barr[7] & 255) << 0);
+ }
+ long lsb = ((long)barr[8] << 56) +
+ ((long)(barr[9] & 255) << 48) +
+ ((long)(barr[10] & 255) << 40) +
+ ((long)(barr[11] & 255) << 32) +
+ ((long)(barr[12] & 255) << 24) +
+ ((barr[13] & 255) << 16) +
+ ((barr[14] & 255) << 8) +
+ ((barr[15] & 255) << 0);
+
+ return new UUID(msb, lsb);
+ }
+
+ /**
+ * Convert from UUID to byte[].
+ */
+ public static byte[] uuidToBytes(UUID uuid, boolean optimized) {
+ byte[] ret = new byte[16];
+ long l = uuid.getMostSignificantBits();
+
+ if (optimized) {
+ ret[0] = (byte) (l >>> 8); // was 6/7
+ ret[1] = (byte) (l >>> 0);
+
+ ret[2] = (byte) (l >>> 24); // was 4/5
+ ret[3] = (byte) (l >>> 16);
+
+ ret[4] = (byte) (l >>> 56); // was 0..3
+ ret[5] = (byte) (l >>> 48);
+ ret[6] = (byte) (l >>> 40);
+ ret[7] = (byte) (l >>> 32);
+ } else {
+ ret[0] = (byte) (l >>> 56);
+ ret[1] = (byte) (l >>> 48);
+ ret[2] = (byte) (l >>> 40);
+ ret[3] = (byte) (l >>> 32);
+ ret[4] = (byte) (l >>> 24);
+ ret[5] = (byte) (l >>> 16);
+ ret[6] = (byte) (l >>> 8);
+ ret[7] = (byte) (l >>> 0);
+ }
+ l = uuid.getLeastSignificantBits();
+ ret[8] = (byte) (l >>> 56);
+ ret[9] = (byte) (l >>> 48);
+ ret[10] = (byte) (l >>> 40);
+ ret[11] = (byte) (l >>> 32);
+ ret[12] = (byte) (l >>> 24);
+ ret[13] = (byte) (l >>> 16);
+ ret[14] = (byte) (l >>> 8);
+ ret[15] = (byte) (l >>> 0);
+
+ return ret;
+ }
+}
diff --git a/ebean-core-type/src/main/java/module-info.java b/ebean-core-type/src/main/java/module-info.java
index 557d5a302..88be6d462 100644
--- a/ebean-core-type/src/main/java/module-info.java
+++ b/ebean-core-type/src/main/java/module-info.java
@@ -4,6 +4,7 @@ module io.ebean.core.type {
requires transitive java.sql;
requires transitive io.ebean.api;
+ requires static org.postgresql.jdbc;
requires static com.fasterxml.jackson.core;
diff --git a/ebean-core-type/src/test/java/io/ebean/core/type/DecimalUtilsTest.java b/ebean-core-type/src/test/java/io/ebean/core/type/DecimalUtilsTest.java
new file mode 100644
index 000000000..91a7c631c
--- /dev/null
+++ b/ebean-core-type/src/test/java/io/ebean/core/type/DecimalUtilsTest.java
@@ -0,0 +1,36 @@
+package io.ebean.core.type;
+
+import org.junit.jupiter.api.Test;
+
+import java.math.BigDecimal;
+import java.sql.Timestamp;
+import java.time.Duration;
+import java.time.Instant;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+class DecimalUtilsTest {
+
+ @Test
+ void testToDecimal() {
+ Instant now = Instant.now();
+ Timestamp sourceTimestamp = Timestamp.from(now);
+
+ BigDecimal decimal = ScalarTypeUtils.toDecimal(sourceTimestamp);
+ Timestamp timestamp = ScalarTypeUtils.toTimestamp(decimal);
+
+ assertEquals(now, timestamp.toInstant());
+ assertEquals(sourceTimestamp, timestamp);
+ }
+
+ @Test
+ void testDuration() {
+ Duration duration = Duration.ofSeconds(323, 1500000);
+
+ BigDecimal bigDecimal = ScalarTypeUtils.toDecimal(duration);
+ Duration duration1 = ScalarTypeUtils.toDuration(bigDecimal);
+
+ assertEquals(duration, duration1);
+ assertEquals("PT5M23.0015S", duration1.toString());
+ }
+}
diff --git a/ebean-core/src/test/java/io/ebeaninternal/server/type/IsoJsonDateTimeParserTest.java b/ebean-core-type/src/test/java/io/ebean/core/type/IsoJsonDateTimeParserTest.java
similarity index 59%
rename from ebean-core/src/test/java/io/ebeaninternal/server/type/IsoJsonDateTimeParserTest.java
rename to ebean-core-type/src/test/java/io/ebean/core/type/IsoJsonDateTimeParserTest.java
index 75e600ee6..12740b552 100644
--- a/ebean-core/src/test/java/io/ebeaninternal/server/type/IsoJsonDateTimeParserTest.java
+++ b/ebean-core-type/src/test/java/io/ebean/core/type/IsoJsonDateTimeParserTest.java
@@ -1,5 +1,4 @@
-package io.ebeaninternal.server.type;
-
+package io.ebean.core.type;
import org.junit.jupiter.api.Test;
@@ -7,43 +6,43 @@ import java.time.Instant;
import static org.assertj.core.api.Assertions.assertThat;
-public class IsoJsonDateTimeParserTest {
+class IsoJsonDateTimeParserTest {
- private IsoJsonDateTimeParser parser = new IsoJsonDateTimeParser();
+ private ScalarTypeUtils parser = new ScalarTypeUtils();
@Test
- public void parseFormat_when_hasMillis() {
+ void parseFormat_when_hasMillis() {
parseAndFormat("2016-02-28T20:39:00.123Z", "2016-02-28T20:39:00.123Z");
}
@Test
- public void parseFormat_when_noMillis() {
+ void parseFormat_when_noMillis() {
parseAndFormat("2016-02-28T20:39:00Z", "2016-02-28T20:39:00.000Z");
}
@Test
- public void parseFormat_when_millis_1dp() {
+ void parseFormat_when_millis_1dp() {
parseAndFormat("2016-02-28T20:39:00.0Z", "2016-02-28T20:39:00.000Z");
}
@Test
- public void parseFormat_when_millis_2dp() {
+ void parseFormat_when_millis_2dp() {
parseAndFormat("2016-02-28T20:39:00.00Z", "2016-02-28T20:39:00.000Z");
}
@Test
- public void parseFormat_when_millis_3dp() {
+ void parseFormat_when_millis_3dp() {
parseAndFormat("2016-02-28T20:39:00.000Z", "2016-02-28T20:39:00.000Z");
}
@Test
- public void parseFormat_when_millis_3dp_2() {
+ void parseFormat_when_millis_3dp_2() {
parseAndFormat("2016-02-28T20:39:32.999000Z", "2016-02-28T20:39:32.999Z");
}
private void parseAndFormat(String input, String expected) {
- Instant timestamp = parser.parseIso(input);
- String format = parser.formatIso(timestamp);
+ Instant timestamp = parser.parseInstant(input);
+ String format = parser.formatInstant(timestamp);
assertThat(format).isEqualTo(expected);
}
}
diff --git a/ebean-core-type/src/test/java/io/ebean/core/type/ScalarTypeUtilsUuidBytesTest.java b/ebean-core-type/src/test/java/io/ebean/core/type/ScalarTypeUtilsUuidBytesTest.java
new file mode 100644
index 000000000..851aa9900
--- /dev/null
+++ b/ebean-core-type/src/test/java/io/ebean/core/type/ScalarTypeUtilsUuidBytesTest.java
@@ -0,0 +1,33 @@
+package io.ebean.core.type;
+
+import org.junit.jupiter.api.Test;
+
+import java.util.UUID;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+class ScalarTypeUtilsUuidBytesTest {
+
+ @Test
+ void testConversion() {
+ UUID id = UUID.randomUUID();
+
+ byte[] bytes = ScalarTypeUtils.uuidToBytes(id, false);
+ assertEquals(16, bytes.length);
+
+ UUID id2 = ScalarTypeUtils.uuidFromBytes(bytes, false);
+ assertEquals(id, id2);
+ }
+
+ @Test
+ void testConversionOptimized() {
+ UUID id = UUID.randomUUID();
+
+ byte[] bytes = ScalarTypeUtils.uuidToBytes(id, true);
+ assertEquals(16, bytes.length);
+
+ UUID id2 = ScalarTypeUtils.uuidFromBytes(bytes, true);
+ assertEquals(id, id2);
+ }
+
+}
diff --git a/ebean-core/pom.xml b/ebean-core/pom.xml
index e25218321..ac73b3c69 100644
--- a/ebean-core/pom.xml
+++ b/ebean-core/pom.xml
@@ -3,7 +3,7 @@
ebean-parent
io.ebean
- 13.7.1-SNAPSHOT
+ 13.10.1-SNAPSHOT
ebean-core
@@ -19,6 +19,11 @@
+
+ io.ebean
+ ebean-api
+ 13.10.1-SNAPSHOT
+
io.ebean
@@ -38,22 +43,16 @@
${ebean-migration-auto.version}
-
- io.ebean
- ebean-api
- 13.7.1-SNAPSHOT
-
-
io.ebean
ebean-core-type
- 13.7.1-SNAPSHOT
+ 13.10.1-SNAPSHOT
io.ebean
ebean-externalmapping-api
- 13.7.1-SNAPSHOT
+ 13.10.1-SNAPSHOT
@@ -106,7 +105,7 @@
joda-time
joda-time
- 2.9.7
+ 2.11.1
true
@@ -136,7 +135,7 @@
org.postgresql
postgresql
- 42.4.1
+ 42.5.0
true
@@ -144,21 +143,21 @@
io.ebean
ebean-platform-h2
- 13.7.1-SNAPSHOT
+ 13.10.1-SNAPSHOT
test
io.ebean
ebean-platform-postgres
- 13.7.1-SNAPSHOT
+ 13.10.1-SNAPSHOT
test
io.ebean
ebean-platform-sqlserver
- 13.7.1-SNAPSHOT
+ 13.10.1-SNAPSHOT
test
diff --git a/ebean-core/src/main/java/io/ebeaninternal/api/BindParams.java b/ebean-core/src/main/java/io/ebeaninternal/api/BindParams.java
index 1c6d43719..7fffd8c3b 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/api/BindParams.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/api/BindParams.java
@@ -228,10 +228,9 @@ public final class BindParams implements Serializable {
/**
* Set a named In parameter that is multi-valued.
*/
- public Param setArrayParameter(String name, Collection> value) {
+ public void setArrayParameter(String name, Collection> value) {
Param p = getParam(name);
p.setInValue(new MultiValueWrapper(value));
- return p;
}
/**
diff --git a/ebean-core/src/main/java/io/ebeaninternal/api/CQueryPlanKey.java b/ebean-core/src/main/java/io/ebeaninternal/api/CQueryPlanKey.java
index 2d3425573..f23aa4edb 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/api/CQueryPlanKey.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/api/CQueryPlanKey.java
@@ -9,7 +9,7 @@ public interface CQueryPlanKey {
* Used by read audit such that we can log read audit entries without the full sql
* (which would make the read audit logs verbose).
*/
- String getPartialKey();
+ String partialKey();
/**
* Return a query plan key taking into account persist cascading.
diff --git a/ebean-core/src/main/java/io/ebeaninternal/api/CoreLog.java b/ebean-core/src/main/java/io/ebeaninternal/api/CoreLog.java
index cfbf56283..85b491d15 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/api/CoreLog.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/api/CoreLog.java
@@ -1,13 +1,12 @@
package io.ebeaninternal.api;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import io.avaje.applog.AppLog;
/**
* Common loggers used in ebean-core.
*/
public final class CoreLog {
- public static final Logger log = LoggerFactory.getLogger("io.ebean.core");
- public static final Logger internal = LoggerFactory.getLogger("io.ebean.internal");
+ public static final System.Logger log = AppLog.getLogger("io.ebean.core");
+ public static final System.Logger internal = AppLog.getLogger("io.ebean.internal");
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/api/LoadManyRequest.java b/ebean-core/src/main/java/io/ebeaninternal/api/LoadManyRequest.java
index dcbc3c32b..41cd37de9 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/api/LoadManyRequest.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/api/LoadManyRequest.java
@@ -7,17 +7,18 @@ import io.ebeaninternal.server.core.BindPadding;
import io.ebeaninternal.server.core.OrmQueryRequest;
import io.ebeaninternal.server.deploy.BeanDescriptor;
import io.ebeaninternal.server.deploy.BeanPropertyAssocMany;
-import org.slf4j.Logger;
import java.util.ArrayList;
import java.util.List;
+import static java.lang.System.Logger.Level.DEBUG;
+
/**
* Request for loading Associated Many Beans.
*/
public final class LoadManyRequest extends LoadRequest {
- private static final Logger log = CoreLog.log;
+ private static final System.Logger log = CoreLog.log;
private final List> batch;
private final LoadManyBuffer loadContext;
@@ -113,10 +114,10 @@ public final class LoadManyRequest extends LoadRequest {
// in the +query or +lazy load due to no rows (predicates)
for (BeanCollection> bc : batch) {
if (bc.checkEmptyLazyLoad()) {
- if (log.isDebugEnabled()) {
+ if (log.isLoggable(DEBUG)) {
EntityBean ownerBean = bc.getOwnerBean();
Object parentId = desc.getId(ownerBean);
- log.debug("BeanCollection after lazy load was empty. type:" + ownerBean.getClass().getName() + " id:" + parentId + " owner:" + ownerBean);
+ log.log(DEBUG, "BeanCollection after lazy load was empty. type:{0} id:{1} owner:{2}", ownerBean.getClass().getName(), parentId, ownerBean);
}
} else if (loadCache && many.isUseCache()) {
desc.cacheManyPropPut(many, bc, desc.getId(bc.getOwnerBean()));
diff --git a/ebean-core/src/main/java/io/ebeaninternal/api/ManyWhereJoins.java b/ebean-core/src/main/java/io/ebeaninternal/api/ManyWhereJoins.java
index 2278d5d11..463f1705e 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/api/ManyWhereJoins.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/api/ManyWhereJoins.java
@@ -50,7 +50,6 @@ public final class ManyWhereJoins implements Serializable {
* Add a many where join.
*/
public void add(ElPropertyDeploy elProp) {
-
String join = elProp.elPrefix();
BeanProperty p = elProp.beanProperty();
if (p instanceof BeanPropertyAssocMany>) {
@@ -111,7 +110,6 @@ public final class ManyWhereJoins implements Serializable {
* Return the set of property names for the many where joins.
*/
public TreeSet getPropertyNames() {
-
TreeSet propertyNames = new TreeSet<>();
for (PropertyJoin join : joins.values()) {
propertyNames.add(join.getProperty());
diff --git a/ebean-core/src/main/java/io/ebeaninternal/api/NaturalKeyQueryData.java b/ebean-core/src/main/java/io/ebeaninternal/api/NaturalKeyQueryData.java
index a8b4d348d..e83bed445 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/api/NaturalKeyQueryData.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/api/NaturalKeyQueryData.java
@@ -142,7 +142,9 @@ public final class NaturalKeyQueryData {
*/
private boolean matchProperties() {
if (naturalKey.isSingleProperty()) {
- naturalKey.matchSingleProperty((inProperty != null) ? inProperty : eqList.get(0).property);
+ if (naturalKey.matchSingleProperty((inProperty != null) ? inProperty : eqList.get(0).property)) {
+ return true;
+ }
}
// multiple properties case
diff --git a/ebean-core/src/main/java/io/ebeaninternal/api/NoopQueryBindCapture.java b/ebean-core/src/main/java/io/ebeaninternal/api/NoopQueryBindCapture.java
index 33ee06b54..f8b1dd65a 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/api/NoopQueryBindCapture.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/api/NoopQueryBindCapture.java
@@ -1,6 +1,6 @@
package io.ebeaninternal.api;
-import io.ebeaninternal.server.type.bindcapture.BindCapture;
+import io.ebeaninternal.server.bind.capture.BindCapture;
final class NoopQueryBindCapture implements SpiQueryBindCapture {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/api/ScopeTrans.java b/ebean-core/src/main/java/io/ebeaninternal/api/ScopeTrans.java
index f3ca6555f..b35ad5ed2 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/api/ScopeTrans.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/api/ScopeTrans.java
@@ -45,15 +45,14 @@ public final class ScopeTrans {
* Flag set when nested commit has occurred.
*/
private boolean nestedCommit;
+ private boolean nestedUseSavepoint;
public ScopeTrans(boolean rollbackOnChecked, boolean created, SpiTransaction transaction, TxScope txScope) {
-
this.rollbackOnChecked = rollbackOnChecked;
this.created = created;
this.transaction = transaction;
this.noRollbackFor = txScope.getNoRollbackFor();
this.rollbackFor = txScope.getRollbackFor();
-
if (transaction != null) {
if (!created && txScope.isBatchSet() || txScope.isBatchOnCascadeSet() || txScope.isBatchSizeSet()) {
restoreBatch = transaction.isBatchMode();
@@ -87,13 +86,21 @@ public final class ScopeTrans {
@Override
public String toString() {
- return "ScopeTrans[" + transaction + "]";
+ return "ScopeTrans " + transaction;
+ }
+
+ void setNestedUseSavepoint() {
+ nestedUseSavepoint = true;
+ }
+
+ boolean isNestedUseSavepoint() {
+ return nestedUseSavepoint;
}
/**
* Return the current/active transaction.
*/
- protected SpiTransaction getTransaction() {
+ SpiTransaction getTransaction() {
return transaction;
}
@@ -101,7 +108,6 @@ public final class ScopeTrans {
* Complete the transaction from enhanced transactional. Try to commit.
*/
void complete(Object returnOrThrowable, int opCode) {
-
if (opCode == OPCODE_ATHROW) {
// exited with a Throwable
caughtThrowable((Throwable) returnOrThrowable);
@@ -124,7 +130,7 @@ public final class ScopeTrans {
}
}
- protected void commitTransaction() {
+ void commitTransaction() {
if (created) {
transaction.commit();
} else {
@@ -168,14 +174,13 @@ public final class ScopeTrans {
* Returns the exception and this should be thrown by the calling code.
*/
public T caughtThrowable(T e) {
-
if (isRollbackThrowable(e)) {
rollback(e);
}
return e;
}
- protected void rollback(Throwable e) {
+ void rollback(Throwable e) {
if (transaction != null && transaction.isActive()) {
// transaction is null for NOT_SUPPORTED and sometimes SUPPORTS
// and Inactive (already rolled back) if nested REQUIRED
@@ -188,21 +193,17 @@ public final class ScopeTrans {
* Return true if this throwable should cause a rollback to occur.
*/
private boolean isRollbackThrowable(Throwable e) {
-
if (e instanceof Error) {
return true;
}
-
if (noRollbackFor != null) {
for (Class extends Throwable> aNoRollbackFor : noRollbackFor) {
if (aNoRollbackFor.equals(e.getClass())) {
-
// explicit no rollback for this one
return false;
}
}
}
-
if (rollbackFor != null) {
for (Class extends Throwable> aRollbackFor : rollbackFor) {
if (aRollbackFor.equals(e.getClass())) {
@@ -211,7 +212,6 @@ public final class ScopeTrans {
}
}
}
-
// checked exceptions...
// EJB defaults this to false which is not intuitive IMO
// Ebean makes this configurable (default to true)
diff --git a/ebean-core/src/main/java/io/ebeaninternal/api/ScopedTransaction.java b/ebean-core/src/main/java/io/ebeaninternal/api/ScopedTransaction.java
index 383746f13..c078fa55c 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/api/ScopedTransaction.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/api/ScopedTransaction.java
@@ -7,7 +7,7 @@ import javax.persistence.PersistenceException;
/**
* Manage scoped (typically thread local) transactions.
- *
+ *
* These can be nested and internally they are pushed and popped from a stack.
*/
public final class ScopedTransaction extends SpiTransactionProxy {
@@ -30,16 +30,29 @@ public final class ScopedTransaction extends SpiTransactionProxy {
@Override
public String toString() {
- return "ScopedTransaction[" + current + "]";
+ return "ScopedTransaction " + current;
+ }
+
+ @Override
+ public void setNestedUseSavepoint() {
+ current.setNestedUseSavepoint();
+ }
+
+ @Override
+ public boolean isNestedUseSavepoint() {
+ return current.isNestedUseSavepoint();
}
/**
* Push the scope transaction.
*/
public void push(ScopeTrans scopeTrans) {
-
if (current != null) {
stack.push(current);
+ if (current.isNestedUseSavepoint()) {
+ // child scope 'inherits' nestedUseSavepoint
+ scopeTrans.setNestedUseSavepoint();
+ }
}
current = scopeTrans;
transaction = scopeTrans.getTransaction();
@@ -111,6 +124,11 @@ public final class ScopedTransaction extends SpiTransactionProxy {
}
}
+ @Override
+ public void rollbackAndContinue() {
+ transaction.rollbackAndContinue();
+ }
+
@Override
public void rollback() throws PersistenceException {
try {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/api/SpiExpression.java b/ebean-core/src/main/java/io/ebeaninternal/api/SpiExpression.java
index 8fe986259..030042d96 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/api/SpiExpression.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/api/SpiExpression.java
@@ -13,8 +13,8 @@ import java.io.IOException;
*/
public interface SpiExpression extends Expression {
- static final String SQL_TRUE = "1=1";
- static final String SQL_FALSE = "1=0";
+ String SQL_TRUE = "1=1";
+ String SQL_FALSE = "1=0";
/**
* Simplify nested expressions if possible.
@@ -110,4 +110,11 @@ public interface SpiExpression extends Expression {
* Apply property prefix when filterMany expressions included into main query.
*/
void prefixProperty(String path);
+
+ /**
+ * Return a copy of the expression (as part of creating a query copy).
+ */
+ default SpiExpression copy() {
+ return this;
+ }
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/api/SpiQuery.java b/ebean-core/src/main/java/io/ebeaninternal/api/SpiQuery.java
index c8a008351..76e7cad99 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/api/SpiQuery.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/api/SpiQuery.java
@@ -314,7 +314,7 @@ public interface SpiQuery extends Query, SpiQueryFetch, TxnProfileEventCod
* Return true if select all properties was used to ensure the property
* invoking a lazy load was included in the query.
*/
- boolean selectAllForLazyLoadProperty();
+ void selectAllForLazyLoadProperty();
/**
* Set the select properties.
diff --git a/ebean-core/src/main/java/io/ebeaninternal/api/SpiQueryBindCapture.java b/ebean-core/src/main/java/io/ebeaninternal/api/SpiQueryBindCapture.java
index db5cbd9b6..3f3a5b768 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/api/SpiQueryBindCapture.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/api/SpiQueryBindCapture.java
@@ -1,6 +1,6 @@
package io.ebeaninternal.api;
-import io.ebeaninternal.server.type.bindcapture.BindCapture;
+import io.ebeaninternal.server.bind.capture.BindCapture;
/**
* Capture query bind values and with those actual database query plans.
diff --git a/ebean-core/src/main/java/io/ebeaninternal/api/SpiQueryPlan.java b/ebean-core/src/main/java/io/ebeaninternal/api/SpiQueryPlan.java
index 0b4c3ea0a..137cf60ff 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/api/SpiQueryPlan.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/api/SpiQueryPlan.java
@@ -10,27 +10,27 @@ public interface SpiQueryPlan {
/**
* The related entity bean type
*/
- Class> getBeanType();
+ Class> beanType();
/**
* The plan name.
*/
- String getName();
+ String name();
/**
* The hash of the sql.
*/
- String getHash();
+ String hash();
/**
* The SQL for the query plan.
*/
- String getSql();
+ String sql();
/**
* The related profile location.
*/
- ProfileLocation getProfileLocation();
+ ProfileLocation profileLocation();
/**
* Initiate bind capture with the give threshold.
diff --git a/ebean-core/src/main/java/io/ebeaninternal/api/TransactionEvent.java b/ebean-core/src/main/java/io/ebeaninternal/api/TransactionEvent.java
index c2c6194cd..2c06dbb81 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/api/TransactionEvent.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/api/TransactionEvent.java
@@ -139,7 +139,7 @@ public final class TransactionEvent implements Serializable {
/**
* Return the CacheChangeSet that we add cache notification messages to.
- *
+ *
* We want to add to this change set as we process requests allowing the
* PersistRequestBean to be garbage collected for large transactions.
*/
diff --git a/ebean-core/src/main/java/io/ebeaninternal/api/TxnProfileEventCodes.java b/ebean-core/src/main/java/io/ebeaninternal/api/TxnProfileEventCodes.java
index 8c492d77b..f2339cbc9 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/api/TxnProfileEventCodes.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/api/TxnProfileEventCodes.java
@@ -2,7 +2,7 @@ package io.ebeaninternal.api;
/**
* Event codes used in transaction profiling.
- *
+ *
* These appear in verbose transaction profile logs.
*/
public interface TxnProfileEventCodes {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/api/json/SpiJsonReader.java b/ebean-core/src/main/java/io/ebeaninternal/api/json/SpiJsonReader.java
index 8082e049a..1aaaf12fe 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/api/json/SpiJsonReader.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/api/json/SpiJsonReader.java
@@ -12,7 +12,7 @@ import java.util.Map;
public interface SpiJsonReader {
- PersistenceContext getPersistenceContext();
+ PersistenceContext persistenceContext();
SpiJsonReader forJson(JsonParser moreJson);
@@ -20,9 +20,9 @@ public interface SpiJsonReader {
Object persistenceContextPutIfAbsent(Object id, EntityBean bean, BeanDescriptor> beanDesc);
- ObjectMapper getObjectMapper();
+ ObjectMapper mapper();
- JsonParser getParser();
+ JsonParser parser();
JsonToken nextToken() throws IOException;
@@ -34,5 +34,5 @@ public interface SpiJsonReader {
Object readValueUsingObjectMapper(Class> propertyType) throws IOException;
- boolean isIntercept();
+ boolean intercept();
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/api/json/SpiJsonWriter.java b/ebean-core/src/main/java/io/ebeaninternal/api/json/SpiJsonWriter.java
index 4d80bc4f7..f6069b82c 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/api/json/SpiJsonWriter.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/api/json/SpiJsonWriter.java
@@ -20,7 +20,7 @@ public interface SpiJsonWriter extends JsonWriter {
/**
* Return true if the value is a parent bean.
*/
- boolean isParentBean(Object value);
+ boolean parentBean(Object value);
/**
* Start an assoc one path.
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/DataBind.java b/ebean-core/src/main/java/io/ebeaninternal/server/bind/DataBind.java
similarity index 92%
rename from ebean-core/src/main/java/io/ebeaninternal/server/type/DataBind.java
rename to ebean-core/src/main/java/io/ebeaninternal/server/bind/DataBind.java
index ab17244e4..8ca702c29 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/type/DataBind.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/bind/DataBind.java
@@ -1,25 +1,18 @@
-package io.ebeaninternal.server.type;
+package io.ebeaninternal.server.bind;
import io.ebean.core.type.DataBinder;
import io.ebeaninternal.api.CoreLog;
import io.ebeaninternal.server.core.timezone.DataTimeZone;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.Reader;
-import java.io.StringReader;
+import java.io.*;
import java.math.BigDecimal;
-import java.sql.Array;
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-import java.sql.Time;
-import java.sql.Timestamp;
+import java.sql.*;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
+import static java.lang.System.Logger.Level.WARNING;
+
public class DataBind implements DataBinder {
private final DataTimeZone dataTimeZone;
@@ -109,7 +102,7 @@ public class DataBind implements DataBinder {
try {
inputStream.close();
} catch (IOException e) {
- CoreLog.log.warn("Error closing InputStream that was bound to PreparedStatement", e);
+ CoreLog.log.log(WARNING, "Error closing InputStream that was bound to PreparedStatement", e);
}
}
inputStreams = null;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/DataBindCapture.java b/ebean-core/src/main/java/io/ebeaninternal/server/bind/DataBindCapture.java
similarity index 84%
rename from ebean-core/src/main/java/io/ebeaninternal/server/type/DataBindCapture.java
rename to ebean-core/src/main/java/io/ebeaninternal/server/bind/DataBindCapture.java
index 659d0ef06..78924bafe 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/type/DataBindCapture.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/bind/DataBindCapture.java
@@ -1,8 +1,8 @@
-package io.ebeaninternal.server.type;
+package io.ebeaninternal.server.bind;
import io.ebeaninternal.server.core.timezone.DataTimeZone;
-import io.ebeaninternal.server.type.bindcapture.BindCapture;
-import io.ebeaninternal.server.type.bindcapture.BindCaptureStatement;
+import io.ebeaninternal.server.bind.capture.BindCapture;
+import io.ebeaninternal.server.bind.capture.BindCaptureStatement;
/**
* Special DataBind used to capture bind values for obtaining explain plans.
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/bindcapture/BindCapture.java b/ebean-core/src/main/java/io/ebeaninternal/server/bind/capture/BindCapture.java
similarity index 93%
rename from ebean-core/src/main/java/io/ebeaninternal/server/type/bindcapture/BindCapture.java
rename to ebean-core/src/main/java/io/ebeaninternal/server/bind/capture/BindCapture.java
index 3e75d68a3..c51fb9e97 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/type/bindcapture/BindCapture.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/bind/capture/BindCapture.java
@@ -1,4 +1,4 @@
-package io.ebeaninternal.server.type.bindcapture;
+package io.ebeaninternal.server.bind.capture;
import java.sql.Connection;
import java.sql.PreparedStatement;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/bindcapture/BindCaptureEntry.java b/ebean-core/src/main/java/io/ebeaninternal/server/bind/capture/BindCaptureEntry.java
similarity index 81%
rename from ebean-core/src/main/java/io/ebeaninternal/server/type/bindcapture/BindCaptureEntry.java
rename to ebean-core/src/main/java/io/ebeaninternal/server/bind/capture/BindCaptureEntry.java
index 3bb7d3f95..b1f4ef6ae 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/type/bindcapture/BindCaptureEntry.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/bind/capture/BindCaptureEntry.java
@@ -1,4 +1,4 @@
-package io.ebeaninternal.server.type.bindcapture;
+package io.ebeaninternal.server.bind.capture;
import java.sql.Connection;
import java.sql.PreparedStatement;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/bindcapture/BindCaptureStatement.java b/ebean-core/src/main/java/io/ebeaninternal/server/bind/capture/BindCaptureStatement.java
similarity index 98%
rename from ebean-core/src/main/java/io/ebeaninternal/server/type/bindcapture/BindCaptureStatement.java
rename to ebean-core/src/main/java/io/ebeaninternal/server/bind/capture/BindCaptureStatement.java
index 916c1c355..04ad70753 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/type/bindcapture/BindCaptureStatement.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/bind/capture/BindCaptureStatement.java
@@ -1,4 +1,4 @@
-package io.ebeaninternal.server.type.bindcapture;
+package io.ebeaninternal.server.bind.capture;
import java.io.InputStream;
import java.io.Reader;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/bindcapture/BindCaptureStatementBase.java b/ebean-core/src/main/java/io/ebeaninternal/server/bind/capture/BindCaptureStatementBase.java
similarity index 99%
rename from ebean-core/src/main/java/io/ebeaninternal/server/type/bindcapture/BindCaptureStatementBase.java
rename to ebean-core/src/main/java/io/ebeaninternal/server/bind/capture/BindCaptureStatementBase.java
index ba4e01524..6e547dcaf 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/type/bindcapture/BindCaptureStatementBase.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/bind/capture/BindCaptureStatementBase.java
@@ -1,4 +1,4 @@
-package io.ebeaninternal.server.type.bindcapture;
+package io.ebeaninternal.server.bind.capture;
import java.io.InputStream;
import java.io.Reader;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/bindcapture/BindCaptureTypes.java b/ebean-core/src/main/java/io/ebeaninternal/server/bind/capture/BindCaptureTypes.java
similarity index 99%
rename from ebean-core/src/main/java/io/ebeaninternal/server/type/bindcapture/BindCaptureTypes.java
rename to ebean-core/src/main/java/io/ebeaninternal/server/bind/capture/BindCaptureTypes.java
index b2e36f828..c8cf8496b 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/type/bindcapture/BindCaptureTypes.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/bind/capture/BindCaptureTypes.java
@@ -1,4 +1,4 @@
-package io.ebeaninternal.server.type.bindcapture;
+package io.ebeaninternal.server.bind.capture;
import java.io.ByteArrayInputStream;
import java.io.StringReader;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultCacheHolder.java b/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultCacheHolder.java
index ad3faa749..aff1929b6 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultCacheHolder.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultCacheHolder.java
@@ -1,5 +1,6 @@
package io.ebeaninternal.server.cache;
+import io.avaje.applog.AppLog;
import io.ebean.annotation.Cache;
import io.ebean.annotation.CacheBeanTuning;
import io.ebean.annotation.CacheQueryTuning;
@@ -7,20 +8,21 @@ import io.ebean.cache.*;
import io.ebean.config.CurrentTenantProvider;
import io.ebean.meta.MetricVisitor;
import io.ebean.util.AnnotationUtil;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentSkipListSet;
import java.util.concurrent.locks.ReentrantLock;
+import static java.lang.System.Logger.Level.DEBUG;
+import static java.lang.System.Logger.Level.TRACE;
+
/**
* Manages the construction of caches.
*/
final class DefaultCacheHolder {
- private static final Logger log = LoggerFactory.getLogger("io.ebean.cache.ALL");
+ private static final System.Logger log = AppLog.getLogger("io.ebean.cache.ALL");
private final ReentrantLock lock = new ReentrantLock();
private final ConcurrentHashMap allCaches = new ConcurrentHashMap<>();
@@ -89,7 +91,7 @@ final class DefaultCacheHolder {
}
void clearAll() {
- log.debug("clearAll");
+ log.log(DEBUG, "clearAll");
for (ServerCache serverCache : allCaches.values()) {
serverCache.clear();
}
@@ -97,7 +99,7 @@ final class DefaultCacheHolder {
public void clear(String name) {
- log.debug("clear {}", name);
+ log.log(DEBUG, "clear {0}", name);
clearIfExists(key(name, ServerCacheType.QUERY));
clearIfExists(key(name, ServerCacheType.BEAN));
clearIfExists(key(name, ServerCacheType.NATURAL_KEY));
@@ -112,7 +114,7 @@ final class DefaultCacheHolder {
private void clearIfExists(String fullKey) {
ServerCache cache = allCaches.get(fullKey);
if (cache != null) {
- log.trace("clear cache {}", fullKey);
+ log.log(TRACE, "clear cache {0}", fullKey);
cache.clear();
}
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCache.java b/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCache.java
index f3b49fd2e..e68c9a308 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCache.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCache.java
@@ -1,13 +1,12 @@
package io.ebeaninternal.server.cache;
+import io.avaje.applog.AppLog;
import io.ebean.BackgroundExecutor;
import io.ebean.cache.ServerCache;
import io.ebean.cache.ServerCacheStatistics;
import io.ebean.meta.MetricVisitor;
import io.ebean.metric.CountMetric;
import io.ebean.metric.MetricFactory;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import java.io.Serializable;
import java.lang.ref.SoftReference;
@@ -16,6 +15,9 @@ import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.locks.ReentrantLock;
+import static java.lang.System.Logger.Level.TRACE;
+import static java.lang.System.Logger.Level.WARNING;
+
/**
* The default cache implementation.
*
@@ -25,7 +27,7 @@ import java.util.concurrent.locks.ReentrantLock;
*/
public class DefaultServerCache implements ServerCache {
- protected static final Logger logger = LoggerFactory.getLogger(DefaultServerCache.class);
+ protected static final System.Logger logger = AppLog.getLogger(DefaultServerCache.class);
/**
* Compare by last access time (for LRU eviction).
@@ -287,13 +289,13 @@ public class DefaultServerCache implements ServerCache {
evictCount.add(trimmedByGC);
evictCount.add(trimmedByTTL);
evictCount.add(trimmedByLRU);
- if (logger.isTraceEnabled()) {
+ if (logger.isLoggable(TRACE)) {
long exeMicros = TimeUnit.MICROSECONDS.convert(System.nanoTime() - startNanos, TimeUnit.NANOSECONDS);
- logger.trace("Executed trim of cache {} in [{}]millis idle[{}] timeToLive[{}] accessTime[{}] gc[{}]",
+ logger.log(TRACE, "Executed trim of cache {0} in [{1}]millis idle[{2}] timeToLive[{3}] accessTime[{4}] gc[{5}]",
name, exeMicros, trimmedByIdle, trimmedByTTL, trimmedByLRU, trimmedByGC);
}
} catch (Throwable e) {
- logger.warn("Error during trim of DefaultServerCache [" + name + "]. Cache might be bigger than desired.", e);
+ logger.log(WARNING, "Error during trim of DefaultServerCache [" + name + "]. Cache might be bigger than desired.", e);
}
} finally {
lock.unlock();
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCacheManager.java b/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCacheManager.java
index 00f551da8..0b7264ff9 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCacheManager.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCacheManager.java
@@ -1,5 +1,6 @@
package io.ebeaninternal.server.cache;
+import io.avaje.applog.AppLog;
import io.ebean.cache.ServerCache;
import io.ebean.cache.ServerCacheRegion;
import io.ebean.cache.ServerCacheType;
@@ -7,17 +8,18 @@ import io.ebean.meta.MetricVisitor;
import io.ebeaninternal.api.SpiCacheRegion;
import io.ebeaninternal.server.cluster.ClusterManager;
import io.ebeaninternal.server.deploy.DCacheRegion;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import java.util.*;
+import static java.lang.System.Logger.Level.DEBUG;
+import static java.lang.System.Logger.Level.INFO;
+
/**
* Manages the bean and query caches.
*/
public final class DefaultServerCacheManager implements SpiCacheManager {
- private static final Logger log = LoggerFactory.getLogger("io.ebean.cache.REGION");
+ private static final System.Logger log = AppLog.getLogger("io.ebean.cache.REGION");
private final Map regionMap = new HashMap<>();
private final ClusterManager clusterManager;
@@ -65,23 +67,23 @@ public final class DefaultServerCacheManager implements SpiCacheManager {
enabled.add(region.name());
if (!region.isEnabled()) {
region.setEnabled(true);
- log.debug("Cache region[{}] enabled", region.name());
+ log.log(DEBUG, "Cache region[{0}] enabled", region.name());
}
} else {
disabled.add(region.name());
if (region.isEnabled()) {
region.setEnabled(false);
- log.debug("Cache region[{}] disabled", region.name());
+ log.log(DEBUG, "Cache region[{0}] disabled", region.name());
}
}
}
- log.info("Cache regions enabled:{} disabled:{}", enabled, disabled);
+ log.log(INFO, "Cache regions enabled:{0} disabled:{1}", enabled, disabled);
}
}
@Override
public void setAllRegionsEnabled(boolean enabled) {
- log.debug("All cache regions enabled[{}]", enabled);
+ log.log(DEBUG, "All cache regions enabled[{0}]", enabled);
for (SpiCacheRegion region : regionMap.values()) {
region.setEnabled(enabled);
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/cache/RemoteCacheEvent.java b/ebean-core/src/main/java/io/ebeaninternal/server/cache/RemoteCacheEvent.java
index 21f04704d..25a478bc2 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/cache/RemoteCacheEvent.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/cache/RemoteCacheEvent.java
@@ -52,7 +52,7 @@ public final class RemoteCacheEvent implements BinaryWritable {
@Override
public String toString() {
- return "CacheEvent[ clearAll:" + clearAll + " caches:" + clearCaches + "]";
+ return "CacheEvent clearAll:" + clearAll + " caches:" + clearCaches;
}
public static RemoteCacheEvent readBinaryMessage(BinaryReadContext dataInput) throws IOException {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/changelog/DefaultChangeLogListener.java b/ebean-core/src/main/java/io/ebeaninternal/server/changelog/DefaultChangeLogListener.java
index 597d87df0..7ababb99f 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/changelog/DefaultChangeLogListener.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/changelog/DefaultChangeLogListener.java
@@ -1,5 +1,6 @@
package io.ebeaninternal.server.changelog;
+import io.avaje.applog.AppLog;
import io.ebean.event.changelog.BeanChange;
import io.ebean.event.changelog.ChangeLogListener;
import io.ebean.event.changelog.ChangeSet;
@@ -7,12 +8,13 @@ import io.ebean.event.changelog.ChangeType;
import io.ebean.plugin.Plugin;
import io.ebean.plugin.SpiServer;
import io.ebeaninternal.api.CoreLog;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import java.io.StringWriter;
import java.util.Properties;
+import static java.lang.System.Logger.Level.ERROR;
+import static java.lang.System.Logger.Level.INFO;
+
/**
* Simply logs the change sets in JSON form to logger named io.ebean.ChangeLog.
*/
@@ -21,7 +23,7 @@ public final class DefaultChangeLogListener implements ChangeLogListener, Plugin
/**
* The named logger we send the change set payload to. Can be externally configured as desired.
*/
- private static final Logger changeLog = LoggerFactory.getLogger("io.ebean.ChangeLog");
+ private static final System.Logger changeLog = AppLog.getLogger("io.ebean.ChangeLog");
/**
* Used to build the JSON.
@@ -65,9 +67,9 @@ public final class DefaultChangeLogListener implements ChangeLogListener, Plugin
try {
StringWriter writer = new StringWriter(getBufferSize(beanChange));
jsonBuilder.writeBeanJson(writer, beanChange, changeSet);
- changeLog.info(writer.toString());
+ changeLog.log(INFO, writer.toString());
} catch (Exception e) {
- CoreLog.log.error("Exception logging beanChange " + beanChange, e);
+ CoreLog.log.log(ERROR, "Exception logging beanChange " + beanChange, e);
}
}
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/cluster/BinaryTransactionEventReader.java b/ebean-core/src/main/java/io/ebeaninternal/server/cluster/BinaryTransactionEventReader.java
index aebf45ea4..4c3138a45 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/cluster/BinaryTransactionEventReader.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/cluster/BinaryTransactionEventReader.java
@@ -32,7 +32,7 @@ public class BinaryTransactionEventReader {
String serverName = dataInput.readUTF();
SpiEbeanServer server = (SpiEbeanServer) serverLookup.getServer(serverName);
if (server == null) {
- throw new IllegalStateException("EbeanServer not found for name [" + serverName + "]");
+ throw new IllegalStateException("Database not found for name " + serverName);
}
RemoteTransactionEvent event = new RemoteTransactionEvent(server);
event.readBinary(dataInput);
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/cluster/ClusterManager.java b/ebean-core/src/main/java/io/ebeaninternal/server/cluster/ClusterManager.java
index b273c031a..e370534d9 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/cluster/ClusterManager.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/cluster/ClusterManager.java
@@ -1,22 +1,23 @@
package io.ebeaninternal.server.cluster;
+import io.avaje.applog.AppLog;
import io.ebean.Database;
import io.ebean.config.ContainerConfig;
import io.ebeaninternal.server.transaction.RemoteTransactionEvent;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import java.util.Iterator;
import java.util.ServiceLoader;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.locks.ReentrantLock;
+import static java.lang.System.Logger.Level.DEBUG;
+
/**
* Manages the cluster service.
*/
public class ClusterManager implements ServerLookup {
- private static final Logger clusterLogger = LoggerFactory.getLogger("io.ebean.Cluster");
+ private static final System.Logger clusterLogger = AppLog.getLogger("io.ebean.Cluster");
private final ReentrantLock lock = new ReentrantLock();
@@ -112,8 +113,8 @@ public class ClusterManager implements ServerLookup {
*/
public void broadcast(RemoteTransactionEvent event) {
if (broadcast != null) {
- if (clusterLogger.isDebugEnabled()) {
- clusterLogger.debug("sending: {}", event);
+ if (clusterLogger.isLoggable(DEBUG)) {
+ clusterLogger.log(DEBUG, "sending: {0}", event);
}
broadcast.broadcast(event);
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/AbstractSqlQueryRequest.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/AbstractSqlQueryRequest.java
index 01812fe5f..2424dd2b3 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/AbstractSqlQueryRequest.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/AbstractSqlQueryRequest.java
@@ -119,7 +119,7 @@ public abstract class AbstractSqlQueryRequest implements CancelableQuery {
int firstRow = query.getFirstRow();
int maxRows = query.getMaxRows();
if (firstRow > 0 || maxRows > 0) {
- return server.databasePlatform().getBasicSqlLimiter().limit(sql, firstRow, maxRows);
+ return server.databasePlatform().basicSqlLimiter().limit(sql, firstRow, maxRows);
}
return sql;
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/BeanRequest.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/BeanRequest.java
index 45fe5ff14..b8224bc23 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/BeanRequest.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/BeanRequest.java
@@ -6,6 +6,8 @@ import io.ebeaninternal.api.SpiEbeanServer;
import io.ebeaninternal.api.SpiTransaction;
import io.ebeaninternal.server.core.timezone.DataTimeZone;
+import static java.lang.System.Logger.Level.ERROR;
+
/**
* Base class for find and persist requests.
*/
@@ -61,7 +63,7 @@ public abstract class BeanRequest {
// Just log this and carry on. A previous exception has been
// thrown and if this rollback throws exception it likely means
// that the connection is broken (and the dataSource and db will cleanup)
- CoreLog.log.error("Error trying to rollback a transaction (after a prior exception thrown)", e);
+ CoreLog.log.log(ERROR, "Error trying to rollback a transaction (after a prior exception thrown)", e);
}
}
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DatabasePlatformFactory.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DatabasePlatformFactory.java
index 407ebcaf8..8fa1093be 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DatabasePlatformFactory.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DatabasePlatformFactory.java
@@ -15,6 +15,9 @@ import java.util.ArrayList;
import java.util.List;
import java.util.ServiceLoader;
+import static java.lang.System.Logger.Level.DEBUG;
+import static java.lang.System.Logger.Level.INFO;
+
/**
* Create a DatabasePlatform from the configuration.
*
@@ -38,7 +41,7 @@ public class DatabasePlatformFactory {
try {
String offlinePlatform = DbOffline.getPlatform();
if (offlinePlatform != null) {
- CoreLog.log.info("offline platform [{}]", offlinePlatform);
+ CoreLog.log.log(INFO, "offline platform [{0}]", offlinePlatform);
return byDatabaseName(offlinePlatform);
}
if (config.getDatabasePlatformName() != null) {
@@ -87,7 +90,7 @@ public class DatabasePlatformFactory {
String dbProductName = metaData.getDatabaseProductName().toLowerCase();
final int majorVersion = metaData.getDatabaseMajorVersion();
final int minorVersion = metaData.getDatabaseMinorVersion();
- CoreLog.log.debug("platform for productName[{}] version[{}.{}]", dbProductName, majorVersion, minorVersion);
+ CoreLog.log.log(DEBUG, "platform for productName[{0}] version[{1}.{2}]", dbProductName, majorVersion, minorVersion);
for (DatabasePlatformProvider provider : providers) {
if (provider.matchByProductName(dbProductName)) {
return provider.create(majorVersion, minorVersion, metaData, connection);
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultBeanLoader.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultBeanLoader.java
index 5bdf93a34..38a0ebe4d 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultBeanLoader.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultBeanLoader.java
@@ -12,18 +12,19 @@ import io.ebeaninternal.server.deploy.BeanDescriptor;
import io.ebeaninternal.server.deploy.BeanDescriptor.EntityType;
import io.ebeaninternal.server.deploy.BeanPropertyAssocMany;
import io.ebeaninternal.server.transaction.DefaultPersistenceContext;
-import org.slf4j.Logger;
import javax.persistence.EntityNotFoundException;
import java.util.List;
import java.util.Set;
+import static java.lang.System.Logger.Level.DEBUG;
+
/**
* Helper to handle lazy loading and refreshing of beans.
*/
final class DefaultBeanLoader {
- private static final Logger log = CoreLog.internal;
+ private static final System.Logger log = CoreLog.internal;
private final DefaultServer server;
private final boolean onIterateUseExtraTxn;
@@ -108,8 +109,8 @@ final class DefaultBeanLoader {
server.findOne(query, null);
if (beanCollection != null) {
if (beanCollection.checkEmptyLazyLoad()) {
- if (log.isDebugEnabled()) {
- log.debug("BeanCollection after load was empty. Owner:" + beanCollection.getOwnerBean());
+ if (log.isLoggable(DEBUG)) {
+ log.log(DEBUG, "BeanCollection after load was empty. Owner:{0}", beanCollection.getOwnerBean());
}
} else if (useManyIdCache) {
parentDesc.cacheManyPropPut(many, beanCollection, parentId);
@@ -228,7 +229,7 @@ final class DefaultBeanLoader {
Object dbBean = query.findOne();
if (dbBean == null) {
- throw new EntityNotFoundException("Bean not found during lazy load or refresh." + " id[" + id + "] type[" + desc.type() + "]");
+ throw new EntityNotFoundException("Bean not found during lazy load or refresh. Id:" + id + " type:" + desc.type());
}
desc.resetManyProperties(dbBean);
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultContainer.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultContainer.java
index 5b8499661..f15ab82ff 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultContainer.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultContainer.java
@@ -1,7 +1,6 @@
package io.ebeaninternal.server.core;
import io.ebean.config.*;
-import io.ebean.config.EntityClassRegister;
import io.ebean.config.dbplatform.DatabasePlatform;
import io.ebean.event.ShutdownManager;
import io.ebean.service.SpiContainer;
@@ -13,7 +12,6 @@ import io.ebeaninternal.server.cluster.ClusterManager;
import io.ebeaninternal.server.core.bootup.BootupClassPathSearch;
import io.ebeaninternal.server.core.bootup.BootupClasses;
import io.ebeaninternal.server.executor.DefaultBackgroundExecutor;
-import org.slf4j.Logger;
import javax.persistence.PersistenceException;
import java.net.URL;
@@ -23,12 +21,14 @@ import java.util.List;
import java.util.ServiceLoader;
import java.util.concurrent.locks.ReentrantLock;
+import static java.lang.System.Logger.Level.*;
+
/**
* Default Server side implementation of ServerFactory.
*/
public final class DefaultContainer implements SpiContainer {
- private static final Logger log = CoreLog.log;
+ private static final System.Logger log = CoreLog.log;
private final ReentrantLock lock = new ReentrantLock();
private final ClusterManager clusterManager;
@@ -108,7 +108,7 @@ public final class DefaultContainer implements SpiContainer {
startServer(online, server);
}
DbOffline.reset();
- log.info("Started database[{}] platform[{}] in {}ms", config.getName(), config.getDatabasePlatform().getPlatform(), System.currentTimeMillis() - start);
+ log.log(INFO, "Started database[{0}] platform[{1}] in {2}ms", config.getName(), config.getDatabasePlatform().platform(), System.currentTimeMillis() - start);
return server;
} finally {
lock.unlock();
@@ -137,7 +137,7 @@ public final class DefaultContainer implements SpiContainer {
private void checkMissingModulePathProvides() {
URL servicesFile = ClassLoader.getSystemResource("META-INF/services/io.ebean.config.EntityClassRegister");
if (servicesFile != null) {
- log.error("module-info.java is probably missing 'provides io.ebean.config.EntityClassRegister with EbeanEntityRegister' clause. EntityClassRegister exists but was not service loaded.");
+ log.log(ERROR, "module-info.java is probably missing 'provides io.ebean.config.EntityClassRegister with EbeanEntityRegister' clause. EntityClassRegister exists but was not service loaded.");
}
}
@@ -201,7 +201,7 @@ public final class DefaultContainer implements SpiContainer {
DatabasePlatform platform = config.getDatabasePlatform();
if (platform == null) {
if (config.getTenantMode().isDynamicDataSource()) {
- throw new IllegalStateException("DatabasePlatform must be explicitly set on DatabaseConfig for TenantMode "+config.getTenantMode());
+ throw new IllegalStateException("DatabasePlatform must be explicitly set on DatabaseConfig for TenantMode " + config.getTenantMode());
}
// automatically determine the platform
platform = new DatabasePlatformFactory().create(config);
@@ -215,7 +215,7 @@ public final class DefaultContainer implements SpiContainer {
*/
private void setDataSource(DatabaseConfig config) {
if (isOfflineMode(config)) {
- log.debug("... DbOffline using platform [{}]", DbOffline.getPlatform());
+ log.log(DEBUG, "... DbOffline using platform [{0}]", DbOffline.getPlatform());
} else {
InitDataSource.init(config);
}
@@ -251,7 +251,7 @@ public final class DefaultContainer implements SpiContainer {
}
try (Connection connection = config.getDataSource().getConnection()) {
if (connection.getAutoCommit()) {
- log.warn("DataSource [{}] has autoCommit defaulting to true!", config.getName());
+ log.log(WARNING, "DataSource [{0}] has autoCommit defaulting to true!", config.getName());
}
return true;
} catch (SQLException ex) {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultQueryPlanListener.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultQueryPlanListener.java
index f748e7f2b..039324072 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultQueryPlanListener.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultQueryPlanListener.java
@@ -1,23 +1,24 @@
package io.ebeaninternal.server.core;
+import io.avaje.applog.AppLog;
import io.ebean.config.QueryPlanCapture;
import io.ebean.config.QueryPlanListener;
import io.ebean.meta.MetaQueryPlan;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+
+import static java.lang.System.Logger.Level.INFO;
final class DefaultQueryPlanListener implements QueryPlanListener {
static final QueryPlanListener INSTANT = new DefaultQueryPlanListener();
- private static final Logger log = LoggerFactory.getLogger("io.ebean.QUERYPLAN");
+ private static final System.Logger log = AppLog.getLogger("io.ebean.QUERYPLAN");
@Override
public void process(QueryPlanCapture capture) {
// better to log this in JSON form?
String dbName = capture.database().name();
for (MetaQueryPlan plan : capture.plans()) {
- log.info("queryPlan db:{} label:{} queryTimeMicros:{} loc:{} sql:{} bind:{} plan:{}",
+ log.log(INFO, "queryPlan db:{0} label:{1} queryTimeMicros:{2} loc:{3} sql:{4} bind:{5} plan:{6}",
dbName, plan.label(), plan.queryTimeMicros(), plan.profileLocation(),
plan.sql(), plan.bind(), plan.plan());
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java
index 8617c2616..2c604ed98 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java
@@ -2,49 +2,11 @@ package io.ebeaninternal.server.core;
import io.avaje.lang.NonNullApi;
import io.avaje.lang.Nullable;
-import io.ebean.AutoTune;
-import io.ebean.BackgroundExecutor;
-import io.ebean.BeanState;
-import io.ebean.CallableSql;
-import io.ebean.DocumentStore;
-import io.ebean.DtoQuery;
-import io.ebean.ExpressionFactory;
-import io.ebean.ExpressionList;
-import io.ebean.ExtendedServer;
-import io.ebean.Filter;
-import io.ebean.FutureIds;
-import io.ebean.FutureList;
-import io.ebean.FutureRowCount;
-import io.ebean.MergeOptions;
-import io.ebean.MergeOptionsBuilder;
-import io.ebean.PagedList;
-import io.ebean.PersistenceContextScope;
-import io.ebean.ProfileLocation;
-import io.ebean.Query;
-import io.ebean.QueryIterator;
-import io.ebean.RowConsumer;
-import io.ebean.RowMapper;
-import io.ebean.ScriptRunner;
-import io.ebean.SqlQuery;
-import io.ebean.SqlRow;
-import io.ebean.SqlUpdate;
-import io.ebean.Transaction;
-import io.ebean.TransactionCallback;
-import io.ebean.TxScope;
-import io.ebean.Update;
-import io.ebean.UpdateQuery;
-import io.ebean.ValuePair;
-import io.ebean.Version;
+import io.ebean.*;
import io.ebean.annotation.Platform;
import io.ebean.annotation.TxIsolation;
-import io.ebean.bean.BeanCollection;
-import io.ebean.bean.BeanLoader;
-import io.ebean.bean.CallOrigin;
-import io.ebean.bean.EntityBean;
-import io.ebean.bean.EntityBeanIntercept;
-import io.ebean.bean.PersistenceContext;
+import io.ebean.bean.*;
import io.ebean.bean.PersistenceContext.WithOption;
-import io.ebean.bean.SingleBeanLoader;
import io.ebean.cache.ServerCacheManager;
import io.ebean.common.CopyOnFirstWriteList;
import io.ebean.config.*;
@@ -53,17 +15,12 @@ import io.ebean.event.BeanPersistController;
import io.ebean.event.ShutdownManager;
import io.ebean.event.readaudit.ReadAuditLogger;
import io.ebean.event.readaudit.ReadAuditPrepare;
-import io.ebean.meta.MetaInfoManager;
-import io.ebean.meta.MetaQueryPlan;
-import io.ebean.meta.MetricVisitor;
-import io.ebean.meta.QueryPlanInit;
-import io.ebean.meta.QueryPlanRequest;
+import io.ebean.meta.*;
import io.ebean.migration.auto.AutoMigrationRunner;
import io.ebean.plugin.BeanType;
import io.ebean.plugin.Plugin;
import io.ebean.plugin.Property;
import io.ebean.plugin.SpiServer;
-import io.ebean.text.csv.CsvReader;
import io.ebean.text.json.JsonContext;
import io.ebeaninternal.api.*;
import io.ebeaninternal.api.SpiQuery.Type;
@@ -78,30 +35,15 @@ import io.ebeaninternal.server.dto.DtoBeanDescriptor;
import io.ebeaninternal.server.dto.DtoBeanManager;
import io.ebeaninternal.server.el.ElFilter;
import io.ebeaninternal.server.grammer.EqlParser;
-import io.ebeaninternal.server.query.CQuery;
-import io.ebeaninternal.server.query.CQueryEngine;
-import io.ebeaninternal.server.query.CallableQueryCount;
-import io.ebeaninternal.server.query.CallableQueryIds;
-import io.ebeaninternal.server.query.CallableQueryList;
-import io.ebeaninternal.server.query.DtoQueryEngine;
-import io.ebeaninternal.server.query.LimitOffsetPagedList;
-import io.ebeaninternal.server.query.QueryFutureIds;
-import io.ebeaninternal.server.query.QueryFutureList;
-import io.ebeaninternal.server.query.QueryFutureRowCount;
-import io.ebeaninternal.server.querydefn.DefaultDtoQuery;
-import io.ebeaninternal.server.querydefn.DefaultOrmQuery;
-import io.ebeaninternal.server.querydefn.DefaultOrmUpdate;
-import io.ebeaninternal.server.querydefn.DefaultRelationalQuery;
-import io.ebeaninternal.server.querydefn.DefaultUpdateQuery;
+import io.ebeaninternal.server.query.*;
+import io.ebeaninternal.server.querydefn.*;
import io.ebeaninternal.server.rawsql.SpiRawSql;
-import io.ebeaninternal.server.text.csv.TCsvReader;
import io.ebeaninternal.server.transaction.DefaultPersistenceContext;
import io.ebeaninternal.server.transaction.RemoteTransactionEvent;
import io.ebeaninternal.server.transaction.TransactionManager;
import io.ebeaninternal.util.ParamTypeHelper;
import io.ebeaninternal.util.ParamTypeHelper.TypeInfo;
import io.ebeanservice.docstore.api.DocStoreIntegration;
-import org.slf4j.Logger;
import javax.persistence.NonUniqueResultException;
import javax.persistence.OptimisticLockException;
@@ -120,6 +62,7 @@ import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Stream;
+import static java.lang.System.Logger.Level.*;
import static java.util.Spliterators.spliteratorUnknownSize;
import static java.util.stream.StreamSupport.stream;
@@ -129,7 +72,7 @@ import static java.util.stream.StreamSupport.stream;
@NonNullApi
public final class DefaultServer implements SpiServer, SpiEbeanServer {
- private static final Logger log = CoreLog.internal;
+ private static final System.Logger log = CoreLog.internal;
private final ReentrantLock lock = new ReentrantLock();
private final DatabaseConfig config;
@@ -306,7 +249,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
@Override
public Platform platform() {
- return databasePlatform.getPlatform();
+ return databasePlatform.platform();
}
@Override
@@ -373,7 +316,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
migrationRunner.setDefaultDbSchema(dbSchema);
}
migrationRunner.setName(config.getName());
- Platform platform = config.getDatabasePlatform().getPlatform();
+ Platform platform = config.getDatabasePlatform().platform();
migrationRunner.setBasePlatform(platform.base().name().toLowerCase());
migrationRunner.setPlatform(platform.name().toLowerCase());
migrationRunner.loadProperties(config.getProperties());
@@ -386,7 +329,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
if (config.isQueryPlanCapture()) {
long secs = config.getQueryPlanCapturePeriodSecs();
if (secs > 10) {
- log.info("capture query plan enabled, every {}secs", secs);
+ log.log(INFO, "capture query plan enabled, every {0}secs", secs);
backgroundExecutor.scheduleWithFixedDelay(this::collectQueryPlans, secs, secs, TimeUnit.SECONDS);
}
}
@@ -434,7 +377,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
* Shutdown the services like threads and DataSource.
*/
private void shutdownInternal(boolean shutdownDataSource, boolean deregisterDriver) {
- log.trace("shutting down instance {}", serverName);
+ log.log(TRACE, "shutting down instance {0}", serverName);
if (shutdown) {
// already shutdown
return;
@@ -463,7 +406,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
try {
plugin.shutdown();
} catch (Exception e) {
- log.error("Error when shutting down plugin", e);
+ log.log(ERROR, "Error when shutting down plugin", e);
}
}
}
@@ -615,7 +558,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
try (Connection connection = dataSource().getConnection()) {
for (String table : tables) {
executeSql(connection, databasePlatform.truncateStatement(table));
- if (databasePlatform.getPlatform().base() == Platform.DB2) {
+ if (databasePlatform.platform().base() == Platform.DB2) {
// DB2 requires commit after each truncate statement
connection.commit();
}
@@ -862,10 +805,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
return new ElFilter<>(desc(beanType));
}
- @Override
- public CsvReader createCsvReader(Class beanType) {
- return new TCsvReader<>(this, desc(beanType));
- }
@Override
public UpdateQuery update(Class beanType) {
@@ -1140,7 +1079,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
if (list.isEmpty()) {
return null;
} else if (list.size() > 1) {
- throw new NonUniqueResultException("Unique expecting 0 or 1 results but got [" + list.size() + "]");
+ throw new NonUniqueResultException("Unique expecting 0 or 1 results but got " + list.size());
} else {
return list.get(0);
}
@@ -1330,7 +1269,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
copy.setFutureFetch(true);
Transaction newTxn = createTransaction();
QueryFutureRowCount queryFuture = new QueryFutureRowCount<>(new CallableQueryCount<>(this, copy, newTxn));
- backgroundExecutor.execute(queryFuture.getFutureTask());
+ backgroundExecutor.execute(queryFuture.futureTask());
return queryFuture;
}
@@ -1340,7 +1279,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
copy.setFutureFetch(true);
Transaction newTxn = createTransaction();
QueryFutureIds queryFuture = new QueryFutureIds<>(new CallableQueryIds<>(this, copy, newTxn));
- backgroundExecutor.execute(queryFuture.getFutureTask());
+ backgroundExecutor.execute(queryFuture.futureTask());
return queryFuture;
}
@@ -1357,7 +1296,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
// Create a new transaction solely to execute the findList() at some future time
Transaction newTxn = createTransaction();
QueryFutureList queryFuture = new QueryFutureList<>(new CallableQueryList<>(this, spiQuery, newTxn));
- backgroundExecutor.execute(queryFuture.getFutureTask());
+ backgroundExecutor.execute(queryFuture.futureTask());
return queryFuture;
}
@@ -2038,7 +1977,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
return desc(bean.getClass()).getId(eb);
}
- private BeanDescriptor desc(Class beanClass) {
+ private BeanDescriptor desc(Class beanClass) {
BeanDescriptor desc = descriptorManager.descriptor(beanClass);
if (desc == null) {
throw new PersistenceException(beanClass.getName() + " is NOT an Entity Bean registered with this server?");
@@ -2130,7 +2069,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
try {
serverCacheManager.clearLocal(Class.forName(cache));
} catch (Exception e) {
- log.error("Error clearing local cache for type " + cache, e);
+ log.log(ERROR, "Error clearing local cache for type " + cache, e);
}
}
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultSlowQueryListener.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultSlowQueryListener.java
index 64c813213..6dc42b211 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultSlowQueryListener.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultSlowQueryListener.java
@@ -1,17 +1,18 @@
package io.ebeaninternal.server.core;
+import io.avaje.applog.AppLog;
import io.ebean.bean.ObjectGraphNode;
import io.ebean.config.SlowQueryEvent;
import io.ebean.config.SlowQueryListener;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+
+import static java.lang.System.Logger.Level.WARNING;
/**
* Default slow query listener implementation that logs a warning message.
*/
final class DefaultSlowQueryListener implements SlowQueryListener {
- private static final Logger log = LoggerFactory.getLogger("io.ebean.SlowQuery");
+ private static final System.Logger log = AppLog.getLogger("io.ebean.SlowQuery");
@Override
public void process(SlowQueryEvent event) {
@@ -20,6 +21,6 @@ final class DefaultSlowQueryListener implements SlowQueryListener {
if (node != null) {
firstStack = node.getOriginQueryPoint().getTopElement();
}
- log.warn("Slow query warning - millis:{} rows:{} caller[{}] sql[{}]", event.getTimeMillis(), event.getRowCount(), firstStack, event.getSql());
+ log.log(WARNING, "Slow query warning - millis:{0} rows:{1} caller[{2}] sql[{3}]", event.getTimeMillis(), event.getRowCount(), firstStack, event.getSql());
}
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetrics.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetrics.java
index 73ad97f2c..c13a7d6db 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetrics.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetrics.java
@@ -100,11 +100,7 @@ final class DumpMetrics {
}
private void logCount(MetaCountMetric metric) {
-
- StringBuilder sb = new StringBuilder();
- sb.append(padNameTimed(metric.name())).append(" ");
- sb.append(" count:").append(pad(metric.count()));
- out(sb.toString());
+ out(padNameTimed(metric.name()) + " count:" + pad(metric.count()));
}
private void out(String sb) {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/InitDataSource.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/InitDataSource.java
index c7e17119f..3eb6dfe3a 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/InitDataSource.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/InitDataSource.java
@@ -105,7 +105,7 @@ final class InitDataSource {
}
boolean isPostgresAllQuotedIdentifiers() {
- return config.isAllQuotedIdentifiers() && Platform.POSTGRES == config.getDatabasePlatform().getPlatform().base();
+ return config.isAllQuotedIdentifiers() && Platform.POSTGRES == config.getDatabasePlatform().platform().base();
}
private DataSource create(DataSourceConfig dsConfig, boolean readOnly) {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/InternString.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/InternString.java
index 8a06fc4d4..dadfdb368 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/InternString.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/InternString.java
@@ -1,38 +1,14 @@
package io.ebeaninternal.server.core;
-import java.util.HashMap;
-import java.util.concurrent.locks.ReentrantLock;
-
/**
* Used to reduce memory consumption of strings used in deployment processing.
- *
- * Using this for now instead of String.intern() to avoid any unexpected
- * increase in PermGen space.
*/
public final class InternString {
- private static final HashMap map = new HashMap<>();
-
- private static final ReentrantLock lock = new ReentrantLock();
-
/**
* Return the shared instance of this string.
*/
public static String intern(String s) {
- if (s == null) {
- return null;
- }
- lock.lock();
- try {
- String v = map.get(s);
- if (v != null) {
- return v;
- } else {
- map.put(s, s);
- return s;
- }
- } finally {
- lock.unlock();
- }
+ return s == null ? null : s.intern();
}
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/InternalConfigXmlMap.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/InternalConfigXmlMap.java
index 826cc3471..c55467ce4 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/InternalConfigXmlMap.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/InternalConfigXmlMap.java
@@ -10,6 +10,8 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import static java.lang.System.Logger.Level.ERROR;
+
/**
* Reads the Xml deployment information.
*/
@@ -55,7 +57,7 @@ final class InternalConfigXmlMap {
try {
dtoClass = Class.forName(dto.getClazz(), false, classLoader);
} catch (Exception e) {
- CoreLog.internal.error("Could not load dto bean class " + dto.getClazz() + " for ebean xml entry");
+ CoreLog.internal.log(ERROR, "Could not load dto bean class " + dto.getClazz() + " for ebean xml entry");
return;
}
DtoNamedQueries namedQueries = dtoNamedQueries.computeIfAbsent(dtoClass, aClass -> new DtoNamedQueries());
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/InternalConfiguration.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/InternalConfiguration.java
index e6944a9e9..bce133978 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/InternalConfiguration.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/InternalConfiguration.java
@@ -46,7 +46,7 @@ import io.ebeaninternal.server.persist.platform.PostgresMultiValueBind;
import io.ebeaninternal.server.query.*;
import io.ebeaninternal.server.readaudit.DefaultReadAuditLogger;
import io.ebeaninternal.server.readaudit.DefaultReadAuditPrepare;
-import io.ebeaninternal.server.text.json.DJsonContext;
+import io.ebeaninternal.server.json.DJsonContext;
import io.ebeaninternal.server.transaction.*;
import io.ebeaninternal.server.type.DefaultTypeManager;
import io.ebeaninternal.server.type.TypeManager;
@@ -56,17 +56,18 @@ import io.ebeanservice.docstore.api.DocStoreFactory;
import io.ebeanservice.docstore.api.DocStoreIntegration;
import io.ebeanservice.docstore.api.DocStoreUpdateProcessor;
import io.ebeanservice.docstore.none.NoneDocStoreFactory;
-import org.slf4j.Logger;
import java.util.*;
+import static java.lang.System.Logger.Level.*;
+
/**
* Used to extend the DatabaseConfig with additional objects used to configure and
* construct an Database.
*/
public final class InternalConfiguration {
- private static final Logger log = CoreLog.internal;
+ private static final System.Logger log = CoreLog.internal;
private final TableModState tableModState;
private final boolean online;
@@ -115,7 +116,7 @@ public final class InternalConfiguration {
this.databasePlatform = config.getDatabasePlatform();
this.expressionFactory = initExpressionFactory(config);
this.typeManager = new DefaultTypeManager(config, bootupClasses);
- this.multiValueBind = createMultiValueBind(databasePlatform.getPlatform());
+ this.multiValueBind = createMultiValueBind(databasePlatform.platform());
this.deployInherit = new DeployInherit(bootupClasses);
this.deployCreateProperties = new DeployCreateProperties(typeManager);
this.deployUtil = new DeployUtil(typeManager, config);
@@ -170,7 +171,7 @@ public final class InternalConfiguration {
* Create and return the ExpressionFactory based on configuration and database platform.
*/
private ExpressionFactory initExpressionFactory(DatabaseConfig config) {
- boolean nativeIlike = config.isExpressionNativeIlike() && databasePlatform.isSupportsNativeIlike();
+ boolean nativeIlike = config.isExpressionNativeIlike() && databasePlatform.supportsNativeIlike();
return new DefaultExpressionFactory(config.isExpressionEqualsWithNullAsNoop(), nativeIlike);
}
@@ -246,7 +247,7 @@ public final class InternalConfiguration {
*/
ReadAuditLogger getReadAuditLogger() {
ReadAuditLogger found = bootupClasses.getReadAuditLogger();
- return plugin(found != null ? found : jacksonCorePresent? new DefaultReadAuditLogger(): null);
+ return plugin(found != null ? found : jacksonCorePresent ? new DefaultReadAuditLogger() : null);
}
/**
@@ -264,7 +265,7 @@ public final class InternalConfiguration {
DbExpressionHandler jsonHandler = getDbExpressionHandler(databasePlatform);
- DbHistorySupport historySupport = databasePlatform.getHistorySupport();
+ DbHistorySupport historySupport = databasePlatform.historySupport();
if (historySupport == null) {
return new Binder(typeManager, logManager, 0, false, jsonHandler, dataTimeZone, multiValueBind);
}
@@ -320,7 +321,7 @@ public final class InternalConfiguration {
}
private Platform getPlatform() {
- return getDatabasePlatform().getPlatform();
+ return getDatabasePlatform().platform();
}
public DatabasePlatform getDatabasePlatform() {
@@ -433,7 +434,7 @@ public final class InternalConfiguration {
externalTransactionManager = new JtaTransactionManager();
}
if (externalTransactionManager != null) {
- log.info("Using Transaction Manager [" + externalTransactionManager.getClass() + "]");
+ log.log(INFO, "Using Transaction Manager {0}", externalTransactionManager.getClass());
return new ExternalTransactionScopeManager(externalTransactionManager);
} else {
return new DefaultTransactionScopeManager();
@@ -523,7 +524,7 @@ public final class InternalConfiguration {
if (iterator.hasNext()) {
// use the cacheFactory (via classpath service loader)
plugin = iterator.next();
- log.debug("using ServerCacheFactory {}", plugin.getClass());
+ log.log(DEBUG, "using ServerCacheFactory {0}", plugin.getClass());
} else {
// use the built in default l2 caching which is local cache based
localL2Caching = true;
@@ -576,7 +577,7 @@ public final class InternalConfiguration {
return QueryPlanManager.NOOP;
}
long threshold = config.getQueryPlanThresholdMicros();
- return new CQueryPlanManager(transactionManager, threshold, queryPlanLogger(databasePlatform.getPlatform()), extraMetrics);
+ return new CQueryPlanManager(transactionManager, threshold, queryPlanLogger(databasePlatform.platform()), extraMetrics);
}
/**
@@ -605,6 +606,7 @@ public final class InternalConfiguration {
private static class NoopDdl implements SpiDdlGenerator {
private final boolean ddlRun;
+
NoopDdl(boolean ddlRun) {
this.ddlRun = ddlRun;
}
@@ -612,7 +614,7 @@ public final class InternalConfiguration {
@Override
public void execute(boolean online) {
if (online && ddlRun) {
- CoreLog.log.error("Configured to run DDL but ebean-ddl-generator is not in the classpath (or ebean-test in the test classpath?)");
+ CoreLog.log.log(ERROR, "Configured to run DDL but ebean-ddl-generator is not in the classpath (or ebean-test in the test classpath?)");
}
}
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/OrmQueryEngine.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/OrmQueryEngine.java
index d3ca32b6d..d29beebe0 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/OrmQueryEngine.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/OrmQueryEngine.java
@@ -73,4 +73,6 @@ public interface OrmQueryEngine {
* Return true if multi-value bind is supported for this type (and current platform).
*/
boolean isMultiValueSupported(Class> valueType);
+
+ int forwardOnlyFetchSize();
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/OrmQueryRequest.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/OrmQueryRequest.java
index 423d6687b..29dd4ac1d 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/OrmQueryRequest.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/OrmQueryRequest.java
@@ -24,6 +24,8 @@ import java.util.*;
import java.util.function.Consumer;
import java.util.function.Predicate;
+import static java.lang.System.Logger.Level.ERROR;
+
/**
* Wraps the objects involved in executing a Query.
*/
@@ -98,7 +100,7 @@ public final class OrmQueryRequest extends BeanRequest implements SpiOrmQuery
*/
@Override
public String dbLikeClause(boolean rawLikeExpression) {
- return server.databasePlatform().getLikeClause(rawLikeExpression);
+ return server.databasePlatform().likeClause(rawLikeExpression);
}
/**
@@ -244,7 +246,7 @@ public final class OrmQueryRequest extends BeanRequest implements SpiOrmQuery
// Just log this and carry on. A previous exception has been
// thrown and if this rollback throws exception it likely means
// that the connection is broken (and the dataSource and db will cleanup)
- CoreLog.log.error("Error trying to rollback a transaction (after a prior exception thrown)", e);
+ CoreLog.log.log(ERROR, "Error trying to rollback a transaction (after a prior exception thrown)", e);
}
}
}
@@ -639,7 +641,7 @@ public final class OrmQueryRequest extends BeanRequest implements SpiOrmQuery
for (T bean : actualDetails) {
ids.add(beanDescriptor.idForJson(bean));
}
- beanDescriptor.readAuditMany(queryPlanKey.getPartialKey(), "l2-query-cache", ids);
+ beanDescriptor.readAuditMany(queryPlanKey.partialKey(), "l2-query-cache", ids);
}
}
if (Boolean.FALSE.equals(query.isReadOnly())) {
@@ -759,6 +761,10 @@ public final class OrmQueryRequest extends BeanRequest implements SpiOrmQuery
* Return true if no MaxRows or use LIMIT in SQL update.
*/
public boolean isInlineSqlUpdateLimit() {
- return query.getMaxRows() < 1 || server.databasePlatform().isInlineSqlUpdateLimit();
+ return query.getMaxRows() < 1 || server.databasePlatform().inlineSqlUpdateLimit();
+ }
+
+ public int forwardOnlyFetchSize() {
+ return queryEngine.forwardOnlyFetchSize();
}
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/PersistRequestBean.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/PersistRequestBean.java
index 2af16b25b..4016596f0 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/PersistRequestBean.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/PersistRequestBean.java
@@ -928,20 +928,20 @@ public final class PersistRequestBean extends PersistRequest implements BeanP
}
private void logSummaryMessage() {
- String draft = (beanDescriptor.isDraftable() && !publish) ? " draft[true]" : "";
+ String draft = (beanDescriptor.isDraftable() && !publish) ? "] draft[true]" : "]";
String name = beanDescriptor.name();
switch (type) {
case INSERT:
- transaction.logSummary("Inserted [" + name + "] [" + (idValue == null ? "" : idValue) + "]" + draft);
+ transaction.logSummary("Inserted [" + name + "] [" + (idValue == null ? "" : idValue) + draft);
break;
case UPDATE:
- transaction.logSummary("Updated [" + name + "] [" + idValue + "]" + draft);
+ transaction.logSummary("Updated [" + name + "] [" + idValue + draft);
break;
case DELETE:
- transaction.logSummary("Deleted [" + name + "] [" + idValue + "]" + draft);
+ transaction.logSummary("Deleted [" + name + "] [" + idValue + draft);
break;
case DELETE_SOFT:
- transaction.logSummary("SoftDelete [" + name + "] [" + idValue + "]" + draft);
+ transaction.logSummary("SoftDelete [" + name + "] [" + idValue + draft);
break;
default:
break;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/PersistRequestCallableSql.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/PersistRequestCallableSql.java
index 1edabf5bd..70eebd927 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/PersistRequestCallableSql.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/PersistRequestCallableSql.java
@@ -86,8 +86,7 @@ public final class PersistRequestCallableSql extends PersistRequest {
persistExecute.collectSqlCall(label, startNanos);
}
if (transaction.isLogSummary()) {
- String m = "CallableSql label[" + callableSql.getLabel() + "]" + " rows[" + rowCount + "]" + " bind[" + bindLog + "]";
- transaction.logSummary(m);
+ transaction.logSummary("CallableSql label[" + callableSql.getLabel() + "]" + " rows[" + rowCount + "]" + " bind[" + bindLog + "]");
}
// register table modifications with the transaction event
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/PersistRequestOrmUpdate.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/PersistRequestOrmUpdate.java
index 08de8e27d..eb865a0bd 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/PersistRequestOrmUpdate.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/PersistRequestOrmUpdate.java
@@ -83,8 +83,7 @@ public final class PersistRequestOrmUpdate extends PersistRequest {
OrmUpdateType ormUpdateType = ormUpdate.getOrmUpdateType();
String tableName = ormUpdate.getBaseTable();
if (transaction.isLogSummary()) {
- String m = ormUpdateType + " table[" + tableName + "] rows[" + rowCount + "] bind[" + bindLog + "]";
- transaction.logSummary(m);
+ transaction.logSummary(ormUpdateType + " table[" + tableName + "] rows[" + rowCount + "] bind[" + bindLog + "]");
}
if (ormUpdate.isNotifyCache()) {
// add the modification info to the TransactionEvent
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/PersistRequestUpdateSql.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/PersistRequestUpdateSql.java
index 63f31434a..e2f898e3c 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/PersistRequestUpdateSql.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/PersistRequestUpdateSql.java
@@ -49,9 +49,9 @@ public final class PersistRequestUpdateSql extends PersistRequest {
/**
* Add this statement to JDBC batch for later execution.
*/
- public int addBatch() {
+ public void addBatch() {
this.addBatch = true;
- return executeStatement(true);
+ executeStatement(true);
}
/**
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/SpiOrmQueryRequest.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/SpiOrmQueryRequest.java
index c3f98854b..039158200 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/SpiOrmQueryRequest.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/SpiOrmQueryRequest.java
@@ -138,7 +138,7 @@ public interface SpiOrmQueryRequest extends BeanQueryRequest, DocQueryRequ
/**
* Maybe hit the bean cache returning true if everything was obtained from the
* cache (that there were no misses).
- *
+ *
* Do this for findList() on many natural keys or many Ids.
*/
boolean getFromBeanCache();
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/SpiResultSet.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/SpiResultSet.java
index e95c0d461..ed114375b 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/SpiResultSet.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/SpiResultSet.java
@@ -5,7 +5,7 @@ import java.sql.ResultSet;
/**
* Hold the JDBC PreparedStatement and ResultSet.
- *
+ *
* These both must be closed properly when done.
*/
public final class SpiResultSet {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/bootup/BootupClassPathSearch.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/bootup/BootupClassPathSearch.java
index 1c378cbf9..8e2dd4d7f 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/bootup/BootupClassPathSearch.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/bootup/BootupClassPathSearch.java
@@ -4,17 +4,18 @@ import io.avaje.classpath.scanner.ClassPathScanner;
import io.ebean.config.DatabaseConfig;
import io.ebeaninternal.api.CoreLog;
import io.ebeaninternal.server.core.ClassPathScanners;
-import org.slf4j.Logger;
import java.util.List;
import java.util.Set;
+import static java.lang.System.Logger.Level.DEBUG;
+
/**
* Searches for interesting classes such as Entities, Embedded and ScalarTypes.
*/
public class BootupClassPathSearch {
- private static final Logger log = CoreLog.internal;
+ private static final System.Logger log = CoreLog.internal;
private final List packages;
private final List scanners;
@@ -42,7 +43,6 @@ public class BootupClassPathSearch {
* Search the classPath for the classes we are interested in.
*/
private BootupClasses getBootupClasses() {
-
try {
BootupClasses bc = new BootupClasses();
@@ -59,7 +59,7 @@ public class BootupClassPathSearch {
}
long searchTime = System.currentTimeMillis() - st;
- log.debug("Classpath search entities[{}] searchTime[{}] in packages[{}]", bc.getEntities().size(), searchTime, packages);
+ log.log(DEBUG, "Classpath search entities[{0}] searchTime[{1}] in packages[{2}]", bc.getEntities().size(), searchTime, packages);
return bc;
} catch (Exception ex) {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/bootup/BootupClasses.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/bootup/BootupClasses.java
index 3fc4bbb95..464731024 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/bootup/BootupClasses.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/bootup/BootupClasses.java
@@ -13,7 +13,6 @@ import io.ebean.event.readaudit.ReadAuditLogger;
import io.ebean.event.readaudit.ReadAuditPrepare;
import io.ebean.util.AnnotationUtil;
import io.ebeaninternal.api.CoreLog;
-import org.slf4j.Logger;
import javax.persistence.AttributeConverter;
import javax.persistence.Embeddable;
@@ -25,13 +24,16 @@ import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;
+import static java.lang.System.Logger.Level.DEBUG;
+import static java.lang.System.Logger.Level.ERROR;
+
/**
* Interesting classes for a EbeanServer such as Embeddable, Entity,
* ScalarTypes, Finders, Listeners and Controllers.
*/
public class BootupClasses implements Predicate> {
- private static final Logger log = CoreLog.internal;
+ private static final System.Logger log = CoreLog.internal;
private final List> embeddableList = new ArrayList<>();
private final List> entityList = new ArrayList<>();
@@ -205,13 +207,13 @@ public class BootupClasses implements Predicate> {
try {
return cls.getConstructor().newInstance();
} catch (NoSuchMethodException e) {
- log.debug("Ignore/expected - no default constructor: " +e.getMessage());
+ log.log(DEBUG, "Ignore/expected - no default constructor: {0}", e.getMessage());
return null;
} catch (Exception e) {
if (logOnException) {
// not expected but we log and carry on
- log.error("Error creating " + cls, e);
+ log.log(ERROR, "Error creating " + cls, e);
return null;
} else {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/bootup/ManifestReader.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/bootup/ManifestReader.java
index d9a651293..e794740e5 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/bootup/ManifestReader.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/bootup/ManifestReader.java
@@ -3,7 +3,6 @@ package io.ebeaninternal.server.core.bootup;
import io.ebean.util.StringHelper;
import io.ebeaninternal.api.CoreLog;
import io.ebeaninternal.util.UrlHelper;
-import org.slf4j.Logger;
import java.io.IOException;
import java.io.InputStream;
@@ -15,12 +14,14 @@ import java.util.Set;
import java.util.jar.Attributes;
import java.util.jar.Manifest;
+import static java.lang.System.Logger.Level.WARNING;
+
/**
* Reads all the META-INF/ebean.mf resources with the package locations of entity beans.
*/
class ManifestReader {
- private static final Logger log = CoreLog.internal;
+ private static final System.Logger log = CoreLog.internal;
private final Set packageSet = new HashSet<>();
private final ClassLoader classLoader;
@@ -54,8 +55,7 @@ class ManifestReader {
/**
* Read all the specific manifest files and return the set of packages containing type query beans.
*/
- private Set read(ClassLoader classLoader, String resourcePath) {
-
+ private void read(ClassLoader classLoader, String resourcePath) {
try {
Enumeration resources = classLoader.getResources(resourcePath);
while (resources.hasMoreElements()) {
@@ -64,16 +64,14 @@ class ManifestReader {
}
}
} catch (IOException e) {
- log.warn("Error reading " + resourcePath + " manifest resources", e);
+ log.log(WARNING, "Error reading " + resourcePath + " manifest resources", e);
}
- return packageSet;
}
/**
* Read the entity packages from the manifest.
*/
private void read(Manifest manifest) throws IOException {
-
Attributes attributes = manifest.getMainAttributes();
String agentOnlyUse = attributes.getValue("agent-use-only");
if (agentOnlyUse == null || !"true".equalsIgnoreCase(agentOnlyUse.trim())) {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelp.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelp.java
index c2ed2a472..7f2366006 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelp.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelp.java
@@ -61,7 +61,7 @@ abstract class AssocOneHelp {
if (id == null) {
return null;
}
- PersistenceContext pc = ctx.getPersistenceContext();
+ PersistenceContext pc = ctx.persistenceContext();
Object existing = target.contextGet(pc, id);
if (existing != null) {
return existing;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelpRefExported.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelpRefExported.java
index 8b2fbe7bd..94ffe2686 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelpRefExported.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelpRefExported.java
@@ -22,7 +22,7 @@ final class AssocOneHelpRefExported extends AssocOneHelp {
@Override
void appendSelect(DbSqlContext ctx, boolean subQuery) {
// set appropriate tableAlias for the exported id columns
- String relativePrefix = ctx.getRelativePrefix(property.name());
+ String relativePrefix = ctx.relativePrefix(property.name());
ctx.pushTableAlias(relativePrefix);
property.targetIdBinder.appendSelect(ctx, subQuery);
ctx.popTableAlias();
@@ -30,7 +30,7 @@ final class AssocOneHelpRefExported extends AssocOneHelp {
@Override
void appendFrom(DbSqlContext ctx, SqlJoinType joinType) {
- String relativePrefix = ctx.getRelativePrefix(property.name());
+ String relativePrefix = ctx.relativePrefix(property.name());
if (softDelete && !ctx.isIncludeSoftDelete()) {
property.tableJoin.addJoin(joinType, relativePrefix, ctx, softDeletePredicate);
} else {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelpRefInherit.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelpRefInherit.java
index 72fb828c7..df8bff16f 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelpRefInherit.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelpRefInherit.java
@@ -22,7 +22,7 @@ final class AssocOneHelpRefInherit extends AssocOneHelp {
@Override
void loadIgnore(DbReadContext ctx) {
property.targetIdBinder.loadIgnore(ctx);
- ctx.getDataReader().incrementPos(1);
+ ctx.dataReader().incrementPos(1);
}
/**
@@ -47,7 +47,7 @@ final class AssocOneHelpRefInherit extends AssocOneHelp {
return null;
}
// check transaction context to see if it already exists
- PersistenceContext pc = ctx.getPersistenceContext();
+ PersistenceContext pc = ctx.persistenceContext();
Object existing = desc.contextGet(pc, id);
if (existing != null) {
return existing;
@@ -63,7 +63,7 @@ final class AssocOneHelpRefInherit extends AssocOneHelp {
void appendFrom(DbSqlContext ctx, SqlJoinType joinType) {
// add join to support the discriminator column
- String relativePrefix = ctx.getRelativePrefix(property.name);
+ String relativePrefix = ctx.relativePrefix(property.name);
ctx.addExtraJoin(new Extra(relativePrefix, joinType));
}
@@ -92,8 +92,8 @@ final class AssocOneHelpRefInherit extends AssocOneHelp {
void appendSelect(DbSqlContext ctx, boolean subQuery) {
if (!subQuery) {
// add discriminator column
- String relativePrefix = ctx.getRelativePrefix(property.name());
- String tableAlias = ctx.getTableAlias(relativePrefix);
+ String relativePrefix = ctx.relativePrefix(property.name());
+ String tableAlias = ctx.tableAlias(relativePrefix);
ctx.appendColumn(tableAlias, property.targetInheritInfo.getDiscriminatorColumn());
}
property.importedId.sqlAppend(ctx);
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanCollectionUtil.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanCollectionUtil.java
index e1a0d352c..aa8c72b5a 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanCollectionUtil.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanCollectionUtil.java
@@ -46,7 +46,7 @@ public final class BeanCollectionUtil {
} else if (o instanceof Collection>) {
return ((Collection>) o);
}
- throw new PersistenceException("expecting a Map or Collection but got [" + o.getClass().getName() + "]");
+ throw new PersistenceException("expecting a Map or Collection but got " + o.getClass().getName());
}
/**
@@ -73,6 +73,6 @@ public final class BeanCollectionUtil {
} else if (o instanceof Collection>) {
return ((Collection>) o);
}
- throw new PersistenceException("expecting a Map or Collection but got [" + o.getClass().getName() + "]");
+ throw new PersistenceException("expecting a Map or Collection but got " + o.getClass().getName());
}
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptor.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptor.java
index 08804a53d..eddf39e5d 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptor.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptor.java
@@ -45,7 +45,7 @@ import io.ebeaninternal.server.querydefn.DefaultOrmQuery;
import io.ebeaninternal.server.querydefn.OrmQueryDetail;
import io.ebeaninternal.server.querydefn.OrmQueryProperties;
import io.ebeaninternal.server.rawsql.SpiRawSql;
-import io.ebeaninternal.server.type.DataBind;
+import io.ebeaninternal.server.bind.DataBind;
import io.ebeaninternal.util.SortByClause;
import io.ebeaninternal.util.SortByClauseParser;
import io.ebeanservice.docstore.api.DocStoreBeanAdapter;
@@ -54,7 +54,6 @@ import io.ebeanservice.docstore.api.DocStoreUpdates;
import io.ebeanservice.docstore.api.mapping.DocMappingBuilder;
import io.ebeanservice.docstore.api.mapping.DocPropertyMapping;
import io.ebeanservice.docstore.api.mapping.DocumentMapping;
-import org.slf4j.Logger;
import javax.persistence.PersistenceException;
import java.io.IOException;
@@ -68,13 +67,15 @@ import java.util.function.Consumer;
import java.util.stream.Collectors;
import static io.ebeaninternal.server.persist.DmlUtil.isNullOrZero;
+import static java.lang.System.Logger.Level.ERROR;
+import static java.lang.System.Logger.Level.INFO;
/**
* Describes Beans including their deployment information.
*/
public class BeanDescriptor implements BeanType, STreeType, SpiBeanType {
- private static final Logger log = CoreLog.internal;
+ private static final System.Logger log = CoreLog.internal;
public enum EntityType {
ORM, EMBEDDED, VIEW, SQL, DOC
@@ -322,7 +323,7 @@ public class BeanDescriptor implements BeanType, STreeType, SpiBeanType {
this.jsonHelp = initJsonHelp();
this.draftHelp = new BeanDescriptorDraftHelp<>(this);
this.docStoreAdapter = owner.createDocStoreBeanAdapter(this, deploy);
- this.docStoreQueueId = docStoreAdapter.getQueueId();
+ this.docStoreQueueId = docStoreAdapter.queueId();
// Check if there are no cascade save associated beans ( subject to change
// in initialiseOther()). Note that if we are in an inheritance hierarchy
// then we also need to check every BeanDescriptors in the InheritInfo as
@@ -494,9 +495,6 @@ public class BeanDescriptor implements BeanType, STreeType, SpiBeanType {
* as they are used to get the imported and exported properties.
*/
void initialiseId(BeanDescriptorInitContext initContext) {
- if (log.isTraceEnabled()) {
- log.trace("BeanDescriptor initialise " + fullName);
- }
if (draftable) {
initContext.addDraft(baseTable, draftTable);
}
@@ -795,7 +793,7 @@ public class BeanDescriptor implements BeanType, STreeType, SpiBeanType {
changeJson.flush();
return beanChange(ChangeType.UPDATE, request.beanId(), changeJson.newJson(), changeJson.oldJson());
} catch (RuntimeException e) {
- log.error("Failed to write ChangeLog entry for update", e);
+ log.log(ERROR, "Failed to write ChangeLog entry for update", e);
return null;
}
}
@@ -811,7 +809,7 @@ public class BeanDescriptor implements BeanType, STreeType, SpiBeanType {
jsonWriter.flush();
return beanChange(ChangeType.INSERT, request.beanId(), writer.toString(), null);
} catch (IOException e) {
- log.error("Failed to write ChangeLog entry for insert", e);
+ log.log(ERROR, "Failed to write ChangeLog entry for insert", e);
return null;
}
}
@@ -968,7 +966,7 @@ public class BeanDescriptor implements BeanType, STreeType, SpiBeanType {
*/
@Override
public boolean isDocStoreMapped() {
- return docStoreAdapter.isMapped();
+ return docStoreAdapter.mapped();
}
/**
@@ -1074,7 +1072,7 @@ public class BeanDescriptor implements BeanType, STreeType, SpiBeanType {
* given the transactions requested mode.
*/
public DocStoreMode docStoreMode(PersistRequest.Type persistType, DocStoreMode txnMode) {
- return docStoreAdapter.getMode(persistType, txnMode);
+ return docStoreAdapter.mode(persistType, txnMode);
}
public void docStoreInsert(Object idValue, PersistRequestBean persistRequest, DocStoreUpdateContext bulkUpdate) throws IOException {
@@ -1468,7 +1466,7 @@ public class BeanDescriptor implements BeanType, STreeType, SpiBeanType {
void queryPlanInit(QueryPlanInit request, List list) {
for (CQueryPlan queryPlan : queryPlanCache.values()) {
- if (request.includeHash(queryPlan.getHash())) {
+ if (request.includeHash(queryPlan.hash())) {
queryPlan.queryPlanInit(request.thresholdMicros());
list.add(queryPlan.createMeta(null, null));
}
@@ -1500,7 +1498,7 @@ public class BeanDescriptor implements BeanType, STreeType, SpiBeanType {
* Trim query plans not used since the passed in epoch time.
*/
void trimQueryPlans(long unusedSince) {
- queryPlanCache.values().removeIf(queryPlan -> queryPlan.getLastQueryTime() < unusedSince);
+ queryPlanCache.values().removeIf(queryPlan -> queryPlan.lastQueryTime() < unusedSince);
}
/**
@@ -1893,7 +1891,7 @@ public class BeanDescriptor implements BeanType, STreeType, SpiBeanType {
}
BeanPropertyAssoc> assocProp = (BeanPropertyAssoc>) other._findBeanProperty(split[0]);
if (assocProp == null) {
- throw new IllegalStateException("Unknown property path [" + split[0] + "] from[" + path + "]");
+ throw new IllegalStateException("Unknown property path " + split[0] + " from " + path);
}
BeanDescriptor> targetDesc = assocProp.targetDescriptor();
path = split[1];
@@ -2291,11 +2289,11 @@ public class BeanDescriptor implements BeanType, STreeType, SpiBeanType {
private ElComparator createPropertyComparator(SortByClause.Property sortProp) {
ElPropertyValue elGetValue = elGetValue(sortProp.getName());
if (elGetValue == null) {
- log.error("Sort property [" + sortProp + "] not found in " + beanType + ". Cannot sort.");
+ log.log(ERROR, "Sort property [" + sortProp + "] not found in " + beanType + ". Cannot sort.");
return new ElComparatorNoop<>();
}
if (elGetValue.isAssocMany()) {
- log.error("Sort property [" + sortProp + "] in " + beanType + " is a many-property. Cannot sort.");
+ log.log(ERROR, "Sort property [" + sortProp + "] in " + beanType + " is a many-property. Cannot sort.");
return new ElComparatorNoop<>();
}
Boolean nullsHigh = sortProp.getNullsHigh();
@@ -2771,7 +2769,7 @@ public class BeanDescriptor implements BeanType, STreeType, SpiBeanType {
public void markAsDeleted(EntityBean bean) {
if (softDeleteProperty == null) {
Object id = getId(bean);
- log.info("(Lazy) loading unsuccessful for type:{} id:{} - expecting when bean has been deleted", name(), id);
+ log.log(INFO, "(Lazy) loading unsuccessful for type:{0} id:{1} - expecting when bean has been deleted", name(), id);
bean._ebean_getIntercept().setLazyLoadFailure(id);
} else {
softDeleteValue(bean);
@@ -3159,18 +3157,17 @@ public class BeanDescriptor implements BeanType, STreeType, SpiBeanType {
/**
* Return true if any mutable properties are dirty.
*/
- public boolean checkAnyMutableProperties(EntityBeanIntercept ebi) {
+ public void checkAnyMutableProperties(EntityBeanIntercept ebi) {
for (BeanProperty beanProperty : propertiesMutable) {
int propertyIndex = beanProperty.propertyIndex();
if (ebi.isLoadedProperty(propertyIndex)) {
Object value = beanProperty.getValue(ebi.getOwner());
if (beanProperty.checkMutable(value, ebi.isDirtyProperty(propertyIndex), ebi)) {
ebi.markPropertyAsChanged(propertyIndex);
- return true;
+ return;
}
}
}
- return false;
}
public ConcurrencyMode concurrencyMode(EntityBeanIntercept ebi) {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorCacheHelp.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorCacheHelp.java
index 725a850e2..eba2da8ee 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorCacheHelp.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorCacheHelp.java
@@ -1,5 +1,6 @@
package io.ebeaninternal.server.deploy;
+import io.avaje.applog.AppLog;
import io.ebean.bean.BeanCollection;
import io.ebean.bean.EntityBean;
import io.ebean.bean.EntityBeanIntercept;
@@ -13,12 +14,12 @@ import io.ebeaninternal.server.core.CacheOptions;
import io.ebeaninternal.server.core.PersistRequest;
import io.ebeaninternal.server.core.PersistRequestBean;
import io.ebeaninternal.server.transaction.DefaultPersistenceContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.*;
+import static java.lang.System.Logger.Level.*;
+
/**
* Helper for BeanDescriptor that manages the bean, query and collection caches.
*
@@ -26,12 +27,12 @@ import java.util.*;
*/
final class BeanDescriptorCacheHelp {
- private static final Logger log = CoreLog.internal;
+ private static final System.Logger log = CoreLog.internal;
- private static final Logger queryLog = LoggerFactory.getLogger("io.ebean.cache.QUERY");
- private static final Logger beanLog = LoggerFactory.getLogger("io.ebean.cache.BEAN");
- private static final Logger manyLog = LoggerFactory.getLogger("io.ebean.cache.COLL");
- private static final Logger natLog = LoggerFactory.getLogger("io.ebean.cache.NATKEY");
+ private static final System.Logger queryLog = AppLog.getLogger("io.ebean.cache.QUERY");
+ private static final System.Logger beanLog = AppLog.getLogger("io.ebean.cache.BEAN");
+ private static final System.Logger manyLog = AppLog.getLogger("io.ebean.cache.COLL");
+ private static final System.Logger natLog = AppLog.getLogger("io.ebean.cache.NATKEY");
private final BeanDescriptor desc;
private final SpiCacheManager cacheManager;
@@ -104,10 +105,10 @@ final class BeanDescriptorCacheHelp {
void deriveNotifyFlags() {
cacheNotifyOnAll = (invalidateQueryCache || beanCache != null || queryCache != null);
cacheNotifyOnDelete = !cacheNotifyOnAll && isNotifyOnDeletes();
- if (log.isDebugEnabled()) {
+ if (log.isLoggable(DEBUG)) {
if (cacheNotifyOnAll || cacheNotifyOnDelete) {
String notifyMode = cacheNotifyOnAll ? "All" : "Delete";
- log.debug("l2 caching on {} - beanCaching:{} queryCaching:{} notifyMode:{} ",
+ log.log(DEBUG, "l2 caching on {0} - beanCaching:{1} queryCaching:{2} notifyMode:{3} ",
desc.fullName(), isBeanCaching(), isQueryCaching(), notifyMode);
}
}
@@ -178,8 +179,8 @@ final class BeanDescriptorCacheHelp {
*/
void queryCacheClear() {
if (queryCache != null) {
- if (queryLog.isDebugEnabled()) {
- queryLog.debug(" CLEAR {}", cacheName);
+ if (queryLog.isLoggable(DEBUG)) {
+ queryLog.log(DEBUG, " CLEAR {0}", cacheName);
}
queryCache.clear();
}
@@ -202,11 +203,11 @@ final class BeanDescriptorCacheHelp {
throw new IllegalStateException("No query cache enabled on " + desc + ". Need explicit @Cache(enableQueryCache=true)");
}
Object queryResult = queryCache.get(id);
- if (queryLog.isDebugEnabled()) {
+ if (queryLog.isLoggable(DEBUG)) {
if (queryResult == null) {
- queryLog.debug(" GET {}({}) - cache miss", cacheName, id);
+ queryLog.log(DEBUG, " GET {0}({1}) - cache miss", cacheName, id);
} else {
- queryLog.debug(" GET {}({}) - hit", cacheName, id);
+ queryLog.log(DEBUG, " GET {0}({1}) - hit", cacheName, id);
}
}
return queryResult;
@@ -219,8 +220,8 @@ final class BeanDescriptorCacheHelp {
if (queryCache == null) {
throw new IllegalStateException("No query cache enabled on " + desc + ". Need explicit @Cache(enableQueryCache=true)");
}
- if (queryLog.isDebugEnabled()) {
- queryLog.debug(" PUT {}({})", cacheName, id);
+ if (queryLog.isLoggable(DEBUG)) {
+ queryLog.log(DEBUG, " PUT {0}({1})", cacheName, id);
}
queryCache.put(id, entry);
}
@@ -228,16 +229,16 @@ final class BeanDescriptorCacheHelp {
void manyPropRemove(String propertyName, Object parentId) {
ServerCache collectionIdsCache = cacheManager.getCollectionIdsCache(beanType, propertyName);
- if (manyLog.isTraceEnabled()) {
- manyLog.trace(" REMOVE {}({}).{}", cacheName, parentId, propertyName);
+ if (manyLog.isLoggable(TRACE)) {
+ manyLog.log(TRACE, " REMOVE {0}({1}).{2}", cacheName, parentId, propertyName);
}
collectionIdsCache.remove(parentId);
}
void manyPropClear(String propertyName) {
ServerCache collectionIdsCache = cacheManager.getCollectionIdsCache(beanType, propertyName);
- if (manyLog.isDebugEnabled()) {
- manyLog.debug(" CLEAR {}(*).{} ", cacheName, propertyName);
+ if (manyLog.isLoggable(DEBUG)) {
+ manyLog.log(DEBUG, " CLEAR {0}(*).{1} ", cacheName, propertyName);
}
collectionIdsCache.clear();
}
@@ -249,11 +250,11 @@ final class BeanDescriptorCacheHelp {
ServerCache collectionIdsCache = cacheManager.getCollectionIdsCache(beanType, propertyName);
CachedManyIds entry = (CachedManyIds) collectionIdsCache.get(parentId);
if (entry == null) {
- if (manyLog.isTraceEnabled()) {
- manyLog.trace(" GET {}({}).{} - cache miss", cacheName, parentId, propertyName);
+ if (manyLog.isLoggable(TRACE)) {
+ manyLog.log(TRACE, " GET {0}({1}).{2} - cache miss", cacheName, parentId, propertyName);
}
- } else if (manyLog.isDebugEnabled()) {
- manyLog.debug(" GET {}({}).{} - hit", cacheName, parentId, propertyName);
+ } else if (manyLog.isLoggable(DEBUG)) {
+ manyLog.log(DEBUG, " GET {0}({1}).{2} - hit", cacheName, parentId, propertyName);
}
return entry;
}
@@ -303,12 +304,12 @@ final class BeanDescriptorCacheHelp {
changes.put(many.name(), asJson);
CachedBeanData newData = data.update(changes, data.getVersion());
- if (beanLog.isDebugEnabled()) {
- beanLog.debug(" UPDATE {}({}) changes:{}", cacheName, parentId, changes);
+ if (beanLog.isLoggable(DEBUG)) {
+ beanLog.log(DEBUG, " UPDATE {0}({1}) changes:{2}", cacheName, parentId, changes);
}
beanCache.put(parentId, newData);
} catch (IOException e) {
- log.error("Error updating L2 cache", e);
+ log.log(ERROR, "Error updating L2 cache", e);
}
}
} else {
@@ -321,8 +322,8 @@ final class BeanDescriptorCacheHelp {
void cachePutManyIds(Object parentId, String manyName, CachedManyIds entry) {
ServerCache collectionIdsCache = cacheManager.getCollectionIdsCache(beanType, manyName);
- if (manyLog.isDebugEnabled()) {
- manyLog.debug(" PUT {}({}).{} - ids:{}", cacheName, parentId, manyName, entry);
+ if (manyLog.isLoggable(DEBUG)) {
+ manyLog.log(DEBUG, " PUT {0}({1}).{2} - ids:{3}", cacheName, parentId, manyName, entry);
}
collectionIdsCache.put(parentId, entry);
}
@@ -353,8 +354,8 @@ final class BeanDescriptorCacheHelp {
return new BeanCacheResult<>();
}
Map beanDataMap = beanCache.getAll(keys);
- if (beanLog.isTraceEnabled()) {
- beanLog.trace(" MGET {}({}) - hits:{}", cacheName, ids, beanDataMap.keySet());
+ if (beanLog.isLoggable(TRACE)) {
+ beanLog.log(TRACE, " MGET {0}({1}) - hits:{2}", cacheName, ids, beanDataMap.keySet());
}
BeanCacheResult result = new BeanCacheResult<>();
for (Map.Entry entry : beanDataMap.entrySet()) {
@@ -375,8 +376,8 @@ final class BeanDescriptorCacheHelp {
// naturalKey -> Id map
Map naturalKeyMap = naturalKeyCache.getAll(keys);
- if (natLog.isTraceEnabled()) {
- natLog.trace(" MLOOKUP {}({}) - hits:{}", cacheName, keys, naturalKeyMap);
+ if (natLog.isLoggable(TRACE)) {
+ natLog.log(TRACE, " MLOOKUP {0}({1}) - hits:{2}", cacheName, keys, naturalKeyMap);
}
BeanCacheResult result = new BeanCacheResult<>();
@@ -392,8 +393,8 @@ final class BeanDescriptorCacheHelp {
Set ids = new HashSet<>(naturalKeyMap.values());
Map beanDataMap = beanCache.getAll(ids);
- if (beanLog.isTraceEnabled()) {
- beanLog.trace(" MGET {}({}) - hits:{}", cacheName, ids, beanDataMap.keySet());
+ if (beanLog.isLoggable(TRACE)) {
+ beanLog.log(TRACE, " MGET {0}({1}) - hits:{2}", cacheName, ids, beanDataMap.keySet());
}
// process the hits into beans etc
for (Map.Entry entry : beanDataMap.entrySet()) {
@@ -437,8 +438,8 @@ final class BeanDescriptorCacheHelp {
*/
void beanCacheClear() {
if (beanCache != null) {
- if (beanLog.isDebugEnabled()) {
- beanLog.debug(" CLEAR {}", cacheName);
+ if (beanLog.isLoggable(DEBUG)) {
+ beanLog.log(DEBUG, " CLEAR {0}", cacheName);
}
beanCache.clear();
}
@@ -507,14 +508,14 @@ final class BeanDescriptorCacheHelp {
}
}
}
- if (beanLog.isDebugEnabled()) {
- beanLog.debug(" MPUT {}({})", cacheName, map.keySet());
+ if (beanLog.isLoggable(DEBUG)) {
+ beanLog.log(DEBUG, " MPUT {0}({1})", cacheName, map.keySet());
}
getBeanCache().putAll(map);
if (natKeys != null && !natKeys.isEmpty()) {
- if (natLog.isDebugEnabled()) {
- natLog.debug(" MPUT {}({}, {})", cacheName, naturalKey, natKeys.keySet());
+ if (natLog.isLoggable(DEBUG)) {
+ natLog.log(DEBUG, " MPUT {0}({1}, {2})", cacheName, naturalKey, natKeys.keySet());
}
naturalKeyCache.putAll(natKeys);
}
@@ -526,15 +527,15 @@ final class BeanDescriptorCacheHelp {
void beanCachePutDirect(EntityBean bean) {
CachedBeanData beanData = beanExtractData(desc, bean);
String key = desc.cacheKeyForBean(bean);
- if (beanLog.isDebugEnabled()) {
- beanLog.debug(" PUT {}({}) data:{}", cacheName, key, beanData);
+ if (beanLog.isLoggable(DEBUG)) {
+ beanLog.log(DEBUG, " PUT {0}({1}) data:{2}", cacheName, key, beanData);
}
getBeanCache().put(key, beanData);
if (naturalKey != null) {
String naturalKey = calculateNaturalKey(beanData);
if (naturalKey != null) {
- if (natLog.isDebugEnabled()) {
- natLog.debug(" PUT {}({}, {})", cacheName, naturalKey, key);
+ if (natLog.isLoggable(DEBUG)) {
+ natLog.log(DEBUG, " PUT {0}({1}, {2})", cacheName, naturalKey, key);
}
naturalKeyCache.put(naturalKey, key);
}
@@ -575,13 +576,13 @@ final class BeanDescriptorCacheHelp {
private T beanCacheGetInternal(String key, Boolean readOnly, PersistenceContext context) {
CachedBeanData data = (CachedBeanData) getBeanCache().get(key);
if (data == null) {
- if (beanLog.isTraceEnabled()) {
- beanLog.trace(" GET {}({}) - cache miss", cacheName, key);
+ if (beanLog.isLoggable(TRACE)) {
+ beanLog.log(TRACE, " GET {0}({1}) - cache miss", cacheName, key);
}
return null;
}
- if (beanLog.isTraceEnabled()) {
- beanLog.trace(" GET {}({}) - hit", cacheName, key);
+ if (beanLog.isLoggable(TRACE)) {
+ beanLog.log(TRACE, " GET {0}({1}) - hit", cacheName, key);
}
return convertToBean(key, readOnly, context, data);
}
@@ -591,8 +592,8 @@ final class BeanDescriptorCacheHelp {
if (cacheSharableBeans && !Boolean.FALSE.equals(readOnly)) {
Object bean = data.getSharableBean();
if (bean != null) {
- if (beanLog.isTraceEnabled()) {
- beanLog.trace(" GET {}({}) - hit shared bean", cacheName, id);
+ if (beanLog.isLoggable(TRACE)) {
+ beanLog.log(TRACE, " GET {0}({1}) - hit shared bean", cacheName, id);
}
if (desc.isReadAuditing()) {
desc.readAuditBean("l2", "", bean);
@@ -680,8 +681,8 @@ final class BeanDescriptorCacheHelp {
*/
void beanCacheApplyInvalidate(Collection keys) {
if (beanCache != null) {
- if (beanLog.isDebugEnabled()) {
- beanLog.debug(" MREMOVE {}({})", cacheName, keys);
+ if (beanLog.isLoggable(DEBUG)) {
+ beanLog.log(DEBUG, " MREMOVE {0}({1})", cacheName, keys);
}
beanCache.removeAll(new HashSet<>(keys));
}
@@ -700,32 +701,30 @@ final class BeanDescriptorCacheHelp {
}
Map hits = getBeanCache().getAll(ebis.keySet());
- if (beanLog.isTraceEnabled()) {
- beanLog.trace(" MLOAD {}({}) - got hits ({})", cacheName, ebis.keySet(), hits.size());
+ if (beanLog.isLoggable(TRACE)) {
+ beanLog.log(TRACE, " MLOAD {0}({1}) - got hits ({2})", cacheName, ebis.keySet(), hits.size());
}
Set loaded = new HashSet<>();
- Iterator> iterator = hits.entrySet().iterator();
- while (iterator.hasNext()) {
- Map.Entry hit = iterator.next();
+ for (Map.Entry hit : hits.entrySet()) {
Object key = hit.getKey();
EntityBeanIntercept ebi = ebis.remove(key);
CachedBeanData cacheData = (CachedBeanData) hit.getValue();
if (lazyLoadProperty > -1 && !cacheData.isLoaded(propertyName)) {
- if (beanLog.isTraceEnabled()) {
- beanLog.trace(" load {}({}) - cache miss on property({})", cacheName, key, propertyName);
+ if (beanLog.isLoggable(TRACE)) {
+ beanLog.log(TRACE, " load {0}({1}) - cache miss on property({2})", cacheName, key, propertyName);
}
} else {
CachedBeanDataToBean.load(desc, ebi.getOwner(), cacheData, context);
loaded.add(ebi);
- if (beanLog.isDebugEnabled()) {
- beanLog.debug(" load {}({}) - hit", cacheName, key);
+ if (beanLog.isLoggable(DEBUG)) {
+ beanLog.log(DEBUG, " load {0}({1}) - hit", cacheName, key);
}
}
}
- if (!ebis.isEmpty() && beanLog.isTraceEnabled()) {
- beanLog.trace(" load {}({}) - cache miss", cacheName, ebis.keySet());
+ if (!ebis.isEmpty() && beanLog.isLoggable(TRACE)) {
+ beanLog.log(TRACE, " load {0}({1}) - cache miss", cacheName, ebis.keySet());
}
return loaded;
}
@@ -736,21 +735,21 @@ final class BeanDescriptorCacheHelp {
boolean beanCacheLoad(EntityBean bean, EntityBeanIntercept ebi, String key, PersistenceContext context) {
CachedBeanData cacheData = (CachedBeanData) getBeanCache().get(key);
if (cacheData == null) {
- if (beanLog.isTraceEnabled()) {
- beanLog.trace(" LOAD {}({}) - cache miss", cacheName, key);
+ if (beanLog.isLoggable(TRACE)) {
+ beanLog.log(TRACE, " LOAD {0}({1}) - cache miss", cacheName, key);
}
return false;
}
int lazyLoadProperty = ebi.getLazyLoadPropertyIndex();
if (lazyLoadProperty > -1 && !cacheData.isLoaded(ebi.getLazyLoadProperty())) {
- if (beanLog.isTraceEnabled()) {
- beanLog.trace(" LOAD {}({}) - cache miss on property({})", cacheName, key, ebi.getLazyLoadProperty());
+ if (beanLog.isLoggable(TRACE)) {
+ beanLog.log(TRACE, " LOAD {0}({1}) - cache miss on property({2})", cacheName, key, ebi.getLazyLoadProperty());
}
return false;
}
CachedBeanDataToBean.load(desc, bean, cacheData, context);
- if (beanLog.isDebugEnabled()) {
- beanLog.debug(" LOAD {}({}) - hit", cacheName, key);
+ if (beanLog.isLoggable(DEBUG)) {
+ beanLog.log(DEBUG, " LOAD {0}({1}) - hit", cacheName, key);
}
return true;
}
@@ -874,8 +873,8 @@ final class BeanDescriptorCacheHelp {
if (existingData != null) {
long currentVersion = existingData.getVersion();
if (version > 0 && version < currentVersion) {
- if (beanLog.isDebugEnabled()) {
- beanLog.debug(" REMOVE {}({}) - version conflict old:{} new:{}", cacheName, key, currentVersion, version);
+ if (beanLog.isLoggable(DEBUG)) {
+ beanLog.log(DEBUG, " REMOVE {0}({1}) - version conflict old:{2} new:{3}", cacheName, key, currentVersion, version);
}
cache.remove(key);
} else {
@@ -883,16 +882,16 @@ final class BeanDescriptorCacheHelp {
version = currentVersion;
}
CachedBeanData newData = existingData.update(changes, version);
- if (beanLog.isDebugEnabled()) {
- beanLog.debug(" UPDATE {}({}) changes:{}", cacheName, key, changes);
+ if (beanLog.isLoggable(DEBUG)) {
+ beanLog.log(DEBUG, " UPDATE {0}({1}) changes:{2}", cacheName, key, changes);
}
cache.put(key, newData);
}
if (updateNaturalKey) {
Object oldKey = calculateNaturalKey(existingData);
if (oldKey != null) {
- if (natLog.isDebugEnabled()) {
- natLog.debug(".. update {} REMOVE({}) - old key for ({})", cacheName, oldKey, key);
+ if (natLog.isLoggable(DEBUG)) {
+ natLog.log(DEBUG, ".. update {0} REMOVE({1}) - old key for ({2})", cacheName, oldKey, key);
}
naturalKeyCache.remove(oldKey);
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorElementEmbeddedMap.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorElementEmbeddedMap.java
index 664e40da9..ecb283e5c 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorElementEmbeddedMap.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorElementEmbeddedMap.java
@@ -23,7 +23,7 @@ class BeanDescriptorElementEmbeddedMap extends BeanDescriptorElementEmbedded<
BeanDescriptorElementEmbeddedMap(BeanDescriptorMap owner, DeployBeanDescriptor deploy, ElementHelp elementHelp) {
super(owner, deploy, elementHelp);
this.scalarTypeKey = firstBaseScalarType();
- this.stringKey = String.class.equals(scalarTypeKey.getType());
+ this.stringKey = String.class.equals(scalarTypeKey.type());
}
@Override
@@ -49,7 +49,7 @@ class BeanDescriptorElementEmbeddedMap extends BeanDescriptorElementEmbedded<
@Override
public Object jsonReadCollection(SpiJsonReader readJson, EntityBean parentBean) throws IOException {
- JsonParser parser = readJson.getParser();
+ JsonParser parser = readJson.parser();
ElementCollector add = elementHelp.createCollector();
do {
String fieldName = parser.nextFieldName();
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorElementScalar.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorElementScalar.java
index 13833eb77..0242c993f 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorElementScalar.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorElementScalar.java
@@ -40,7 +40,7 @@ class BeanDescriptorElementScalar extends BeanDescriptorElement {
@Override
public Object jsonReadCollection(SpiJsonReader readJson, EntityBean parentBean) throws IOException {
- JsonParser parser = readJson.getParser();
+ JsonParser parser = readJson.parser();
ElementCollector add = elementHelp.createCollector();
do {
JsonToken token = parser.nextToken();
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorElementScalarMap.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorElementScalarMap.java
index d9f6b4b25..d5b8d91a9 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorElementScalarMap.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorElementScalarMap.java
@@ -28,7 +28,7 @@ class BeanDescriptorElementScalarMap extends BeanDescriptorElement {
}
this.scalarTypeKey = props[0].scalarType();
this.scalarTypeVal = props[1].scalarType();
- this.stringKey = String.class.equals(scalarTypeKey.getType());
+ this.stringKey = String.class.equals(scalarTypeKey.type());
}
@Override
@@ -49,7 +49,7 @@ class BeanDescriptorElementScalarMap extends BeanDescriptorElement {
@Override
public Object jsonReadCollection(SpiJsonReader readJson, EntityBean parentBean) throws IOException {
- JsonParser parser = readJson.getParser();
+ JsonParser parser = readJson.parser();
ElementCollector add = elementHelp.createCollector();
do {
String fieldName = parser.nextFieldName();
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorJsonHelp.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorJsonHelp.java
index f20db7315..0e323114b 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorJsonHelp.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorJsonHelp.java
@@ -66,7 +66,7 @@ final class BeanDescriptorJsonHelp {
@SuppressWarnings("unchecked")
T jsonRead(SpiJsonReader jsonRead, String path, boolean withInheritance, T target) throws IOException {
- JsonParser parser = jsonRead.getParser();
+ JsonParser parser = jsonRead.parser();
//noinspection StatementWithEmptyBody
if (parser.getCurrentToken() == JsonToken.START_OBJECT) {
// start object token read by Jackson already
@@ -85,7 +85,7 @@ final class BeanDescriptorJsonHelp {
return jsonReadObject(jsonRead, path, target);
}
- ObjectNode node = jsonRead.getObjectMapper().readTree(parser);
+ ObjectNode node = jsonRead.mapper().readTree(parser);
if (node.isNull()) {
return null;
}
@@ -127,7 +127,7 @@ final class BeanDescriptorJsonHelp {
// unmapped properties, send to JsonReadBeanVisitor later
Map unmappedProperties = null;
do {
- JsonParser parser = readJson.getParser();
+ JsonParser parser = readJson.parser();
JsonToken event = parser.nextToken();
if (JsonToken.FIELD_NAME == event) {
String key = parser.getCurrentName();
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorManager.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorManager.java
index 82f29361c..5f2792f6c 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorManager.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorManager.java
@@ -41,7 +41,6 @@ import io.ebeaninternal.xmapping.api.XmapNamedQuery;
import io.ebeaninternal.xmapping.api.XmapRawSql;
import io.ebeanservice.docstore.api.DocStoreBeanAdapter;
import io.ebeanservice.docstore.api.DocStoreFactory;
-import org.slf4j.Logger;
import javax.persistence.MappedSuperclass;
import javax.persistence.PersistenceException;
@@ -53,12 +52,14 @@ import java.lang.reflect.Modifier;
import java.util.*;
import java.util.concurrent.TimeUnit;
+import static java.lang.System.Logger.Level.*;
+
/**
* Creates BeanDescriptors.
*/
public final class BeanDescriptorManager implements BeanDescriptorMap, SpiBeanTypeManager {
- private static final Logger log = CoreLog.internal;
+ private static final System.Logger log = CoreLog.internal;
private static final BeanDescComparator beanDescComparator = new BeanDescComparator();
public static final String JAVA_LANG_RECORD = "java.lang.Record";
@@ -133,7 +134,7 @@ public final class BeanDescriptorManager implements BeanDescriptorMap, SpiBeanTy
this.encryptKeyManager = this.config.getEncryptKeyManager();
this.databasePlatform = this.config.getDatabasePlatform();
this.multiValueBind = config.getMultiValueBind();
- this.idBinderFactory = new IdBinderFactory(databasePlatform.isIdInExpandedForm(), multiValueBind);
+ this.idBinderFactory = new IdBinderFactory(databasePlatform.idInExpandedForm(), multiValueBind);
this.queryPlanTTLSeconds = this.config.getQueryPlanTTLSeconds();
this.asOfViewSuffix = asOfViewSuffix(databasePlatform, this.config);
String versionsBetweenSuffix = versionsBetweenSuffix(databasePlatform, this.config);
@@ -141,10 +142,10 @@ public final class BeanDescriptorManager implements BeanDescriptorMap, SpiBeanTy
this.bootupClasses = config.getBootupClasses();
this.createProperties = config.getDeployCreateProperties();
this.namingConvention = this.config.getNamingConvention();
- this.dbIdentity = config.getDatabasePlatform().getDbIdentity();
+ this.dbIdentity = config.getDatabasePlatform().dbIdentity();
this.deplyInherit = config.getDeployInherit();
this.deployUtil = config.getDeployUtil();
- this.typeManager = deployUtil.getTypeManager();
+ this.typeManager = deployUtil.typeManager();
this.beanManagerFactory = new BeanManagerFactory(config.getDatabasePlatform());
this.beanLifecycleAdapterFactory = new BeanLifecycleAdapterFactory(this.config);
this.persistControllerManager = new PersistControllerManager(bootupClasses);
@@ -183,19 +184,19 @@ public final class BeanDescriptorManager implements BeanDescriptorMap, SpiBeanTy
@Override
public ScalarType> scalarType(String cast) {
- return typeManager.getScalarType(cast);
+ return typeManager.type(cast);
}
@Override
public ScalarType> scalarType(int jdbcType) {
- return typeManager.getScalarType(jdbcType);
+ return typeManager.type(jdbcType);
}
/**
* Return the AsOfViewSuffix based on the DbHistorySupport.
*/
private String asOfViewSuffix(DatabasePlatform databasePlatform, DatabaseConfig serverConfig) {
- DbHistorySupport historySupport = databasePlatform.getHistorySupport();
+ DbHistorySupport historySupport = databasePlatform.historySupport();
// with historySupport returns a simple view suffix or the sql2011 as of timestamp suffix
return (historySupport == null) ? serverConfig.getAsOfViewSuffix() : historySupport.getAsOfViewSuffix(serverConfig.getAsOfViewSuffix());
}
@@ -204,7 +205,7 @@ public final class BeanDescriptorManager implements BeanDescriptorMap, SpiBeanTy
* Return the versions between timestamp suffix based on the DbHistorySupport.
*/
private String versionsBetweenSuffix(DatabasePlatform databasePlatform, DatabaseConfig serverConfig) {
- DbHistorySupport historySupport = databasePlatform.getHistorySupport();
+ DbHistorySupport historySupport = databasePlatform.historySupport();
// with historySupport returns a simple view suffix or the sql2011 versions between timestamp suffix
return (historySupport == null) ? serverConfig.getAsOfViewSuffix() : historySupport.getVersionsBetweenSuffix(serverConfig.getAsOfViewSuffix());
}
@@ -309,7 +310,7 @@ public final class BeanDescriptorManager implements BeanDescriptorMap, SpiBeanTy
} catch (BeanNotEnhancedException e) {
throw e;
} catch (RuntimeException e) {
- log.error("Error in deployment", e);
+ log.log(ERROR, "Error in deployment", e);
throw e;
}
}
@@ -332,13 +333,13 @@ public final class BeanDescriptorManager implements BeanDescriptorMap, SpiBeanTy
try {
entityClass = Class.forName(entityClassName, false, classLoader);
} catch (Exception e) {
- log.error("Could not load entity bean class " + entityClassName + " for ebean.xml entry");
+ log.log(ERROR, "Could not load entity bean class " + entityClassName + " for ebean.xml entry");
return;
}
DeployBeanInfo> info = deployInfoMap.get(entityClass);
if (info == null) {
- log.error("No entity bean for ebean.xml entry " + entityClassName);
+ log.log(ERROR, "No entity bean for ebean.xml entry " + entityClassName);
} else {
for (XmapRawSql sql : entityDeploy.getRawSql()) {
@@ -601,11 +602,11 @@ public final class BeanDescriptorManager implements BeanDescriptorMap, SpiBeanTy
int pc = postConstructManager.getRegisterCount();
int lc = persistListenerManager.getRegisterCount();
int fc = beanFinderManager.getRegisterCount();
- log.debug("BeanPersistControllers[{}] BeanFinders[{}] BeanPersistListeners[{}] BeanQueryAdapters[{}] BeanPostLoaders[{}] BeanPostConstructors[{}]", cc, fc, lc, qa, pl, pc);
+ log.log(DEBUG, "BeanPersistControllers[{0}] BeanFinders[{1}] BeanPersistListeners[{2}] BeanQueryAdapters[{3}] BeanPostLoaders[{4}] BeanPostConstructors[{5}]", cc, fc, lc, qa, pl, pc);
}
private void logStatus() {
- log.debug("Entities[{}]", entityBeanCount);
+ log.log(DEBUG, "Entities[{0}]", entityBeanCount);
}
/**
@@ -865,13 +866,8 @@ public final class BeanDescriptorManager implements BeanDescriptorMap, SpiBeanTy
for (String possibleMappedBy : matchSet) {
String possibleLower = possibleMappedBy.toLowerCase();
if (possibleLower.contains(searchName)) {
- // we have a match..
+ // we have a match
prop.setMappedBy(possibleMappedBy);
-
- String m = "Implicitly found mappedBy for " + targetDesc + "." + prop;
- m += " by searching for [" + searchName + "] against " + matchSet;
- log.debug(m);
-
return true;
}
}
@@ -888,7 +884,7 @@ public final class BeanDescriptorManager implements BeanDescriptorMap, SpiBeanTy
private void makeOrderColumn(DeployBeanPropertyAssocMany> oneToMany) {
DeployBeanDescriptor> targetDesc = targetDescriptor(oneToMany);
DeployOrderColumn orderColumn = oneToMany.getOrderColumn();
- final ScalarType> scalarType = typeManager.getScalarType(Integer.class);
+ final ScalarType> scalarType = typeManager.type(Integer.class);
DeployBeanProperty orderProperty = new DeployBeanProperty(targetDesc, Integer.class, scalarType, null);
orderProperty.setName(DeployOrderColumn.LOGICAL_NAME);
orderProperty.setDbColumn(orderColumn.getName());
@@ -987,14 +983,14 @@ public final class BeanDescriptorManager implements BeanDescriptorMap, SpiBeanTy
private DeployBeanPropertyAssocOne> mappedOneToOne(DeployBeanPropertyAssocOne> prop, String mappedBy, DeployBeanDescriptor> targetDesc) {
DeployBeanProperty mappedProp = targetDesc.getBeanProperty(mappedBy);
if (mappedProp == null) {
- throw new PersistenceException("Error on " + prop.getFullBeanName() + " Can not find mappedBy property [" + targetDesc + "." + mappedBy + "]");
+ throw new PersistenceException("Error on " + prop.getFullBeanName() + " Can not find mappedBy property " + targetDesc + "." + mappedBy);
}
if (!(mappedProp instanceof DeployBeanPropertyAssocOne>)) {
- throw new PersistenceException("Error on " + prop.getFullBeanName() + ". mappedBy property [" + targetDesc + "." + mappedBy + "]is not a OneToOne?");
+ throw new PersistenceException("Error on " + prop.getFullBeanName() + ". mappedBy property " + targetDesc + "." + mappedBy + " is not a OneToOne?");
}
DeployBeanPropertyAssocOne> mappedAssocOne = (DeployBeanPropertyAssocOne>) mappedProp;
if (!mappedAssocOne.isOneToOne()) {
- throw new PersistenceException("Error on " + prop.getFullBeanName() + ". mappedBy property [" + targetDesc + "." + mappedBy + "]is not a OneToOne?");
+ throw new PersistenceException("Error on " + prop.getFullBeanName() + ". mappedBy property " + targetDesc + "." + mappedBy + " is not a OneToOne?");
}
return mappedAssocOne;
}
@@ -1077,10 +1073,10 @@ public final class BeanDescriptorManager implements BeanDescriptorMap, SpiBeanTy
private DeployBeanPropertyAssocOne> mappedManyToOne(DeployBeanPropertyAssocMany> prop, DeployBeanDescriptor> targetDesc, String mappedBy) {
DeployBeanProperty mappedProp = targetDesc.getBeanProperty(mappedBy);
if (mappedProp == null) {
- throw new PersistenceException("Error on " + prop.getFullBeanName() + " Can not find mappedBy property [" + mappedBy + "] " + "in [" + targetDesc + "]");
+ throw new PersistenceException("Error on " + prop.getFullBeanName() + " Can not find mappedBy property " + mappedBy + " in " + targetDesc);
}
if (!(mappedProp instanceof DeployBeanPropertyAssocOne>)) {
- throw new PersistenceException("Error on " + prop.getFullBeanName() + ". mappedBy property [" + mappedBy + "]is not a ManyToOne?" + "in [" + targetDesc + "]");
+ throw new PersistenceException("Error on " + prop.getFullBeanName() + ". mappedBy property " + mappedBy + " is not a ManyToOne? in " + targetDesc);
}
return (DeployBeanPropertyAssocOne>) mappedProp;
}
@@ -1128,15 +1124,15 @@ public final class BeanDescriptorManager implements BeanDescriptorMap, SpiBeanTy
private DeployBeanPropertyAssocMany> mappedManyToMany(DeployBeanPropertyAssocMany> prop, String mappedBy, DeployBeanDescriptor> targetDesc) {
DeployBeanProperty mappedProp = targetDesc.getBeanProperty(mappedBy);
if (mappedProp == null) {
- throw new PersistenceException("Error on " + prop.getFullBeanName() + " Can not find mappedBy property [" + mappedBy + "] " + "in [" + targetDesc + "]");
+ throw new PersistenceException("Error on " + prop.getFullBeanName() + " Can not find mappedBy property " + mappedBy + " in " + targetDesc);
}
if (!(mappedProp instanceof DeployBeanPropertyAssocMany>)) {
- throw new PersistenceException("Error on " + prop.getFullBeanName() + ". mappedBy property [" + targetDesc + "." + mappedBy + "] is not a ManyToMany?");
+ throw new PersistenceException("Error on " + prop.getFullBeanName() + ". mappedBy property " + targetDesc + "." + mappedBy + " is not a ManyToMany?");
}
DeployBeanPropertyAssocMany> mappedAssocMany = (DeployBeanPropertyAssocMany>) mappedProp;
if (!mappedAssocMany.isManyToMany()) {
- throw new PersistenceException("Error on " + prop.getFullBeanName() + ". mappedBy property [" + targetDesc + "." + mappedBy + "] is not a ManyToMany?");
+ throw new PersistenceException("Error on " + prop.getFullBeanName() + ". mappedBy property " + targetDesc + "." + mappedBy + " is not a ManyToMany?");
}
return mappedAssocMany;
}
@@ -1207,12 +1203,12 @@ public final class BeanDescriptorManager implements BeanDescriptorMap, SpiBeanTy
final DeployIdentityMode identityMode = desc.getIdentityMode();
if (identityMode.isSequence() && !dbIdentity.isSupportsSequence()) {
// explicit sequence but not supported by the DatabasePlatform
- log.info("Explicit sequence on " + desc.getFullName() + " but not supported by DB Platform - ignored");
+ log.log(INFO, "Explicit sequence on {0} but not supported by DB Platform - ignored", desc.getFullName());
identityMode.setIdType(IdType.AUTO);
}
if (identityMode.isIdentity() && !dbIdentity.isSupportsIdentity()) {
// explicit identity but not supported by the DatabasePlatform
- log.info("Explicit Identity on " + desc.getFullName() + " but not supported by DB Platform - ignored");
+ log.log(INFO, "Explicit Identity on {0} but not supported by DB Platform - ignored", desc.getFullName());
identityMode.setIdType(IdType.AUTO);
}
@@ -1250,7 +1246,7 @@ public final class BeanDescriptorManager implements BeanDescriptorMap, SpiBeanTy
String primaryKeyColumn = desc.getSinglePrimaryKeyColumn();
seqName = namingConvention.getSequenceName(desc.getBaseTable(), primaryKeyColumn);
}
- int stepSize = desc.setIdentitySequenceBatchMode(databasePlatform.isSequenceBatchMode());
+ int stepSize = desc.setIdentitySequenceBatchMode(databasePlatform.sequenceBatchMode());
desc.setIdGenerator(createSequenceIdGenerator(seqName, stepSize));
}
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanFinderManager.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanFinderManager.java
index ecb99e8b1..5bcf1883f 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanFinderManager.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanFinderManager.java
@@ -4,16 +4,17 @@ import io.ebean.event.BeanFindController;
import io.ebeaninternal.api.CoreLog;
import io.ebeaninternal.server.core.bootup.BootupClasses;
import io.ebeaninternal.server.deploy.meta.DeployBeanDescriptor;
-import org.slf4j.Logger;
import java.util.List;
+import static java.lang.System.Logger.Level.DEBUG;
+
/**
* Default implementation for BeanFinderFactory.
*/
final class BeanFinderManager {
- private static final Logger log = CoreLog.internal;
+ private static final System.Logger log = CoreLog.internal;
private final List list;
@@ -31,7 +32,7 @@ final class BeanFinderManager {
void addFindControllers(DeployBeanDescriptor> deployDesc) {
for (BeanFindController c : list) {
if (c.isRegisterFor(deployDesc.getBeanType())) {
- log.debug("BeanFindController on[{}] {}", deployDesc.getFullName(), c.getClass().getName());
+ log.log(DEBUG, "BeanFindController on[{0}] {1}", deployDesc.getFullName(), c.getClass().getName());
deployDesc.setBeanFinder(c);
}
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanFkeyProperty.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanFkeyProperty.java
index bd479b08d..01cd82de6 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanFkeyProperty.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanFkeyProperty.java
@@ -180,11 +180,6 @@ public final class BeanFkeyProperty implements ElPropertyValue {
return prefix;
}
- @Override
- public boolean isDateTimeCapable() {
- return false;
- }
-
@Override
public int jdbcType() {
return 0;
@@ -195,11 +190,6 @@ public final class BeanFkeyProperty implements ElPropertyValue {
return null;
}
- @Override
- public Object parseDateTime(long systemTimeMillis) {
- throw new RuntimeException("ElPropertyDeploy only - not implemented");
- }
-
@Override
public StringParser stringParser() {
throw new RuntimeException("ElPropertyDeploy only - not implemented");
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanProperty.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanProperty.java
index 243db22ac..8c1b208df 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanProperty.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanProperty.java
@@ -22,6 +22,7 @@ import io.ebeaninternal.api.json.SpiJsonReader;
import io.ebeaninternal.api.json.SpiJsonWriter;
import io.ebeaninternal.server.core.EncryptAlias;
import io.ebeaninternal.server.core.InternString;
+import io.ebeaninternal.server.bind.DataBind;
import io.ebeaninternal.server.deploy.generatedproperty.GeneratedProperty;
import io.ebeaninternal.server.deploy.generatedproperty.GeneratedWhenCreated;
import io.ebeaninternal.server.deploy.generatedproperty.GeneratedWhenModified;
@@ -51,6 +52,8 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
+import static java.lang.System.Logger.Level.ERROR;
+
/**
* Description of a property of a bean. Includes its deployment information such
* as database column mapping information.
@@ -414,7 +417,7 @@ public class BeanProperty implements ElPropertyValue, Property, STreeProperty {
* Return true if the underlying type is mutable.
*/
public boolean isMutableScalarType() {
- return scalarType != null && scalarType.isMutable();
+ return scalarType != null && scalarType.mutable();
}
/**
@@ -455,7 +458,7 @@ public class BeanProperty implements ElPropertyValue, Property, STreeProperty {
if (formula && sqlFormulaJoin != null) {
ctx.appendFormulaJoin(sqlFormulaJoin, joinType, manyWhere);
} else if (secondaryTableJoin != null) {
- String relativePrefix = ctx.getRelativePrefix(secondaryTableJoinPrefix);
+ String relativePrefix = ctx.relativePrefix(secondaryTableJoinPrefix);
secondaryTableJoin.addJoin(joinType, relativePrefix, ctx);
}
}
@@ -481,7 +484,7 @@ public class BeanProperty implements ElPropertyValue, Property, STreeProperty {
ctx.appendFormulaSelect(sqlFormulaSelect);
} else if (!isTransient && !ignoreDraftOnlyProperty(ctx.isDraftQuery())) {
if (secondaryTableJoin != null) {
- ctx.pushTableAlias(ctx.getRelativePrefix(secondaryTableJoinPrefix));
+ ctx.pushTableAlias(ctx.relativePrefix(secondaryTableJoinPrefix));
}
if (dbEncrypted) {
ctx.appendRawColumn(decryptSqlWithColumnAlias(ctx.peekTableAlias()));
@@ -506,7 +509,7 @@ public class BeanProperty implements ElPropertyValue, Property, STreeProperty {
@Override
public void loadIgnore(DbReadContext ctx) {
- scalarType.loadIgnore(ctx.getDataReader());
+ ctx.dataReader().incrementPos(1);
}
@Override
@@ -541,11 +544,11 @@ public class BeanProperty implements ElPropertyValue, Property, STreeProperty {
}
public Object read(DbReadContext ctx) throws SQLException {
- return scalarType.read(ctx.getDataReader());
+ return scalarType.read(ctx.dataReader());
}
public Object readSet(DbReadContext ctx, EntityBean bean) throws SQLException {
- return readSet(ctx.getDataReader(), bean);
+ return readSet(ctx.dataReader(), bean);
}
@SuppressWarnings("unchecked")
@@ -701,7 +704,7 @@ public class BeanProperty implements ElPropertyValue, Property, STreeProperty {
}
private Object cacheDataConvert(Object value) {
- if (value == null || scalarType.isBinaryType()) {
+ if (value == null || scalarType.binary()) {
return value;
} else {
// convert to string as an optimisation for java object serialisation
@@ -924,6 +927,10 @@ public class BeanProperty implements ElPropertyValue, Property, STreeProperty {
return alreadyDirty || value != null && scalarType.isDirty(value);
}
+ public boolean isArrayType() {
+ return scalarType instanceof ScalarTypeArray;
+ }
+
/**
* Return the scalarType.
*/
@@ -938,19 +945,9 @@ public class BeanProperty implements ElPropertyValue, Property, STreeProperty {
return scalarType;
}
- @Override
- public boolean isDateTimeCapable() {
- return scalarType != null && scalarType.isDateTimeCapable();
- }
-
@Override
public int jdbcType() {
- return scalarType == null ? 0 : scalarType.getJdbcType();
- }
-
- @Override
- public Object parseDateTime(long systemTimeMillis) {
- return scalarType.convertFromMillis(systemTimeMillis);
+ return scalarType == null ? 0 : scalarType.jdbcType();
}
/**
@@ -1414,7 +1411,7 @@ public class BeanProperty implements ElPropertyValue, Property, STreeProperty {
JsonToken event = ctx.nextToken();
if (JsonToken.VALUE_NULL == event) {
if (jsonDeserialize) {
- if (ctx.isIntercept()) {
+ if (ctx.intercept()) {
setValueIntercept(bean, null);
} else {
setValue(bean, null);
@@ -1424,7 +1421,7 @@ public class BeanProperty implements ElPropertyValue, Property, STreeProperty {
// expect to read non-null json value
Object objValue;
if (scalarType != null) {
- objValue = scalarType.jsonRead(ctx.getParser());
+ objValue = scalarType.jsonRead(ctx.parser());
} else {
try {
objValue = ctx.readValueUsingObjectMapper(propertyType);
@@ -1433,11 +1430,11 @@ public class BeanProperty implements ElPropertyValue, Property, STreeProperty {
objValue = null;
String msg = "Error trying to use Jackson ObjectMapper to read transient property "
+ fullName() + " - consider marking this property with @JsonIgnore";
- CoreLog.log.error(msg, e);
+ CoreLog.log.log(ERROR, msg, e);
}
}
if (jsonDeserialize) {
- if (ctx.isIntercept()) {
+ if (ctx.intercept()) {
setValueIntercept(bean, objValue);
} else {
setValue(bean, objValue);
@@ -1470,7 +1467,7 @@ public class BeanProperty implements ElPropertyValue, Property, STreeProperty {
*/
public void docStoreMapping(DocMappingBuilder mapping, String prefix) {
if (mapping.includesProperty(prefix, name)) {
- DocPropertyType type = scalarType.getDocType();
+ DocPropertyType type = scalarType.docType();
DocPropertyOptions options = docOptions.copy();
if (isKeywordType(type, options)) {
type = DocPropertyType.KEYWORD;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyAssoc.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyAssoc.java
index 147f623a1..1cc67ee15 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyAssoc.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyAssoc.java
@@ -30,6 +30,8 @@ import javax.persistence.PersistenceException;
import java.util.ArrayList;
import java.util.List;
+import static java.lang.System.Logger.Level.ERROR;
+
/**
* Abstract base for properties mapped to an associated bean, list, set or map.
*/
@@ -353,7 +355,7 @@ public abstract class BeanPropertyAssoc extends BeanProperty implements STree
mapping.push(nested);
targetDescriptor.docStoreMapping(mapping, fullName);
mapping.pop();
- if (!nested.getChildren().isEmpty()) {
+ if (!nested.children().isEmpty()) {
mapping.add(nested);
}
}
@@ -364,7 +366,7 @@ public abstract class BeanPropertyAssoc extends BeanProperty implements STree
*/
public boolean isUpdateable() {
TableJoinColumn[] columns = tableJoin.columns();
- if (columns.length <= 0) {
+ if (columns.length == 0) {
return true;
}
for (TableJoinColumn column : columns) {
@@ -381,7 +383,7 @@ public abstract class BeanPropertyAssoc extends BeanProperty implements STree
*/
public boolean isInsertable() {
TableJoinColumn[] columns = tableJoin.columns();
- if (columns.length <= 0) {
+ if (columns.length == 0) {
return true;
}
for (TableJoinColumn column : columns) {
@@ -432,7 +434,7 @@ public abstract class BeanPropertyAssoc extends BeanProperty implements STree
if (!idProp.isEmbedded()) {
// simple single scalar id
if (cols.length != 1) {
- CoreLog.log.error("No Imported Id column for [" + idProp + "] in table [" + join.getTable() + "]");
+ CoreLog.log.log(ERROR, "No Imported Id column for {0} in table {1}", idProp, join.getTable());
return null;
} else {
BeanProperty[] idProps = {idProp};
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyAssocMany.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyAssocMany.java
index 81a5f4632..feec8f8ce 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyAssocMany.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyAssocMany.java
@@ -26,6 +26,8 @@ import java.io.IOException;
import java.io.StringWriter;
import java.util.*;
+import static java.lang.System.Logger.Level.ERROR;
+
/**
* Property mapped to a List Set or Map.
*/
@@ -326,7 +328,7 @@ public class BeanPropertyAssocMany extends BeanPropertyAssoc implements ST
*/
@Override
public void lazyLoadMany(EntityBean current) {
- EntityBean parentBean = childMasterProperty.getValueAsEntityBean(current);
+ EntityBean parentBean = childMasterProperty.valueAsEntityBean(current);
if (parentBean != null) {
addBeanToCollectionWithCreate(parentBean, current, true);
}
@@ -667,7 +669,7 @@ public class BeanPropertyAssocMany extends BeanPropertyAssoc implements ST
}
} catch (PersistenceException e) {
// not found as individual scalar properties
- CoreLog.log.error("Could not find a exported property?", e);
+ CoreLog.log.log(ERROR, "Could not find a exported property?", e);
}
} else {
if (idProp != null) {
@@ -716,7 +718,7 @@ public class BeanPropertyAssocMany extends BeanPropertyAssoc implements ST
}
}
}
- throw new RuntimeException("Can not find Master [" + beanType + "] in Child[" + targetDesc + "]");
+ throw new RuntimeException("Can not find Master " + beanType + " in Child " + targetDesc);
}
/**
@@ -732,7 +734,7 @@ public class BeanPropertyAssocMany extends BeanPropertyAssoc implements ST
}
String from = descriptor.fullName();
String to = targetDesc.fullName();
- throw new PersistenceException(from + ": Could not find mapKey property [" + mapKey + "] on [" + to + "]");
+ throw new PersistenceException(from + ": Could not find mapKey property " + mapKey + " on " + to);
}
public IntersectionRow buildManyDeleteChildren(EntityBean parentBean, List excludeDetailIds) {
@@ -962,7 +964,7 @@ public class BeanPropertyAssocMany extends BeanPropertyAssoc implements ST
setValue(bean, collection);
}
} catch (Exception e) {
- CoreLog.log.error("Error setting value from L2 cache", e);
+ CoreLog.log.log(ERROR, "Error setting value from L2 cache", e);
}
}
@@ -975,7 +977,7 @@ public class BeanPropertyAssocMany extends BeanPropertyAssoc implements ST
}
return jsonWriteCollection(collection);
} catch (Exception e) {
- CoreLog.log.error("Error building value element collection json for L2 cache", e);
+ CoreLog.log.log(ERROR, "Error building value element collection json for L2 cache", e);
return null;
}
}
@@ -996,7 +998,7 @@ public class BeanPropertyAssocMany extends BeanPropertyAssoc implements ST
*/
private Object jsonReadCollection(String json) throws IOException {
SpiJsonReader ctx = descriptor.createJsonReader(json);
- JsonParser parser = ctx.getParser();
+ JsonParser parser = ctx.parser();
JsonToken event = parser.nextToken();
if (JsonToken.VALUE_NULL == event) {
return null;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyAssocManyJsonHelp.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyAssocManyJsonHelp.java
index ba06352b7..f09bc4dc6 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyAssocManyJsonHelp.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyAssocManyJsonHelp.java
@@ -38,7 +38,7 @@ class BeanPropertyAssocManyJsonHelp {
if (!this.many.jsonDeserialize) {
return;
}
- JsonParser parser = readJson.getParser();
+ JsonParser parser = readJson.parser();
JsonToken event = parser.nextToken();
if (JsonToken.VALUE_NULL == event) {
return;
@@ -50,7 +50,7 @@ class BeanPropertyAssocManyJsonHelp {
if (JsonToken.START_ARRAY != event && JsonToken.START_OBJECT != event) {
throw new JsonParseException(parser, "Unexpected token " + event + " - expecting start array or object");
}
- if (readJson.isIntercept()) {
+ if (readJson.intercept()) {
many.setValueIntercept(parentBean, many.jsonReadCollection(readJson, parentBean));
} else {
many.setValue(parentBean, many.jsonReadCollection(readJson, parentBean));
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyAssocManyJsonTransient.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyAssocManyJsonTransient.java
index 32a84d584..ae82bd7c6 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyAssocManyJsonTransient.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyAssocManyJsonTransient.java
@@ -20,7 +20,7 @@ class BeanPropertyAssocManyJsonTransient {
* Use Jackson ObjectMapper to read the transient 'many' property.
*/
void jsonReadUsingObjectMapper(BeanPropertyAssocMany> many, SpiJsonReader readJson, EntityBean parentBean) throws IOException {
- ObjectMapper mapper = readJson.getObjectMapper();
+ ObjectMapper mapper = readJson.mapper();
ManyType manyType = many.manyType();
Object value;
@@ -29,11 +29,11 @@ class BeanPropertyAssocManyJsonTransient {
TypeFactory typeFactory = mapper.getTypeFactory();
JavaType target = typeFactory.constructType(many.targetType());
MapType jacksonType = typeFactory.constructMapType(LinkedHashMap.class, TypeFactory.unknownType(), target);
- value = mapper.readValue(readJson.getParser(), jacksonType);
+ value = mapper.readValue(readJson.parser(), jacksonType);
} else {
// read list or set using Jackson object mapper
CollectionType jacksonType = mapper.getTypeFactory().constructCollectionType(manyType.getCollectionType(), many.targetType());
- value = mapper.readValue(readJson.getParser(), jacksonType);
+ value = mapper.readValue(readJson.parser(), jacksonType);
}
many.setValue(parentBean, value);
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyAssocOne.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyAssocOne.java
index a024c1ddb..b97c0a75a 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyAssocOne.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyAssocOne.java
@@ -155,7 +155,7 @@ public class BeanPropertyAssocOne extends BeanPropertyAssoc implements STr
* Return the property value as an entity bean.
*/
@Override
- public EntityBean getValueAsEntityBean(EntityBean owner) {
+ public EntityBean valueAsEntityBean(EntityBean owner) {
return (EntityBean) getValue(owner);
}
@@ -768,7 +768,7 @@ public class BeanPropertyAssocOne extends BeanPropertyAssoc implements STr
if (value == null) {
writeJson.writeNullField(name);
} else {
- if (!writeJson.isParentBean(value)) {
+ if (!writeJson.parentBean(value)) {
// Hmmm, not writing complex non-entity bean
if (value instanceof EntityBean) {
writeJson.beginAssocOne(name, bean);
@@ -780,12 +780,13 @@ public class BeanPropertyAssocOne extends BeanPropertyAssoc implements STr
}
}
+ @SuppressWarnings("unchecked")
@Override
public void jsonRead(SpiJsonReader readJson, EntityBean bean) throws IOException {
if (jsonDeserialize && targetDescriptor != null) {
T target = (T) value(bean);
T assocBean = targetDescriptor.jsonRead(readJson, name, target);
- if (readJson.isIntercept()) {
+ if (readJson.intercept()) {
setValueIntercept(bean, assocBean);
} else {
setValue(bean, assocBean);
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyOrderColumn.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyOrderColumn.java
index a6ac913b9..7820e722d 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyOrderColumn.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyOrderColumn.java
@@ -5,7 +5,7 @@ import io.ebeaninternal.server.deploy.meta.DeployBeanProperty;
/**
* Bean property for synthetic sort order value / order column.
- *
+ *
* The value of which is held on the entity bean intercept.
*/
public final class BeanPropertyOrderColumn extends BeanProperty {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanQueryAdapterManager.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanQueryAdapterManager.java
index 45bced3a2..6eb8d20e3 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanQueryAdapterManager.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanQueryAdapterManager.java
@@ -7,6 +7,8 @@ import io.ebeaninternal.server.deploy.meta.DeployBeanDescriptor;
import java.util.List;
+import static java.lang.System.Logger.Level.DEBUG;
+
/**
* Default implementation for creating BeanControllers.
*/
@@ -28,7 +30,7 @@ final class BeanQueryAdapterManager {
void addQueryAdapter(DeployBeanDescriptor> deployDesc) {
for (BeanQueryAdapter c : list) {
if (c.isRegisterFor(deployDesc.getBeanType())) {
- CoreLog.internal.debug("BeanQueryAdapter on[{}] {}", deployDesc.getFullName(), c.getClass().getName());
+ CoreLog.internal.log(DEBUG, "BeanQueryAdapter on[{0}] {1}", deployDesc.getFullName(), c.getClass().getName());
deployDesc.addQueryAdapter(c);
}
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanTable.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanTable.java
index 0a503314d..5f76d4779 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanTable.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanTable.java
@@ -1,6 +1,5 @@
package io.ebeaninternal.server.deploy;
-import io.ebeaninternal.api.CoreLog;
import io.ebeaninternal.server.core.InternString;
import io.ebeaninternal.server.deploy.meta.DeployBeanTable;
import io.ebeaninternal.server.deploy.meta.DeployTableJoin;
@@ -105,7 +104,6 @@ public final class BeanTable {
if (complexKey) {
// just to copy the column name rather than prefix with the foreignKeyPrefix.
// I think that with complex keys this is the more common approach.
- CoreLog.internal.debug("On table[{}] foreign key column [{}]", baseTable, lc);
fk = lc;
}
if (sqlFormulaSelect != null) {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DbMigrationInfo.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DbMigrationInfo.java
index d41f781f5..c9e90efb3 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DbMigrationInfo.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DbMigrationInfo.java
@@ -1,6 +1,5 @@
package io.ebeaninternal.server.deploy;
-import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@@ -30,7 +29,7 @@ public final class DbMigrationInfo {
if (scripts.length == 0) {
return Collections.emptyList();
} else {
- return Collections.unmodifiableList(Arrays.asList(scripts));
+ return List.of(scripts);
}
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DbReadContext.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DbReadContext.java
index e79e7e0df..7ac256b4b 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DbReadContext.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DbReadContext.java
@@ -27,7 +27,7 @@ public interface DbReadContext {
/**
* Return the DataReader.
*/
- DataReader getDataReader();
+ DataReader dataReader();
/**
* Return true if the query is using supplied SQL rather than generated SQL.
@@ -52,7 +52,7 @@ public interface DbReadContext {
/**
* Return the persistence context.
*/
- PersistenceContext getPersistenceContext();
+ PersistenceContext persistenceContext();
/**
* Register a reference for lazy loading.
@@ -69,7 +69,6 @@ public interface DbReadContext {
*/
void register(BeanPropertyAssocMany> many, BeanCollection> bc);
-
/**
* Set back the bean that has just been loaded with its id.
*/
@@ -78,7 +77,7 @@ public interface DbReadContext {
/**
* Return the query mode.
*/
- SpiQuery.Mode getQueryMode();
+ SpiQuery.Mode queryMode();
/**
* Return true if the underlying query is a 'asDraft' query.
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DbSqlContext.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DbSqlContext.java
index ff6839723..9557ee7a1 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DbSqlContext.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DbSqlContext.java
@@ -31,7 +31,7 @@ public interface DbSqlContext {
/**
* Return a list of encrypted properties which require additional binding.
*/
- BeanProperty[] getEncryptedProps();
+ BeanProperty[] encryptedProps();
/**
* Append a string directly to the SQL buffer.
@@ -83,7 +83,7 @@ public interface DbSqlContext {
/**
* Return the current context of the sql context.
*/
- String getContent();
+ String content();
/**
* Push a join node onto the stack.
@@ -99,14 +99,14 @@ public interface DbSqlContext {
* Return a table alias without many where clause joins. Typically this is for
* the select clause (fetch joins).
*/
- String getTableAlias(String prefix);
+ String tableAlias(String prefix);
/**
* Return a table alias that takes into account many where joins.
*/
- String getTableAliasManyWhere(String prefix);
+ String tableAliasManyWhere(String prefix);
- String getRelativePrefix(String propName);
+ String relativePrefix(String propName);
/**
* Append the lower and upper bound columns into the select clause
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DeployDocPropertyOptions.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DeployDocPropertyOptions.java
index e6e00b2e9..0ce3a87a5 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DeployDocPropertyOptions.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DeployDocPropertyOptions.java
@@ -33,7 +33,7 @@ public final class DeployDocPropertyOptions {
*/
public void setDocSortable(DocSortable doc) {
createOptions();
- mapping.setSortable(true);
+ mapping.sortable(true);
setStore(doc.store());
setBoost(doc.boost());
setNullValue(doc.nullValue());
@@ -44,7 +44,7 @@ public final class DeployDocPropertyOptions {
*/
public void setDocCode(DocCode doc) {
createOptions();
- mapping.setCode(true);
+ mapping.code(true);
setStore(doc.store());
setBoost(doc.boost());
setNullValue(doc.nullValue());
@@ -52,19 +52,19 @@ public final class DeployDocPropertyOptions {
private void setNullValue(String value) {
if (!value.isEmpty()) {
- mapping.setNullValue(value);
+ mapping.nullValue(value);
}
}
private void setBoost(float boost) {
if (Float.compare(boost, 1.0F) != 0) {
- mapping.setBoost(boost);
+ mapping.boost(boost);
}
}
private void setStore(boolean store) {
if (store) {
- mapping.setStore(true);
+ mapping.store(true);
}
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DetermineAggPath.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DetermineAggPath.java
index 0349ac196..b82c72bae 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DetermineAggPath.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DetermineAggPath.java
@@ -41,7 +41,7 @@ final class DetermineAggPath {
}
}
- throw new IllegalArgumentException("Could not find path in aggregation formula [" + aggregation + "]");
+ throw new IllegalArgumentException("Could not find path in aggregation formula " + aggregation);
}
private static boolean isNamePart(char ch) {
@@ -94,7 +94,7 @@ final class DetermineAggPath {
pos = pos + 1;
continue;
}
- throw new IllegalArgumentException("Can not find path to many in aggregation formula [" + aggregation + "]");
+ throw new IllegalArgumentException("Can not find path to many in aggregation formula " + aggregation);
}
}
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DynamicPropertyAggregationFormula.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DynamicPropertyAggregationFormula.java
index ec1c7035b..3634123e2 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DynamicPropertyAggregationFormula.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DynamicPropertyAggregationFormula.java
@@ -26,7 +26,7 @@ class DynamicPropertyAggregationFormula extends DynamicPropertyBase {
@Override
public String toString() {
- return "DynamicPropertyFormula[" + parsedFormula + "]";
+ return "DynamicPropertyFormula " + parsedFormula;
}
@Override
@@ -47,7 +47,7 @@ class DynamicPropertyAggregationFormula extends DynamicPropertyBase {
public void load(SqlBeanLoad sqlBeanLoad) {
Object value;
try {
- value = scalarType.read(sqlBeanLoad.ctx().getDataReader());
+ value = scalarType.read(sqlBeanLoad.ctx().dataReader());
} catch (Exception e) {
sqlBeanLoad.ctx().handleLoadError(fullName, e);
return;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DynamicPropertyBase.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DynamicPropertyBase.java
index 08fc33036..c8711ea62 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DynamicPropertyBase.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DynamicPropertyBase.java
@@ -65,7 +65,7 @@ abstract class DynamicPropertyBase implements STreeProperty {
@Override
public void loadIgnore(DbReadContext ctx) {
- scalarType.loadIgnore(ctx.getDataReader());
+ ctx.dataReader().incrementPos(1);
}
@Override
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/FormulaPropertyPath.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/FormulaPropertyPath.java
index ac9aaabb5..82493154b 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/FormulaPropertyPath.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/FormulaPropertyPath.java
@@ -32,7 +32,7 @@ final class FormulaPropertyPath {
int openBracket = formula.indexOf('(');
int closeBracket = formula.lastIndexOf(')');
if (openBracket == -1 || closeBracket == -1) {
- throw new IllegalStateException("Unable to parse formula [" + formula + "]");
+ throw new IllegalStateException("Unable to parse formula " + formula);
}
outerFunction = formula.substring(0, openBracket).trim();
internalExpression = trimDistinct(formula.substring(openBracket + 1, closeBracket));
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/InheritInfo.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/InheritInfo.java
index 3f0c5c8cb..e72d7463d 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/InheritInfo.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/InheritInfo.java
@@ -197,7 +197,7 @@ public final class InheritInfo {
* Return the associated InheritInfo for this DB row read.
*/
public InheritInfo readType(DbReadContext ctx) throws SQLException {
- return readType(ctx.getDataReader().getString());
+ return readType(ctx.dataReader().getString());
}
/**
@@ -354,7 +354,7 @@ public final class InheritInfo {
@Override
public String toString() {
- return "InheritInfo[" + type.getName() + "] disc[" + discriminatorStringValue + "]";
+ return "InheritInfo " + type.getName() + " disc:" + discriminatorStringValue;
}
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/PersistControllerManager.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/PersistControllerManager.java
index 0497d7ef9..196e4be20 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/PersistControllerManager.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/PersistControllerManager.java
@@ -7,6 +7,8 @@ import io.ebeaninternal.server.deploy.meta.DeployBeanDescriptor;
import java.util.List;
+import static java.lang.System.Logger.Level.DEBUG;
+
/**
* Default implementation for creating BeanControllers.
*/
@@ -28,7 +30,7 @@ final class PersistControllerManager {
void addPersistControllers(DeployBeanDescriptor> deployDesc) {
for (BeanPersistController c : list) {
if (c.isRegisterFor(deployDesc.getBeanType())) {
- CoreLog.log.debug("BeanPersistController on[{}] {}", deployDesc.getFullName(), c.getClass().getName());
+ CoreLog.log.log(DEBUG, "BeanPersistController on[{0}] {1}", deployDesc.getFullName(), c.getClass().getName());
deployDesc.addPersistController(c);
}
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/PersistListenerManager.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/PersistListenerManager.java
index ec0fd3edb..5c771b026 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/PersistListenerManager.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/PersistListenerManager.java
@@ -7,6 +7,8 @@ import io.ebeaninternal.server.deploy.meta.DeployBeanDescriptor;
import java.util.List;
+import static java.lang.System.Logger.Level.DEBUG;
+
/**
* Manages the assignment/registration of BeanPersistListener with their
* respective DeployBeanDescriptor's.
@@ -29,7 +31,7 @@ final class PersistListenerManager {
void addPersistListeners(DeployBeanDescriptor deployDesc) {
for (BeanPersistListener listener : list) {
if (listener.isRegisterFor(deployDesc.getBeanType())) {
- CoreLog.log.debug("BeanPersistListener on[{}] {}", deployDesc.getFullName(), listener.getClass().getName());
+ CoreLog.log.log(DEBUG, "BeanPersistListener on[{0}] {1}", deployDesc.getFullName(), listener.getClass().getName());
deployDesc.addPersistListener(listener);
}
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/PostConstructManager.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/PostConstructManager.java
index 33b3a5f76..525a87fb3 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/PostConstructManager.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/PostConstructManager.java
@@ -7,6 +7,8 @@ import io.ebeaninternal.server.deploy.meta.DeployBeanDescriptor;
import java.util.List;
+import static java.lang.System.Logger.Level.DEBUG;
+
/**
* Default implementation for creating BeanControllers.
*/
@@ -28,7 +30,7 @@ final class PostConstructManager {
void addPostConstructListeners(DeployBeanDescriptor> deployDesc) {
for (BeanPostConstructListener c : list) {
if (c.isRegisterFor(deployDesc.getBeanType())) {
- CoreLog.log.debug("BeanPostLoad on[{}] {}", deployDesc.getFullName(), c.getClass().getName());
+ CoreLog.log.log(DEBUG, "BeanPostLoad on[{0}] {1}", deployDesc.getFullName(), c.getClass().getName());
deployDesc.addPostConstructListener(c);
}
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/PostLoadManager.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/PostLoadManager.java
index babc69c76..1638c1682 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/PostLoadManager.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/PostLoadManager.java
@@ -7,6 +7,8 @@ import io.ebeaninternal.server.deploy.meta.DeployBeanDescriptor;
import java.util.List;
+import static java.lang.System.Logger.Level.DEBUG;
+
/**
* Default implementation for creating BeanControllers.
*/
@@ -28,7 +30,7 @@ final class PostLoadManager {
void addPostLoad(DeployBeanDescriptor> deployDesc) {
for (BeanPostLoad c : list) {
if (c.isRegisterFor(deployDesc.getBeanType())) {
- CoreLog.log.debug("BeanPostLoad on[{}] {}", deployDesc.getFullName(), c.getClass().getName());
+ CoreLog.log.log(DEBUG, "BeanPostLoad on[{0}] {1}", deployDesc.getFullName(), c.getClass().getName());
deployDesc.addPostLoad(c);
}
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/TableJoin.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/TableJoin.java
index 8c1624d05..951f6b92b 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/TableJoin.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/TableJoin.java
@@ -34,7 +34,7 @@ public final class TableJoin {
private final int queryHash;
private final PropertyForeignKey foreignKey;
-
+
private final String extraWhere;
public TableJoin(DeployTableJoin deploy) {
@@ -135,21 +135,21 @@ public final class TableJoin {
public void addJoin(SqlJoinType joinType, String prefix, DbSqlContext ctx, String predicate) {
String[] names = SplitName.split(prefix);
- String a1 = ctx.getTableAlias(names[0]);
- String a2 = ctx.getTableAlias(prefix);
+ String a1 = ctx.tableAlias(names[0]);
+ String a2 = ctx.tableAlias(prefix);
addJoin(joinType, a1, a2, ctx);
ctx.append(" and ").append(a2).append(predicate);
}
public SqlJoinType addJoin(SqlJoinType joinType, String prefix, DbSqlContext ctx) {
String[] names = SplitName.split(prefix);
- String a1 = ctx.getTableAlias(names[0]);
- String a2 = ctx.getTableAlias(prefix);
+ String a1 = ctx.tableAlias(names[0]);
+ String a2 = ctx.tableAlias(prefix);
return addJoin(joinType, a1, a2, ctx);
}
public SqlJoinType addJoin(SqlJoinType joinType, String a1, String a2, DbSqlContext ctx) {
- String joinLiteral = joinType.getLiteral(type);
+ String joinLiteral = joinType.literal(type);
ctx.addJoin(joinLiteral, table, columns(), a1, a2, extraWhere);
return joinType.autoToOuter(type);
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedCounter.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedCounter.java
index 38f0085fb..d4ee1f595 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedCounter.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedCounter.java
@@ -1,7 +1,7 @@
package io.ebeaninternal.server.deploy.generatedproperty;
import io.ebean.bean.EntityBean;
-import io.ebeaninternal.server.core.BasicTypeConverter;
+import io.ebean.core.type.BasicTypeConverter;
import io.ebeaninternal.server.deploy.BeanProperty;
/**
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/id/IdBinder.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/id/IdBinder.java
index 01aec83e7..89a3677a2 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/id/IdBinder.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/id/IdBinder.java
@@ -7,7 +7,7 @@ import io.ebeaninternal.server.deploy.BeanProperty;
import io.ebeaninternal.server.deploy.DbReadContext;
import io.ebeaninternal.server.deploy.DbSqlContext;
import io.ebeaninternal.server.query.STreeProperty;
-import io.ebeaninternal.server.type.DataBind;
+import io.ebeaninternal.server.bind.DataBind;
import java.io.DataInput;
import java.io.DataOutput;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/id/IdBinderEmbedded.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/id/IdBinderEmbedded.java
index e3b23e9fb..d2fda9bd2 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/id/IdBinderEmbedded.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/id/IdBinderEmbedded.java
@@ -9,7 +9,7 @@ import io.ebeaninternal.server.deploy.BeanProperty;
import io.ebeaninternal.server.deploy.BeanPropertyAssocOne;
import io.ebeaninternal.server.deploy.DbReadContext;
import io.ebeaninternal.server.deploy.DbSqlContext;
-import io.ebeaninternal.server.type.DataBind;
+import io.ebeaninternal.server.bind.DataBind;
import java.io.DataInput;
import java.io.DataOutput;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/id/IdBinderEmpty.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/id/IdBinderEmpty.java
index af3df49dc..b4bbbff1a 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/id/IdBinderEmpty.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/id/IdBinderEmpty.java
@@ -6,7 +6,7 @@ import io.ebeaninternal.server.core.DefaultSqlUpdate;
import io.ebeaninternal.server.deploy.BeanProperty;
import io.ebeaninternal.server.deploy.DbReadContext;
import io.ebeaninternal.server.deploy.DbSqlContext;
-import io.ebeaninternal.server.type.DataBind;
+import io.ebeaninternal.server.bind.DataBind;
import java.io.DataInput;
import java.io.DataOutput;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/id/IdBinderSimple.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/id/IdBinderSimple.java
index 0a24c78d2..729ad0adb 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/id/IdBinderSimple.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/id/IdBinderSimple.java
@@ -10,7 +10,7 @@ import io.ebeaninternal.server.deploy.DbReadContext;
import io.ebeaninternal.server.deploy.DbSqlContext;
import io.ebeaninternal.server.persist.MultiValueWrapper;
import io.ebeaninternal.server.persist.platform.MultiValueBind;
-import io.ebeaninternal.server.type.DataBind;
+import io.ebeaninternal.server.bind.DataBind;
import java.io.DataInput;
import java.io.DataOutput;
@@ -145,9 +145,7 @@ public final class IdBinderSimple implements IdBinder {
@Override
public void addIdInBindValues(SpiExpressionRequest request, Collection> values) {
List copy = new ArrayList<>(values);
- for (int i = 0; i < copy.size(); i++) {
- copy.set(i, convertSetId(copy.get(i), null));
- }
+ copy.replaceAll(idValue -> convertSetId(idValue, null));
request.addBindValue(new MultiValueWrapper(copy));
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanDescriptor.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanDescriptor.java
index 49767439f..dfeacbd83 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanDescriptor.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanDescriptor.java
@@ -152,7 +152,6 @@ public class DeployBeanDescriptor {
private DocStoreMode docStoreDelete;
private DeployBeanProperty idProperty;
private TableJoin primaryKeyJoin;
- private Object jacksonAnnotatedClass;
/**
* Construct the BeanDescriptor.
@@ -1130,14 +1129,4 @@ public class DeployBeanDescriptor {
}
}
- /**
- * Returns the jackson annotated class, if jackson is present.
- */
- @SuppressWarnings("unchecked")
- Object /*AnnotatedClass*/ getJacksonAnnotatedClass() {
- if (jacksonAnnotatedClass == null) {
- jacksonAnnotatedClass = new DeployBeanObtainJackson(config, beanType).obtain();
- }
- return jacksonAnnotatedClass;
- }
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanProperty.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanProperty.java
index 655f4c101..2507387ab 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanProperty.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanProperty.java
@@ -175,7 +175,7 @@ public class DeployBeanProperty {
this.propertyType = propertyType;
this.genericType = null;
this.scalarType = wrapScalarType(propertyType, scalarType, typeConverter);
- this.dbType = (scalarType == null) ? 0 : scalarType.getJdbcType();
+ this.dbType = (scalarType == null) ? 0 : scalarType.jdbcType();
}
public DeployBeanProperty(DeployBeanDescriptor> desc, Class> propertyType, Type genericType) {
@@ -240,7 +240,7 @@ public class DeployBeanProperty {
*/
public int getDbLength() {
if (dbLength == 0 && scalarType != null) {
- return scalarType.getLength();
+ return scalarType.length();
}
return dbLength;
@@ -1042,20 +1042,6 @@ public class DeployBeanProperty {
this.elementProperty = true;
}
- /**
- * Returns the jackson annotated field, if jackson is present.
- */
- public Object /*AnnotatedField*/ getJacksonField() {
- com.fasterxml.jackson.databind.introspect.AnnotatedClass jac =
- (com.fasterxml.jackson.databind.introspect.AnnotatedClass) getDesc().getJacksonAnnotatedClass();
- for (com.fasterxml.jackson.databind.introspect.AnnotatedField candidate : jac.fields()) {
- if (candidate.getName().equals(getName())) {
- return candidate;
- }
- }
- return null;
- }
-
public void initMetaAnnotations(Set> metaAnnotationsFilter) {
metaAnnotations = AnnotationUtil.metaFindAllFor(field, metaAnnotationsFilter);
}
@@ -1145,7 +1131,7 @@ public class DeployBeanProperty {
}
boolean isJsonMapper() {
- return scalarType != null && scalarType.isJsonMapper();
+ return scalarType != null && scalarType.jsonMapper();
}
boolean isJsonType() {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanPropertyLists.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanPropertyLists.java
index 4605a2d6b..e33dd310c 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanPropertyLists.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanPropertyLists.java
@@ -11,6 +11,8 @@ import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
+import static java.lang.System.Logger.Level.WARNING;
+
/**
* Helper object to classify BeanProperties into appropriate lists.
*/
@@ -222,7 +224,7 @@ public final class DeployBeanPropertyLists {
if (versionProperty == null) {
versionProperty = prop;
} else {
- CoreLog.internal.warn("Multiple @Version properties - property " + prop.fullName() + " not treated as a version property");
+ CoreLog.internal.log(WARNING, "Multiple @Version properties - property " + prop.fullName() + " not treated as a version property");
}
} else if (prop.isDraftDirty()) {
draftDirty = prop;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployIdentityMode.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployIdentityMode.java
index 6a20d9145..6f70bff19 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployIdentityMode.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployIdentityMode.java
@@ -12,10 +12,10 @@ public final class DeployIdentityMode {
}
private IdType type;
- private IdentityGenerated generated;
+ private final IdentityGenerated generated;
private int start;
private int increment;
- private int cache;
+ private final int cache;
private String sequenceName;
private boolean platformDefault;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployTableJoin.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployTableJoin.java
index 8a56e8a82..0f3ed54c1 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployTableJoin.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployTableJoin.java
@@ -137,7 +137,6 @@ public final class DeployTableJoin {
/**
* Returns the clause of an extra @Where annotation.
- * @return
*/
public String getExtraWhere() {
return extraWhere;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationAssocManys.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationAssocManys.java
index 736602695..0d29c3ba4 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationAssocManys.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationAssocManys.java
@@ -222,7 +222,7 @@ final class AnnotationAssocManys extends AnnotationAssoc {
dbKeyColumn = mapKeyColumn.name();
}
- ScalarType> keyScalarType = util.getTypeManager().getScalarType(prop.getMapKeyType());
+ ScalarType> keyScalarType = util.typeManager().type(prop.getMapKeyType());
DeployBeanProperty keyProp = new DeployBeanProperty(elementDescriptor, elementType, keyScalarType, null);
setElementProperty(keyProp, "key", dbKeyColumn, sortOrder++);
@@ -234,10 +234,10 @@ final class AnnotationAssocManys extends AnnotationAssoc {
}
}
- ScalarType> valueScalarType = util.getTypeManager().getScalarType(elementType);
+ ScalarType> valueScalarType = util.typeManager().type(elementType);
if (valueScalarType == null && elementType.isEnum()) {
Class extends Enum>> enumClass = (Class extends Enum>>)elementType;
- valueScalarType = util.getTypeManager().createEnumScalarType(enumClass, EnumType.STRING);
+ valueScalarType = util.typeManager().enumType(enumClass, EnumType.STRING);
}
boolean scalar = true;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationAssocOnes.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationAssocOnes.java
index 18b087305..598962fcf 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationAssocOnes.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationAssocOnes.java
@@ -16,6 +16,8 @@ import io.ebeaninternal.server.query.SqlJoinType;
import javax.persistence.*;
+import static java.lang.System.Logger.Level.INFO;
+
/**
* Read the deployment annotations for Associated One beans.
*/
@@ -213,10 +215,10 @@ final class AnnotationAssocOnes extends AnnotationAssoc {
prop.setPrimaryKeyJoin(true);
if (!primaryKeyJoin.name().isEmpty()) {
- CoreLog.internal.info("Automatically determining join columns for @PrimaryKeyJoinColumn - ignoring PrimaryKeyJoinColumn.name attribute [{}] on {}", primaryKeyJoin.name(), prop.getFullBeanName());
+ CoreLog.internal.log(INFO, "Automatically determining join columns for @PrimaryKeyJoinColumn - ignoring PrimaryKeyJoinColumn.name attribute [{0}] on {1}", primaryKeyJoin.name(), prop.getFullBeanName());
}
if (!primaryKeyJoin.referencedColumnName().isEmpty()) {
- CoreLog.internal.info("Automatically determining join columns for @PrimaryKeyJoinColumn - Ignoring PrimaryKeyJoinColumn.referencedColumnName attribute [{}] on {}", primaryKeyJoin.referencedColumnName(), prop.getFullBeanName());
+ CoreLog.internal.log(INFO, "Automatically determining join columns for @PrimaryKeyJoinColumn - Ignoring PrimaryKeyJoinColumn.referencedColumnName attribute [{0}] on {1}", primaryKeyJoin.referencedColumnName(), prop.getFullBeanName());
}
BeanTable baseBeanTable = factory.beanTable(info.getDescriptor().getBeanType());
String localPrimaryKey = baseBeanTable.getIdColumn();
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationBase.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationBase.java
index b74035dc0..35179b876 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationBase.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationBase.java
@@ -52,9 +52,9 @@ abstract class AnnotationBase {
AnnotationBase(DeployUtil util) {
this.util = util;
- this.databasePlatform = util.getDbPlatform();
- this.platform = databasePlatform.getPlatform();
- this.namingConvention = util.getNamingConvention();
+ this.databasePlatform = util.dbPlatform();
+ this.platform = databasePlatform.platform();
+ this.namingConvention = util.namingConvention();
}
/**
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationClass.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationClass.java
index 956fa66c7..662b73be8 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationClass.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationClass.java
@@ -1,19 +1,7 @@
package io.ebeaninternal.server.deploy.parse;
-import io.ebean.annotation.Cache;
-import io.ebean.annotation.DbComment;
-import io.ebean.annotation.DbPartition;
-import io.ebean.annotation.DocStore;
-import io.ebean.annotation.Draftable;
-import io.ebean.annotation.DraftableElement;
-import io.ebean.annotation.History;
-import io.ebean.annotation.Identity;
import io.ebean.annotation.Index;
-import io.ebean.annotation.InvalidateQueryCache;
-import io.ebean.annotation.ReadAudit;
-import io.ebean.annotation.StorageEngine;
-import io.ebean.annotation.Tablespace;
-import io.ebean.annotation.View;
+import io.ebean.annotation.*;
import io.ebean.config.TableName;
import io.ebeaninternal.api.CoreLog;
import io.ebeaninternal.server.deploy.BeanDescriptor.EntityType;
@@ -23,16 +11,10 @@ import io.ebeaninternal.server.deploy.PartitionMeta;
import io.ebeaninternal.server.deploy.TablespaceMeta;
import io.ebeaninternal.server.deploy.meta.DeployBeanProperty;
-import javax.persistence.AttributeOverride;
-import javax.persistence.Column;
-import javax.persistence.Embeddable;
-import javax.persistence.Entity;
-import javax.persistence.IdClass;
-import javax.persistence.NamedQuery;
-import javax.persistence.Table;
-import javax.persistence.UniqueConstraint;
+import javax.persistence.*;
import static io.ebean.util.AnnotationUtil.typeGet;
+import static java.lang.System.Logger.Level.ERROR;
/**
* Read the class level deployment annotations.
@@ -65,7 +47,7 @@ final class AnnotationClass extends AnnotationParser {
Column column = override.column();
DeployBeanProperty beanProperty = descriptor.getBeanProperty(propertyName);
if (beanProperty == null) {
- CoreLog.log.error("AttributeOverride property [" + propertyName + "] not found on " + descriptor.getFullName());
+ CoreLog.log.log(ERROR, "AttributeOverride property [" + propertyName + "] not found on " + descriptor.getFullName());
} else {
readColumn(column, beanProperty);
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationFields.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationFields.java
index f93fbf028..b2b0a4dd7 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationFields.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationFields.java
@@ -301,7 +301,7 @@ final class AnnotationFields extends AnnotationParser {
private void initEncrypt(DeployBeanProperty prop) {
if (!prop.isTransient()) {
- EncryptDeploy encryptDeploy = util.getEncryptDeploy(info.getDescriptor().getBaseTableFull(), prop.getDbColumn());
+ EncryptDeploy encryptDeploy = util.encryptDeploy(info.getDescriptor().getBaseTableFull(), prop.getDbColumn());
if (encryptDeploy == null || encryptDeploy.getMode() == Mode.MODE_ANNOTATION) {
Encrypted encrypted = get(prop, Encrypted.class);
if (encrypted != null) {
@@ -386,7 +386,7 @@ final class AnnotationFields extends AnnotationParser {
private void setEncryption(DeployBeanProperty prop, boolean dbEncString, int dbLen) {
util.checkEncryptKeyManagerDefined(prop.getFullBeanName());
ScalarType> st = prop.getScalarType();
- if (byte[].class.equals(st.getType())) {
+ if (byte[].class.equals(st.type())) {
// Always using Java client encryption rather than DB for encryption
// of binary data (partially as this is not supported on all db's etc)
// This could be reviewed at a later stage.
@@ -398,10 +398,10 @@ final class AnnotationFields extends AnnotationParser {
return;
}
if (dbEncString) {
- DbEncrypt dbEncrypt = util.getDbPlatform().getDbEncrypt();
+ DbEncrypt dbEncrypt = util.dbPlatform().dbEncrypt();
if (dbEncrypt != null) {
// check if we have a DB encryption function for this type
- int jdbcType = prop.getScalarType().getJdbcType();
+ int jdbcType = prop.getScalarType().jdbcType();
DbEncryptFunction dbEncryptFunction = dbEncrypt.getDbEncryptFunction(jdbcType);
if (dbEncryptFunction != null) {
// Use DB functions to encrypt and decrypt
@@ -427,7 +427,7 @@ final class AnnotationFields extends AnnotationParser {
private ScalarTypeBytesBase getDbEncryptType(DeployBeanProperty prop) {
int dbType = prop.isLob() ? Types.BLOB : Types.VARBINARY;
- return (ScalarTypeBytesBase) util.getTypeManager().getScalarType(dbType);
+ return (ScalarTypeBytesBase) util.typeManager().type(dbType);
}
private DataEncryptSupport createDataEncryptSupport(DeployBeanProperty prop) {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/DeployCreateProperties.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/DeployCreateProperties.java
index 426c92048..e8466ebae 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/DeployCreateProperties.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/DeployCreateProperties.java
@@ -13,6 +13,8 @@ import javax.persistence.PersistenceException;
import javax.persistence.Transient;
import java.lang.reflect.*;
+import static java.lang.System.Logger.Level.*;
+
/**
* Create the properties for a bean.
*
@@ -84,7 +86,7 @@ public final class DeployCreateProperties {
if (replaced != null && !replaced.isTransient()) {
String msg = "Huh??? property " + prop.getFullBeanName() + " being defined twice";
msg += " but replaced property was not transient? This is not expected?";
- CoreLog.log.warn(msg);
+ CoreLog.log.log(WARNING, msg);
}
}
}
@@ -106,12 +108,12 @@ public final class DeployCreateProperties {
@SuppressWarnings({"unchecked"})
private DeployBeanProperty createManyType(DeployBeanDescriptor> desc, Class> targetType, ManyType manyType) {
try {
- ScalarType> scalarType = typeManager.getScalarType(targetType);
+ ScalarType> scalarType = typeManager.type(targetType);
if (scalarType != null) {
return new DeployBeanPropertySimpleCollection(desc, targetType, manyType);
}
} catch (NullPointerException e) {
- CoreLog.internal.debug("expected non-scalar type {}", e.getMessage());
+ CoreLog.internal.log(DEBUG, "expected non-scalar type {0}", e.getMessage());
}
return new DeployBeanPropertyAssocMany(desc, targetType, manyType);
}
@@ -132,14 +134,14 @@ public final class DeployCreateProperties {
// not supporting this field (generic type used)
return null;
}
- CoreLog.internal.warn("Could not find parameter type (via reflection) on " + desc.getFullName() + " " + field.getName());
+ CoreLog.internal.log(WARNING, "Could not find parameter type (via reflection) on " + desc.getFullName() + " " + field.getName());
}
return createManyType(desc, targetType, manyType);
}
if (propertyType.isEnum() || propertyType.isPrimitive()) {
return new DeployBeanProperty(desc, propertyType, null, null);
}
- ScalarType> scalarType = typeManager.getScalarType(propertyType);
+ ScalarType> scalarType = typeManager.type(propertyType);
if (scalarType != null) {
return new DeployBeanProperty(desc, propertyType, scalarType, null);
}
@@ -151,7 +153,7 @@ public final class DeployCreateProperties {
return new DeployBeanPropertyAssocOne(desc, propertyType);
} catch (Exception e) {
- CoreLog.log.error("Error with " + desc + " field:" + field.getName(), e);
+ CoreLog.log.log(ERROR, "Error with " + desc + " field:" + field.getName(), e);
return null;
}
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/DeployInheritInfo.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/DeployInheritInfo.java
index 3df70b406..67e41e3ea 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/DeployInheritInfo.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/DeployInheritInfo.java
@@ -255,7 +255,7 @@ public final class DeployInheritInfo implements Comparable {
public String toString() {
String root = parent == null ? null : parent.getName();
String name = type == null ? null : type.getName();
- return "InheritInfo[" + name + "]" + " root[" + root + "]" + " disValue[" + discriminatorStringValue + "]";
+ return "InheritInfo " + name + " root:" + root + " disc:" + discriminatorStringValue;
}
@Override
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/DeployUtil.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/DeployUtil.java
index a8cbe5fdf..027ecfc4c 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/DeployUtil.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/DeployUtil.java
@@ -60,15 +60,15 @@ public final class DeployUtil {
this.useValidationNotNull = config.isUseValidationNotNull();
}
- public TypeManager getTypeManager() {
+ public TypeManager typeManager() {
return typeManager;
}
- public DatabasePlatform getDbPlatform() {
+ public DatabasePlatform dbPlatform() {
return dbPlatform;
}
- public NamingConvention getNamingConvention() {
+ public NamingConvention namingConvention() {
return namingConvention;
}
@@ -82,7 +82,7 @@ public final class DeployUtil {
}
}
- EncryptDeploy getEncryptDeploy(TableName table, String column) {
+ EncryptDeploy encryptDeploy(TableName table, String column) {
if (encryptDeployManager == null) {
return EncryptDeploy.ANNOTATION;
}
@@ -102,9 +102,9 @@ public final class DeployUtil {
try {
Class extends Enum>> enumClass = (Class extends Enum>>) enumType;
EnumType type = enumerated != null ? enumerated.value() : null;
- ScalarType> scalarType = typeManager.createEnumScalarType(enumClass, type);
+ ScalarType> scalarType = typeManager.enumType(enumClass, type);
prop.setScalarType(scalarType);
- prop.setDbType(scalarType.getJdbcType());
+ prop.setDbType(scalarType.jdbcType());
} catch (IllegalStateException e) {
throw new PersistenceException("Error mapping property " + prop.getFullBeanName() + " - " + e.getMessage());
}
@@ -123,25 +123,25 @@ public final class DeployUtil {
// this will be an Enum type...
return;
}
- ScalarType> scalarType = getScalarType(property);
+ ScalarType> scalarType = scalarType(property);
if (scalarType != null) {
// set the jdbc type this maps to
- property.setDbType(scalarType.getJdbcType());
+ property.setDbType(scalarType.jdbcType());
property.setScalarType(scalarType);
property.checkPrimitiveBoolean();
}
}
- private ScalarType> getScalarType(DeployBeanProperty property) {
+ private ScalarType> scalarType(DeployBeanProperty property) {
// Note that Temporal types already have dbType
// set via annotations
Class> propType = property.getPropertyType();
try {
- ScalarType> scalarType = typeManager.getScalarType(propType, property.getDbType());
+ ScalarType> scalarType = typeManager.type(propType, property.getDbType());
if (scalarType != null || property.isTransient()) {
return scalarType;
}
- throw new PersistenceException(property.getFullBeanName() + " has no ScalarType - type[" + propType.getName() + "]");
+ throw new PersistenceException(property.getFullBeanName() + " has no ScalarType - type " + propType.getName());
} catch (IllegalArgumentException e) {
if (property.isTransient()) {
// expected for transient properties with unknown/non-mapped types
@@ -155,8 +155,8 @@ public final class DeployUtil {
* Map to Postgres HSTORE type (with fallback to JSON storage in VARCHAR).
*/
void setDbMap(DeployBeanProperty prop, DbMap dbMap) {
- ScalarType> scalarType = typeManager.getDbMapScalarType();
- int dbType = scalarType.getJdbcType();
+ ScalarType> scalarType = typeManager.dbMapType();
+ int dbType = scalarType.jdbcType();
prop.setDbType(dbType);
prop.setScalarType(scalarType);
if (dbType == Types.VARCHAR) {
@@ -171,12 +171,17 @@ public final class DeployUtil {
* Set the DbArray type (effectively Postgres only).
*/
void setDbArray(DeployBeanProperty prop, DbArray dbArray) {
- Class> type = prop.getPropertyType();
- ScalarType> scalarType = typeManager.getArrayScalarType(type, prop.getGenericType(), prop.isNullable());
- if (scalarType == null) {
- throw new RuntimeException("No ScalarType for @DbArray type for [" + prop.getFullBeanName() + "]");
+ if (!dbArray.nullable()) {
+ // Non-nullable ScalarTypeArray's will auto bind null to empty array, we need to
+ // set nullable(false) before the ScalarTypeArray is determined and assigned
+ prop.setNullable(false);
}
- int dbType = scalarType.getJdbcType();
+ Class> type = prop.getPropertyType();
+ ScalarType> scalarType = typeManager.dbArrayType(type, prop.getGenericType(), prop.isNullable());
+ if (scalarType == null) {
+ throw new RuntimeException("No ScalarType for @DbArray type for " + prop.getFullBeanName());
+ }
+ int dbType = scalarType.jdbcType();
prop.setDbType(dbType);
prop.setScalarType(scalarType);
if (scalarType instanceof ScalarTypeArray) {
@@ -193,7 +198,7 @@ public final class DeployUtil {
}
void setDbJsonType(DeployBeanProperty prop, DbJson dbJsonType) {
- int dbType = getDbJsonStorage(dbJsonType.storage());
+ int dbType = dbJsonStorage(dbJsonType.storage());
setDbJsonType(prop, dbType, dbJsonType.length(), dbJsonType.mutationDetection());
}
@@ -204,9 +209,9 @@ public final class DeployUtil {
private void setDbJsonType(DeployBeanProperty prop, int dbType, int dbLength, MutationDetection mutationDetection) {
prop.setDbType(dbType);
prop.setMutationDetection(mutationDetection);
- ScalarType> scalarType = typeManager.getJsonScalarType(prop, dbType, dbLength);
+ ScalarType> scalarType = typeManager.dbJsonType(prop, dbType, dbLength);
if (scalarType == null) {
- throw new RuntimeException("No ScalarType for JSON property [" + prop + "] [" + dbType + "]");
+ throw new RuntimeException("No ScalarType for JSON property " + prop + " dbType:" + dbType);
}
prop.setScalarType(scalarType);
if (dbType == Types.VARCHAR || dbLength > 0) {
@@ -219,7 +224,7 @@ public final class DeployUtil {
/**
* Return the JDBC type for the JSON storage type.
*/
- private int getDbJsonStorage(DbJsonType dbJsonType) {
+ private int dbJsonStorage(DbJsonType dbJsonType) {
switch (dbJsonType) {
case JSONB:
return DbPlatformType.JSONB;
@@ -240,7 +245,7 @@ public final class DeployUtil {
void setLobType(DeployBeanProperty prop) {
ScalarType> scalarType = prop.getScalarType();
if (scalarType instanceof ScalarTypeWrapper) {
- int lobType = scalarType.getJdbcType() == Types.VARCHAR ? dbCLOBType : dbBLOBType;
+ int lobType = scalarType.jdbcType() == Types.VARCHAR ? dbCLOBType : dbBLOBType;
prop.setDbType(lobType);
} else {
// is String or byte[] ? used to determine if its a CLOB or BLOB
@@ -248,10 +253,10 @@ public final class DeployUtil {
// this also sets the lob flag on DeployBeanProperty
int lobType = isClobType(type) ? dbCLOBType : dbBLOBType;
- scalarType = typeManager.getScalarType(type, lobType);
+ scalarType = typeManager.type(type, lobType);
if (scalarType == null) {
// this should never occur actually
- throw new RuntimeException("No ScalarType for LOB type [" + type + "] [" + lobType + "]");
+ throw new RuntimeException("No ScalarType for LOB type " + type + " dbType:" + lobType);
}
prop.setDbType(lobType);
prop.setScalarType(scalarType);
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/ReadAnnotationConfig.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/ReadAnnotationConfig.java
index 81b5576e9..7e5a09782 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/ReadAnnotationConfig.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/ReadAnnotationConfig.java
@@ -106,10 +106,7 @@ final class ReadAnnotationConfig {
if (javaxValidation != null && javaxValidation.isValidationNotNull(property)) {
return true;
}
- if (jakartaValidation != null && jakartaValidation.isValidationNotNull(property)) {
- return true;
- }
- return false;
+ return jakartaValidation != null && jakartaValidation.isValidationNotNull(property);
}
/**
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoMeta.java b/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoMeta.java
index cb7ec4797..fed2ff4c1 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoMeta.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoMeta.java
@@ -6,8 +6,8 @@ import java.util.List;
import java.util.Map;
/**
- * Holds property and constructor meta data for a given DTO bean type.
- *
+ * Holds property and constructor meta-data for a given DTO bean type.
+ *
* Uses this to map a mapping request (columns) to a 'query plan' (constructor and setters).
*/
final class DtoMeta {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoMetaBuilder.java b/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoMetaBuilder.java
index 43acbf342..67f4d9912 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoMetaBuilder.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoMetaBuilder.java
@@ -9,6 +9,8 @@ import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.List;
+import static java.lang.System.Logger.Level.DEBUG;
+
/**
* Build the DtoMeta for a bean.
*
@@ -39,7 +41,7 @@ final class DtoMetaBuilder {
final String name = propertyName(method.getName());
properties.add(new DtoMetaProperty(typeManager, dtoType, method, name));
} catch (Exception e) {
- CoreLog.log.debug("exclude on " + dtoType + " method " + method, e);
+ CoreLog.log.log(DEBUG, "exclude on " + dtoType + " method " + method, e);
}
}
}
@@ -77,7 +79,7 @@ final class DtoMetaBuilder {
constructorList.add(new DtoMetaConstructor(typeManager, constructor, dtoType));
} catch (Exception e) {
// we don't want that constructor
- CoreLog.log.debug("exclude on " + dtoType + " constructor " + constructor, e);
+ CoreLog.log.log(DEBUG, "exclude on " + dtoType + " constructor " + constructor, e);
}
}
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoMetaConstructor.java b/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoMetaConstructor.java
index efd7c97d2..04f213ef0 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoMetaConstructor.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoMetaConstructor.java
@@ -21,7 +21,7 @@ final class DtoMetaConstructor {
this.types = constructor.getParameterTypes();
this.scalarTypes = new ScalarType[types.length];
for (int i = 0; i < types.length; i++) {
- scalarTypes[i] = typeManager.getScalarType(types[i]);
+ scalarTypes[i] = typeManager.type(types[i]);
}
this.handle = LOOKUP.findConstructor(someClass, typeFor(types));
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoMetaProperty.java b/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoMetaProperty.java
index b73500434..846c559ed 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoMetaProperty.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoMetaProperty.java
@@ -25,7 +25,7 @@ final class DtoMetaProperty implements DtoReadSet {
this.name = name;
if (writeMethod != null) {
this.setter = lookupMethodHandle(dtoType, writeMethod);
- this.scalarType = typeManager.getScalarType(propertyType(writeMethod), propertyClass(writeMethod));
+ this.scalarType = typeManager.type(propertyType(writeMethod), propertyClass(writeMethod));
} else {
this.scalarType = null;
this.setter = null;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/el/CharMatch.java b/ebean-core/src/main/java/io/ebeaninternal/server/el/CharMatch.java
index 13af0c02a..53622a8ab 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/el/CharMatch.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/el/CharMatch.java
@@ -23,7 +23,7 @@ public final class CharMatch {
return false;
}
- char ta[] = other.toCharArray();
+ char[] ta = other.toCharArray();
int pos = -1;
while (++pos < maxLength) {
@@ -42,7 +42,7 @@ public final class CharMatch {
return false;
}
- char ta[] = other.toCharArray();
+ char[] ta = other.toCharArray();
int offset = ta.length - maxLength;
int pos = maxLength;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/el/ElFilter.java b/ebean-core/src/main/java/io/ebeaninternal/server/el/ElFilter.java
index bd28af35c..105dff381 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/el/ElFilter.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/el/ElFilter.java
@@ -46,7 +46,7 @@ public final class ElFilter implements Filter {
return this;
}
- protected boolean isMatch(T bean) {
+ boolean isMatch(T bean) {
for (ElMatcher matcher : matches) {
if (!matcher.isMatch(bean)) {
return false;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/el/ElPropertyChain.java b/ebean-core/src/main/java/io/ebeaninternal/server/el/ElPropertyChain.java
index d10acaedc..b04bacb24 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/el/ElPropertyChain.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/el/ElPropertyChain.java
@@ -227,20 +227,9 @@ public final class ElPropertyChain implements ElPropertyValue {
return lastBeanProperty;
}
-
- @Override
- public boolean isDateTimeCapable() {
- return scalarType != null && scalarType.isDateTimeCapable();
- }
-
@Override
public int jdbcType() {
- return scalarType == null ? 0 : scalarType.getJdbcType();
- }
-
- @Override
- public Object parseDateTime(long systemTimeMillis) {
- return scalarType.convertFromMillis(systemTimeMillis);
+ return scalarType == null ? 0 : scalarType.jdbcType();
}
@Override
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/executor/DaemonExecutorService.java b/ebean-core/src/main/java/io/ebeaninternal/server/executor/DaemonExecutorService.java
index af23a086d..ea7ce58e4 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/executor/DaemonExecutorService.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/executor/DaemonExecutorService.java
@@ -1,12 +1,12 @@
package io.ebeaninternal.server.executor;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import io.avaje.applog.AppLog;
import java.util.concurrent.*;
import java.util.concurrent.locks.ReentrantLock;
+import static java.lang.System.Logger.Level.*;
+
/**
* A "CachedThreadPool" based on Daemon threads.
*
@@ -14,7 +14,7 @@ import java.util.concurrent.locks.ReentrantLock;
*/
final class DaemonExecutorService {
- private static final Logger logger = LoggerFactory.getLogger(DaemonExecutorService.class);
+ private static final System.Logger logger = AppLog.getLogger(DaemonExecutorService.class);
private final ReentrantLock lock = new ReentrantLock(false);
private final String namePrefix;
@@ -44,19 +44,19 @@ final class DaemonExecutorService {
lock.lock();
try {
if (service.isShutdown()) {
- logger.debug("DaemonExecutorService[{}] already shut down", namePrefix);
+ logger.log(DEBUG, "DaemonExecutorService[{0}] already shut down", namePrefix);
return;
}
try {
- logger.debug("DaemonExecutorService[{}] shutting down...", namePrefix);
+ logger.log(DEBUG, "DaemonExecutorService[{0}] shutting down...", namePrefix);
service.shutdown();
if (!service.awaitTermination(shutdownWaitSeconds, TimeUnit.SECONDS)) {
- logger.info("DaemonExecutorService[{}] shut down timeout exceeded. Terminating running threads.", namePrefix);
+ logger.log(INFO, "DaemonExecutorService[{0}] shut down timeout exceeded. Terminating running threads.", namePrefix);
service.shutdownNow();
}
} catch (Exception e) {
- logger.error("Error during shutdown of DaemonThreadPool[" + namePrefix + "]", e);
+ logger.log(ERROR, "Error during shutdown of DaemonThreadPool[" + namePrefix + "]", e);
e.printStackTrace();
}
} finally {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/executor/DaemonScheduleThreadPool.java b/ebean-core/src/main/java/io/ebeaninternal/server/executor/DaemonScheduleThreadPool.java
index 98265905f..1dd961c6c 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/executor/DaemonScheduleThreadPool.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/executor/DaemonScheduleThreadPool.java
@@ -1,18 +1,19 @@
package io.ebeaninternal.server.executor;
import io.ebeaninternal.api.CoreLog;
-import org.slf4j.Logger;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReentrantLock;
+import static java.lang.System.Logger.Level.*;
+
/**
* Daemon based ScheduleThreadPool.
*/
public final class DaemonScheduleThreadPool extends ScheduledThreadPoolExecutor {
- private static final Logger log = CoreLog.log;
+ private static final System.Logger log = CoreLog.log;
private final ReentrantLock lock = new ReentrantLock();
private final String namePrefix;
@@ -38,19 +39,19 @@ public final class DaemonScheduleThreadPool extends ScheduledThreadPoolExecutor
lock.lock();
try {
if (super.isShutdown()) {
- log.debug("Already shutdown threadPool {}", namePrefix);
+ log.log(DEBUG, "Already shutdown threadPool {0}", namePrefix);
return;
}
try {
- log.trace("shutting down threadPool {}", namePrefix);
+ log.log(TRACE, "shutting down threadPool {0}", namePrefix);
super.shutdown();
if (!super.awaitTermination(shutdownWaitSeconds, TimeUnit.SECONDS)) {
- log.info("Shutdown wait timeout exceeded. Terminating running threads for {}", namePrefix);
+ log.log(INFO, "Shutdown wait timeout exceeded. Terminating running threads for {0}", namePrefix);
super.shutdownNow();
}
- log.trace("shutdown complete for threadPool {}", namePrefix);
+ log.log(TRACE, "shutdown complete for threadPool {0}", namePrefix);
} catch (Exception e) {
- log.error("Error during shutdown of threadPool " + namePrefix, e);
+ log.log(ERROR, "Error during shutdown of threadPool " + namePrefix, e);
e.printStackTrace();
}
} finally {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/executor/DefaultBackgroundExecutor.java b/ebean-core/src/main/java/io/ebeaninternal/server/executor/DefaultBackgroundExecutor.java
index b4c13a8bd..47271bc38 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/executor/DefaultBackgroundExecutor.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/executor/DefaultBackgroundExecutor.java
@@ -1,13 +1,13 @@
package io.ebeaninternal.server.executor;
+import io.avaje.applog.AppLog;
import io.avaje.lang.NonNullApi;
import io.ebean.config.BackgroundExecutorWrapper;
import io.ebeaninternal.api.SpiBackgroundExecutor;
import java.util.concurrent.*;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import static java.lang.System.Logger.Level.*;
/**
* The default implementation of the BackgroundExecutor.
@@ -15,7 +15,7 @@ import org.slf4j.LoggerFactory;
@NonNullApi
public final class DefaultBackgroundExecutor implements SpiBackgroundExecutor {
- private static final Logger log = LoggerFactory.getLogger("io.ebean.BackgroundExecutor");
+ private static final System.Logger log = AppLog.getLogger("io.ebean.BackgroundExecutor");
private final ScheduledExecutorService schedulePool;
private final DaemonExecutorService pool;
@@ -28,7 +28,6 @@ public final class DefaultBackgroundExecutor implements SpiBackgroundExecutor {
this.schedulePool = new DaemonScheduleThreadPool(schedulePoolSize, shutdownWaitSeconds, namePrefix + "-periodic-");
this.pool = new DaemonExecutorService(shutdownWaitSeconds, namePrefix);
this.wrapper = wrapper;
- log.debug("Created backgroundExecutor {} (schedulePoolSize={}, shutdownWaitSeconds={})", namePrefix, schedulePoolSize, shutdownWaitSeconds);
}
/**
@@ -59,20 +58,20 @@ public final class DefaultBackgroundExecutor implements SpiBackgroundExecutor {
* This is used in methods that accepts a Runnable and return
* either void or ScheduledFuture, as there is
* normally no Future.get() call.
- *
+ *
* Note: When submitting a Callable, you must check
* Future.get() for exceptions.
*/
private Runnable logExceptions(Runnable task) {
long queued = System.nanoTime();
- log.trace("Queued {}", task);
+ log.log(TRACE, "Queued {0}", task);
return () -> {
try {
- if (log.isTraceEnabled()) {
+ if (log.isLoggable(TRACE)) {
long start = System.nanoTime();
- log.trace("Start {} (delay time {} us)", task, (start - queued) / 1000L);
+ log.log(TRACE, "Start {0} (delay time {1} us)", task, (start - queued) / 1000L);
task.run();
- log.trace("Stop {} (exec time {} us)", task, (System.nanoTime() - start) / 1000L);
+ log.log(TRACE, "Stop {0} (exec time {1} us)", task, (System.nanoTime() - start) / 1000L);
} else {
task.run();
}
@@ -80,7 +79,7 @@ public final class DefaultBackgroundExecutor implements SpiBackgroundExecutor {
// log any exception here. Note they will not bubble up to the calling user
// unless Future.get() is checked. (Which is almost never done on scheduled
// background executions)
- log.error("Error while executing the task {}", task, t);
+ log.log(ERROR, "Error while executing the task " + task, t);
throw t;
}
};
@@ -107,31 +106,31 @@ public final class DefaultBackgroundExecutor implements SpiBackgroundExecutor {
@Override
public ScheduledFuture> scheduleWithFixedDelay(Runnable task, long initialDelay, long delay, TimeUnit unit) {
- return schedulePool.scheduleWithFixedDelay(wrap(logExceptions(task)), initialDelay, delay, unit);
+ return schedulePool.scheduleWithFixedDelay(logExceptions(task), initialDelay, delay, unit);
}
@Override
public ScheduledFuture> scheduleAtFixedRate(Runnable task, long initialDelay, long delay, TimeUnit unit) {
- return schedulePool.scheduleAtFixedRate(wrap(logExceptions(task)), initialDelay, delay, unit);
+ return schedulePool.scheduleAtFixedRate(logExceptions(task), initialDelay, delay, unit);
}
@Override
public ScheduledFuture> schedule(Runnable task, long delay, TimeUnit unit) {
- return schedulePool.schedule(wrap(logExceptions(task)), delay, unit);
+ return schedulePool.schedule(logExceptions(task), delay, unit);
}
@Override
public ScheduledFuture schedule(Callable task, long delay, TimeUnit unit) {
// Note: No "logExceptions" as we expect Future.get() by the invoker
- return schedulePool.schedule(wrap(task), delay, unit);
+ return schedulePool.schedule(task, delay, unit);
}
@Override
public void shutdown() {
- log.trace("BackgroundExecutor shutting down");
+ log.log(TRACE, "BackgroundExecutor shutting down");
schedulePool.shutdown();
pool.shutdown();
- log.debug("BackgroundExecutor stopped");
+ log.log(DEBUG, "BackgroundExecutor stopped");
}
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/DefaultExpressionList.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/DefaultExpressionList.java
index 26f225f3a..234fd28c2 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/DefaultExpressionList.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/DefaultExpressionList.java
@@ -76,11 +76,7 @@ public class DefaultExpressionList implements SpiExpressionList {
}
public DefaultExpressionList(Query query, ExpressionList parentExprList) {
- this(query, query.getExpressionFactory(), parentExprList);
- }
-
- DefaultExpressionList(Query query, ExpressionFactory expr, ExpressionList