james-mime4j-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ioan Eugen Stan <stan.ieu...@gmail.com>
Subject replace usage of java.util.Date in mime4j
Date Sat, 25 Aug 2012 15:25:00 GMT

I just took ownership of MIME4J-98 and I did a bit of research.

The issue takes into account two problems:

1. parsing/formatting speed of Date (SImpleDateFormat is not thread
safe and is slow)
2. java.util.Date is not suited for protocol use (does not take
TimeZone, Locale into account, is mutable == not thread safe, etc.)

Possible solutions:

1.  Formatting/Parsing

JodaTime and FastDateFormat from Apache Commons Lang are good
candidates for formatting.

I wrote a mini-benchmark [1] in class FormatMiniBencTest. Both are
much faster than the original version (almost 10 times), especially
when running in a multi-threaded environment. JodaTime seems slightly
faster than FastDateFormat.

2. Replacement for Date

FastDateFormat only does formatting. JodaTime provides a better
alternative to java.util.Date and Calendar. JodaTime's Instant
represents an immutable instant in time and I believe is the best
solution to use because it takes into acount TimeZone and Chronology.
Another option is DateTime which needs a TimeZone to represent
absolute time.

Using JodaTime will mean adding a dependency to mime4j. JodaTime is
ASFv2 licensed and it's API is very stable (also compatible with 1.6).

My recommendation is we switch to JodaTime for time management for
performance reasons, thread safety and better date time handling.

What do you think?

[1] http://joda-time.sourceforge.net/
[2] https://github.com/ieugen/james-mime4j/tree/MIME4J-98
[3] http://commons.apache.org/lang/api-3.1/index.html
[4] https://github.com/ieugen/james-mime4j/blob/MIME4J-98/core/src/test/java/org/apache/james/mime4j/util/FormatDateMiniBenchTest.java

Ioan Eugen Stan / CTO / http://axemblr.com

View raw message