You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by ma...@apache.org on 2012/08/20 23:48:34 UTC
svn commit: r1375250 - in /ant/ivy/core/trunk: ./ src/java/org/apache/ivy/
src/java/org/apache/ivy/ant/ src/java/org/apache/ivy/plugins/parser/xml/
src/java/org/apache/ivy/plugins/report/ src/java/org/apache/ivy/util/
Author: maartenc
Date: Mon Aug 20 21:48:33 2012
New Revision: 1375250
URL: http://svn.apache.org/viewvc?rev=1375250&view=rev
Log:
FIX: SimpleDateFormat is not thread safe (IVY-1373)
Added:
ant/ivy/core/trunk/src/java/org/apache/ivy/util/DateUtil.java
Modified:
ant/ivy/core/trunk/CHANGES.txt
ant/ivy/core/trunk/src/java/org/apache/ivy/Ivy.java
ant/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyDeliver.java
ant/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyPublish.java
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParser.java
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorUpdater.java
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorWriter.java
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/report/XmlReportParser.java
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/report/XmlReportWriter.java
Modified: ant/ivy/core/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/CHANGES.txt?rev=1375250&r1=1375249&r2=1375250&view=diff
==============================================================================
--- ant/ivy/core/trunk/CHANGES.txt (original)
+++ ant/ivy/core/trunk/CHANGES.txt Mon Aug 20 21:48:33 2012
@@ -130,6 +130,7 @@ for detailed view of each issue, please
trunk
=====================================
+- FIX: SimpleDateFormat is not thread safe (IVY-1373)
- FIX: Maven 'hk2-jar' packaging is now supported (IVY-1357)
- FIX: Maven 'orbit' and 'pear' packaging is now supported (IVY-899)
- FIX: Memory leak and infinite loop in ModuleId.java (IVY-1362)
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/Ivy.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/Ivy.java?rev=1375250&r1=1375249&r2=1375250&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/Ivy.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/Ivy.java Mon Aug 20 21:48:33 2012
@@ -65,6 +65,7 @@ import org.apache.ivy.plugins.repository
import org.apache.ivy.plugins.resolver.BasicResolver;
import org.apache.ivy.plugins.resolver.DependencyResolver;
import org.apache.ivy.plugins.trigger.Trigger;
+import org.apache.ivy.util.DateUtil;
import org.apache.ivy.util.HostUtil;
import org.apache.ivy.util.Message;
import org.apache.ivy.util.MessageLoggerEngine;
@@ -130,7 +131,10 @@ public class Ivy {
private static final int KILO = 1024;
- public static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyyMMddHHmmss");
+ /**
+ * @deprecated Use the {@link DateUtil} utility class instead.
+ */
+ public static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat(DateUtil.DATE_FORMAT_PATTERN);
/**
* the current version of Ivy, as displayed on the console when
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyDeliver.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyDeliver.java?rev=1375250&r1=1375249&r2=1375250&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyDeliver.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyDeliver.java Mon Aug 20 21:48:33 2012
@@ -28,6 +28,7 @@ import org.apache.ivy.core.module.descri
import org.apache.ivy.core.module.id.ModuleRevisionId;
import org.apache.ivy.core.module.status.StatusManager;
import org.apache.ivy.core.settings.IvySettings;
+import org.apache.ivy.util.DateUtil;
import org.apache.ivy.util.Message;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.taskdefs.CallTarget;
@@ -375,7 +376,7 @@ public class IvyDeliver extends IvyTask
Date pubdate = getPubDate(this.pubdate, new Date());
if (pubRevision == null) {
if (revision.startsWith("working@")) {
- pubRevision = Ivy.DATE_FORMAT.format(pubdate);
+ pubRevision = DateUtil.format(pubdate);
} else {
pubRevision = revision;
}
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyPublish.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyPublish.java?rev=1375250&r1=1375249&r2=1375250&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyPublish.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyPublish.java Mon Aug 20 21:48:33 2012
@@ -33,6 +33,7 @@ import org.apache.ivy.core.module.id.Art
import org.apache.ivy.core.module.id.ModuleRevisionId;
import org.apache.ivy.core.publish.PublishOptions;
import org.apache.ivy.core.settings.IvySettings;
+import org.apache.ivy.util.DateUtil;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.DynamicAttribute;
@@ -271,7 +272,7 @@ public class IvyPublish extends IvyTask
Date pubdate = getPubDate(this.pubdate, new Date());
if (pubRevision == null) {
if (revision.startsWith("working@")) {
- pubRevision = Ivy.DATE_FORMAT.format(pubdate);
+ pubRevision = DateUtil.format(pubdate);
} else {
pubRevision = revision;
}
@@ -295,7 +296,7 @@ public class IvyPublish extends IvyTask
deliver.setDeliveryList(deliveryList);
deliver.setModule(getModule());
deliver.setOrganisation(getOrganisation());
- deliver.setPubdate(Ivy.DATE_FORMAT.format(pubdate));
+ deliver.setPubdate(DateUtil.format(pubdate));
deliver.setPubrevision(getPubrevision());
deliver.setPubbranch(getPubbranch());
deliver.setRevision(getRevision());
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParser.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParser.java?rev=1375250&r1=1375249&r2=1375250&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParser.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParser.java Mon Aug 20 21:48:33 2012
@@ -71,6 +71,7 @@ import org.apache.ivy.plugins.repository
import org.apache.ivy.plugins.repository.url.URLResource;
import org.apache.ivy.plugins.resolver.DependencyResolver;
import org.apache.ivy.plugins.resolver.FileSystemResolver;
+import org.apache.ivy.util.DateUtil;
import org.apache.ivy.util.FileUtil;
import org.apache.ivy.util.Message;
import org.apache.ivy.util.XMLHelper;
@@ -1004,7 +1005,7 @@ public class XmlModuleDescriptorParser e
String pubDate = settings.substitute(attributes.getValue("publication"));
if (pubDate != null && pubDate.length() > 0) {
try {
- getMd().setPublicationDate(Ivy.DATE_FORMAT.parse(pubDate));
+ getMd().setPublicationDate(DateUtil.parse(pubDate));
} catch (ParseException e) {
addError("invalid publication date format: " + pubDate);
getMd().setPublicationDate(getDefaultPubDate());
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorUpdater.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorUpdater.java?rev=1375250&r1=1375249&r2=1375250&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorUpdater.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorUpdater.java Mon Aug 20 21:48:33 2012
@@ -41,7 +41,6 @@ import java.util.StringTokenizer;
import javax.xml.parsers.ParserConfigurationException;
-import org.apache.ivy.Ivy;
import org.apache.ivy.core.module.descriptor.Configuration;
import org.apache.ivy.core.module.descriptor.DefaultModuleDescriptor;
import org.apache.ivy.core.module.descriptor.DependencyDescriptor;
@@ -57,6 +56,7 @@ import org.apache.ivy.plugins.repository
import org.apache.ivy.plugins.repository.file.FileResource;
import org.apache.ivy.plugins.repository.url.URLResource;
import org.apache.ivy.util.Checks;
+import org.apache.ivy.util.DateUtil;
import org.apache.ivy.util.Message;
import org.apache.ivy.util.XMLHelper;
import org.apache.ivy.util.extendable.ExtendableItemHelper;
@@ -755,7 +755,7 @@ public final class XmlModuleDescriptorUp
}
write(" status=\"" + XMLHelper.escape(status) + "\"");
if (pubdate != null) {
- write(" publication=\"" + Ivy.DATE_FORMAT.format(pubdate) + "\"");
+ write(" publication=\"" + DateUtil.format(pubdate) + "\"");
} else if (attributes.getValue("publication") != null) {
write(" publication=\""
+ substitute(settings, attributes.getValue("publication")) + "\"");
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorWriter.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorWriter.java?rev=1375250&r1=1375249&r2=1375250&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorWriter.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorWriter.java Mon Aug 20 21:48:33 2012
@@ -27,7 +27,6 @@ import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
-import org.apache.ivy.Ivy;
import org.apache.ivy.core.IvyPatternHelper;
import org.apache.ivy.core.module.descriptor.Artifact;
import org.apache.ivy.core.module.descriptor.Configuration;
@@ -43,6 +42,7 @@ import org.apache.ivy.core.module.descri
import org.apache.ivy.core.module.descriptor.OverrideDependencyDescriptorMediator;
import org.apache.ivy.core.module.id.ModuleRevisionId;
import org.apache.ivy.plugins.matcher.MapMatcher;
+import org.apache.ivy.util.DateUtil;
import org.apache.ivy.util.Message;
import org.apache.ivy.util.StringUtils;
import org.apache.ivy.util.XMLHelper;
@@ -450,7 +450,7 @@ public final class XmlModuleDescriptorWr
}
out.println("\t\tstatus=\"" + XMLHelper.escape(md.getStatus()) + "\"");
out.println("\t\tpublication=\""
- + Ivy.DATE_FORMAT.format(md.getResolvedPublicationDate()) + "\"");
+ + DateUtil.format(md.getResolvedPublicationDate()) + "\"");
if (md.isDefault()) {
out.println("\t\tdefault=\"true\"");
}
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/report/XmlReportParser.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/report/XmlReportParser.java?rev=1375250&r1=1375249&r2=1375250&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/report/XmlReportParser.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/report/XmlReportParser.java Mon Aug 20 21:48:33 2012
@@ -31,7 +31,6 @@ import java.util.TreeMap;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
-import org.apache.ivy.Ivy;
import org.apache.ivy.core.cache.ArtifactOrigin;
import org.apache.ivy.core.module.descriptor.Artifact;
import org.apache.ivy.core.module.descriptor.DefaultArtifact;
@@ -39,6 +38,7 @@ import org.apache.ivy.core.module.id.Mod
import org.apache.ivy.core.report.ArtifactDownloadReport;
import org.apache.ivy.core.report.DownloadStatus;
import org.apache.ivy.core.report.MetadataArtifactDownloadReport;
+import org.apache.ivy.util.DateUtil;
import org.apache.ivy.util.extendable.ExtendableItemHelper;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
@@ -108,7 +108,7 @@ public class XmlReportParser {
try {
String pubDateAttr = attributes.getValue("pubdate");
if (pubDateAttr != null) {
- pubdate = Ivy.DATE_FORMAT.parse(pubDateAttr);
+ pubdate = DateUtil.parse(pubDateAttr);
}
skip = false;
} catch (ParseException e) {
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/report/XmlReportWriter.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/report/XmlReportWriter.java?rev=1375250&r1=1375249&r2=1375250&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/report/XmlReportWriter.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/report/XmlReportWriter.java Mon Aug 20 21:48:33 2012
@@ -30,7 +30,6 @@ import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
-import org.apache.ivy.Ivy;
import org.apache.ivy.core.cache.ArtifactOrigin;
import org.apache.ivy.core.module.descriptor.License;
import org.apache.ivy.core.module.descriptor.ModuleDescriptor;
@@ -42,6 +41,7 @@ import org.apache.ivy.core.report.Metada
import org.apache.ivy.core.resolve.IvyNode;
import org.apache.ivy.core.resolve.IvyNodeCallers.Caller;
import org.apache.ivy.core.resolve.IvyNodeEviction.EvictionData;
+import org.apache.ivy.util.DateUtil;
import org.apache.ivy.util.StringUtils;
import org.apache.ivy.util.XMLHelper;
@@ -85,7 +85,7 @@ public class XmlReportWriter {
}
out.println("\t\tconf=\"" + XMLHelper.escape(report.getConfiguration()) + "\"");
out.println("\t\tconfs=\"" + XMLHelper.escape(StringUtils.join(confs, ", ")) + "\"");
- out.println("\t\tdate=\"" + Ivy.DATE_FORMAT.format(report.getDate()) + "\"/>");
+ out.println("\t\tdate=\"" + DateUtil.format(report.getDate()) + "\"/>");
out.println("\t<dependencies>");
@@ -120,7 +120,7 @@ public class XmlReportWriter {
details.append(" status=\"");
details.append(XMLHelper.escape(dep.getDescriptor().getStatus()));
details.append("\" pubdate=\"");
- details.append(Ivy.DATE_FORMAT.format(new Date(dep.getPublication())));
+ details.append(DateUtil.format(new Date(dep.getPublication())));
details.append("\" resolver=\"");
details.append(XMLHelper.escape(
dep.getModuleRevision().getResolver().getName()));
Added: ant/ivy/core/trunk/src/java/org/apache/ivy/util/DateUtil.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/util/DateUtil.java?rev=1375250&view=auto
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/util/DateUtil.java (added)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/util/DateUtil.java Mon Aug 20 21:48:33 2012
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.ivy.util;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+public class DateUtil {
+
+ private DateUtil() {
+ //Utility class
+ }
+
+ public static final String DATE_FORMAT_PATTERN = "yyyyMMddHHmmss";
+
+ public static String format(Date date) {
+ SimpleDateFormat format = new SimpleDateFormat(DATE_FORMAT_PATTERN);
+ return format.format(date);
+ }
+
+ public static Date parse(String date) throws ParseException {
+ SimpleDateFormat format = new SimpleDateFormat(DATE_FORMAT_PATTERN);
+ return format.parse(date);
+ }
+
+}