diff --git a/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/Options.java b/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/Options.java index 73a6061411..2e9007cd35 100644 --- a/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/Options.java +++ b/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/Options.java @@ -24,6 +24,7 @@ import java.lang.reflect.Method; import java.security.AccessController; import java.security.PrivilegedActionException; +import java.time.Duration; import java.util.Collection; import java.util.LinkedList; import java.util.List; @@ -428,6 +429,11 @@ private Object stringToObject(String str, Class type) throws Exception { if (type == primWrapper[0]) return stringToObject(str, (Class) primWrapper[1]); + // special case for Durations + if (type == Duration.class) { + return Duration.ofMillis(Long.valueOf(str)); + } + // look for a string constructor Exception err = null; try { @@ -627,7 +633,7 @@ public String removeProperty(String key, String key2, String def) { */ private static class EmptyOptions extends Options { - + private static final long serialVersionUID = 1L; @Override diff --git a/openjpa-lib/src/test/java/org/apache/openjpa/lib/util/TestOptions.java b/openjpa-lib/src/test/java/org/apache/openjpa/lib/util/TestOptions.java index c1ae1a7363..0bd23f492e 100644 --- a/openjpa-lib/src/test/java/org/apache/openjpa/lib/util/TestOptions.java +++ b/openjpa-lib/src/test/java/org/apache/openjpa/lib/util/TestOptions.java @@ -18,6 +18,7 @@ */ package org.apache.openjpa.lib.util; +import java.time.Duration; import java.util.Properties; import org.junit.Before; @@ -103,9 +104,11 @@ public void testSetObject() { inner = new Inner(); opts = new Options(); opts.setProperty("mixed", "STR,1"); + opts.setProperty("maxWait", "10000"); opts.setInto(inner); assertEquals(1, inner.getInt()); assertEquals("STR", inner.getString()); + assertEquals(10_000, inner.getMaxWait().toMillis()); } /** @@ -124,6 +127,7 @@ public static class Inner { private Inner _nullInner = null; private int[] _range1 = new int[2]; private int[] _range2 = new int[2]; + private Duration _maxWait = Duration.ofMillis(-1); public Inner() { } @@ -200,6 +204,14 @@ public Inner getNullInner() { public void setNullInner(Inner in) { _nullInner = in; } + + public Duration getMaxWait() { + return _maxWait; + } + + public void setMaxWait(Duration dur) { + _maxWait = dur; + } } /**