OK but these things are not enough. I'm a long time Java dev and
all these were known in c.l.j.p. and IRC since a
very long time. I was doing precisely that, even using the "functional Java" libs when they came out and doing even more radical things...
And I can tell you that even when doing that switching to Clojure is pure joy.
Because even when doing what TFA talks about, this still doesn't solve lots of very nasty Java issues, like the totally outdated approach to concurrency.
What Java programmers can learn from Clojure is that it's possible to create a language targetting the JVM which cannot deadlock and which can offer a dramatic reduction in the size of the source code.
Sadly you simply cannot apply these to "Java the language": Java is utterly verbose and there's no way to have a "sane" way to deal with concurrency in Java (yes, I've got my Java "Concurrency In Practice" copy since it came out).
The other major thing to learn about Clojure + Datomic is that there's a world out there made of something else than the special kind of hell that Java/C# + ORM ([N]Hibernate) + XML + SQL is. (and before you start whining like cry-babies, Datomic can be backed by SQL DBs)
Programmers who haven't done it so yet should really go watch videos by Rich Hickey, here are three particularly good ones:
"Simple made easy"
"The value of values"
and "The Database as a value"
http://www.infoq.com/presentations/Datomic-Database-Value
Now sure some will criticize Clojure as being a Lisp-1 and not having real reader macros, others will rightly point out that Clojure's documentation sucks big times and that stacktraces are still a serious issue.
But at least Clojure is showing that there's a saner way than this Java madness.
You have to realize that Clojure is Rich Hickey's fourth attempt or so at a Lisp dialect and that he had lots of very painful experience working on Java Real-World [TM] maddening codebases.