diff --git a/addons/hive-bridge/src/test/java/org/apache/atlas/hive/hook/HiveHookIT.java b/addons/hive-bridge/src/test/java/org/apache/atlas/hive/hook/HiveHookIT.java index 5592b66..9176fb9 100755 --- a/addons/hive-bridge/src/test/java/org/apache/atlas/hive/hook/HiveHookIT.java +++ b/addons/hive-bridge/src/test/java/org/apache/atlas/hive/hook/HiveHookIT.java @@ -180,7 +180,7 @@ public class HiveHookIT extends HiveITBase { private void verifyTimestamps(Referenceable ref, String property, long expectedTime) throws ParseException { //Verify timestamps. String createTimeStr = (String) ref.get(property); - Date createDate = AtlasBaseTypeDef.DATE_FORMATTER.parse(createTimeStr); + Date createDate = AtlasBaseTypeDef.getDateFormatter().parse(createTimeStr); Assert.assertNotNull(createTimeStr); if (expectedTime > 0) { diff --git a/intg/src/main/java/org/apache/atlas/model/instance/AtlasStruct.java b/intg/src/main/java/org/apache/atlas/model/instance/AtlasStruct.java index 995ff54..41061bc 100644 --- a/intg/src/main/java/org/apache/atlas/model/instance/AtlasStruct.java +++ b/intg/src/main/java/org/apache/atlas/model/instance/AtlasStruct.java @@ -39,6 +39,7 @@ import javax.xml.bind.annotation.XmlSeeAlso; import org.apache.atlas.model.PList; import org.apache.atlas.model.SearchFilter.SortType; +import org.apache.atlas.model.typedef.AtlasBaseTypeDef; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.MapUtils; @@ -58,6 +59,7 @@ public class AtlasStruct implements Serializable { private static final long serialVersionUID = 1L; public static final String SERIALIZED_DATE_FORMAT_STR = "yyyyMMdd-HH:mm:ss.SSS-Z"; + @Deprecated public static final DateFormat DATE_FORMATTER = new SimpleDateFormat(SERIALIZED_DATE_FORMAT_STR); private String typeName; @@ -266,7 +268,7 @@ public class AtlasStruct implements Serializable { if (value == null) { sb.append(value); } else { - sb.append(DATE_FORMATTER.format(value)); + sb.append(AtlasBaseTypeDef.getDateFormatter().format(value)); } return sb; diff --git a/intg/src/main/java/org/apache/atlas/model/typedef/AtlasBaseTypeDef.java b/intg/src/main/java/org/apache/atlas/model/typedef/AtlasBaseTypeDef.java index 8437300..d8e7184 100644 --- a/intg/src/main/java/org/apache/atlas/model/typedef/AtlasBaseTypeDef.java +++ b/intg/src/main/java/org/apache/atlas/model/typedef/AtlasBaseTypeDef.java @@ -123,13 +123,31 @@ public abstract class AtlasBaseTypeDef implements java.io.Serializable { ATLAS_TYPE_OBJECT_ID, }; + public static final String SERIALIZED_DATE_FORMAT_STR = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"; + + @Deprecated public static final DateFormat DATE_FORMATTER = new SimpleDateFormat(SERIALIZED_DATE_FORMAT_STR); static { DATE_FORMATTER.setTimeZone(TimeZone.getTimeZone("UTC")); } + public static DateFormat getDateFormatter() { + return THREAD_LOCAL_DATE_FORMAT.get(); + } + + private static final ThreadLocal<DateFormat> THREAD_LOCAL_DATE_FORMAT = new ThreadLocal<DateFormat>() { + @Override + public DateFormat initialValue() { + DateFormat ret = new SimpleDateFormat(SERIALIZED_DATE_FORMAT_STR); + + ret.setTimeZone(TimeZone.getTimeZone("UTC")); + + return ret; + } + }; + private final TypeCategory category; private String guid = null; private String createdBy = null; @@ -390,7 +408,7 @@ public abstract class AtlasBaseTypeDef implements java.io.Serializable { if (value == null) { sb.append(value); } else { - sb.append(DATE_FORMATTER.format(value)); + sb.append(getDateFormatter().format(value)); } return sb; diff --git a/intg/src/main/java/org/apache/atlas/type/AtlasBuiltInTypes.java b/intg/src/main/java/org/apache/atlas/type/AtlasBuiltInTypes.java index 139d4ec..1039de6 100644 --- a/intg/src/main/java/org/apache/atlas/type/AtlasBuiltInTypes.java +++ b/intg/src/main/java/org/apache/atlas/type/AtlasBuiltInTypes.java @@ -479,7 +479,7 @@ public class AtlasBuiltInTypes { return new Date(((Number) obj).longValue()); } else { try { - return AtlasBaseTypeDef.DATE_FORMATTER.parse(obj.toString()); + return AtlasBaseTypeDef.getDateFormatter().parse(obj.toString()); } catch (ParseException excp) { try { // try to read it as a number long longDate = Long.valueOf(obj.toString()); diff --git a/intg/src/main/java/org/apache/atlas/utils/AtlasJson.java b/intg/src/main/java/org/apache/atlas/utils/AtlasJson.java index ec185d2..a82b7ba 100644 --- a/intg/src/main/java/org/apache/atlas/utils/AtlasJson.java +++ b/intg/src/main/java/org/apache/atlas/utils/AtlasJson.java @@ -39,8 +39,6 @@ import java.io.IOException; import java.text.ParseException; import java.util.Collection; import java.util.Date; -import java.util.List; -import java.util.Map; public class AtlasJson { @@ -187,7 +185,7 @@ public class AtlasJson { @Override public void serialize(Date value, JsonGenerator jgen, SerializerProvider provider) throws IOException { if (value != null) { - jgen.writeString(AtlasBaseTypeDef.DATE_FORMATTER.format(value)); + jgen.writeString(AtlasBaseTypeDef.getDateFormatter().format(value)); } } } @@ -201,7 +199,7 @@ public class AtlasJson { if (value != null) { try { - ret = AtlasBaseTypeDef.DATE_FORMATTER.parse(value); + ret = AtlasBaseTypeDef.getDateFormatter().parse(value); } catch (ParseException excp) { } } diff --git a/intg/src/main/java/org/apache/atlas/v1/model/instance/Id.java b/intg/src/main/java/org/apache/atlas/v1/model/instance/Id.java index 8ad752a..a7b699a 100644 --- a/intg/src/main/java/org/apache/atlas/v1/model/instance/Id.java +++ b/intg/src/main/java/org/apache/atlas/v1/model/instance/Id.java @@ -236,7 +236,7 @@ public class Id implements Serializable { } try { - return AtlasBaseTypeDef.DATE_FORMATTER.parse(val.toString()); + return AtlasBaseTypeDef.getDateFormatter().parse(val.toString()); } catch (ParseException excp) { // ignore } diff --git a/intg/src/test/java/org/apache/atlas/type/TestAtlasDateType.java b/intg/src/test/java/org/apache/atlas/type/TestAtlasDateType.java index 6236a6d..9e84331 100644 --- a/intg/src/test/java/org/apache/atlas/type/TestAtlasDateType.java +++ b/intg/src/test/java/org/apache/atlas/type/TestAtlasDateType.java @@ -46,7 +46,7 @@ public class TestAtlasDateType { private final Object[] invalidValues = { "12ab", "abcd", "-12ab", }; private final Date now = new Date(); - private final String strNow = AtlasBaseTypeDef.DATE_FORMATTER.format(now); + private final String strNow = AtlasBaseTypeDef.getDateFormatter().format(now); @Test public void testDateTypeDefaultValue() {