
Ask HN: what are the most interesting Java projects you've seen lately? - rodrigoavie
So, just say what open source Java project you've seen lately that boggled your mind or helped you in some way<p>I'm learning Java and I'd like to browse source codes and pick up interesting findings
======
spartango
I've been using <http://vertx.io> pretty heavily in the last few months, and
rather enjoying it. It's an asynchronous I/O framework that wraps the powerful
NIO and Netty infrastructure with some elegant APIs and design patterns. It
does a bunch of other things as well, but digging through the code, those are
the concepts that will jump out at you.

Vert.x is a decidedly "modern" Java codebase; it's written in a decidedly
different style from "traditional" enterprise Java. From the build tooling
(Gradle) to the use of callbacks and delegation, you'll find it a bit
refreshing. I'd recommend thinking about how you would use other patterns or
structures in concert with Vert.x as well, as that will get you thinking about
architectures. Exploring its model of concurrency in concert with Java
concurrency tools is a must; some of my favorite Vert.x code mixes its reactor
with Grand Central Dispatch-like threadpools and clever message passing.

I've really enjoyed working with Vert.x. It's not without warts, but I feel
like the code I've written around it represents a great advance in my Java
style.

~~~
eip
I have to use vertx for work. It's not my favorite.

It's not Maven friendly. It's not Spring friendly. Callback spaghetti is hard
to read and maintain.

It uses it's own half baked messaging framework instead of something more
powerful like AMQP.

The documentation is confusing and often times self contradictory. ("Worker
verticles use threadpools" vs "All verticles are strictly single threaded")

It encourages message passing and queuing even when it doesn't make sense.
That leads to code that is very hard to understand and even harder to debug.

It uses Hazelcast for in memory datagrid but doesn't explain it at all in the
docs. It also doesn't expose any of the useful Hazelcast APIs. So unless you
are already familiar with Hazelcast you will miss most of its benefits.

I think Spring Integration is a much better solution to the problems vertx
tries to solve.

That fact that vertx tries to be polyglot friendly doesn't really seem like a
benefit to me either. Just makes feature development much slower.

~~~
voidlogic
spartango: "Vert.x is a decidedly "modern" Java codebase"

eip: "[Vert.x] Callback spaghetti is hard to read and maintain."

My take, "modern" = like node.js = Callback spaghetti = hard to read and
maintain

Of course this is coming from someone who hates callbacks, javascript and has
ported node.js apps to Go and finds them faster and more maintainable in that
form.

------
mindcrime
There are a number of new and interesting projects in the Apache Incubator, a
few of which are written in Java. It's probably worth a look if you're looking
for something to dig into:

<http://incubator.apache.org/>

As far as specific projects, I'm currently really interested in Apache
Jena[0], Apache Stanbol[1], Apache OpenNLP[2], Apache Mahout[3] and Apache
Marmotta[4].

[0]: <http://jena.apache.org/>

[1]: <http://stanbol.apache.org/>

[2]: <http://opennlp.apache.org/>

[3]: <http://mahout.apache.org/>

[4]: <http://incubator.apache.org/projects/marmotta.html>

------
profquail
You can browse the most popular projects on GitHub for the last
day/week/month, that might give you some interesting code to look at:

<https://github.com/languages/Java>

I don't write Java (I mostly work with F#, and a bit of C#), but I always
thought the LMAX Disruptor was a really cool bit of software.

<http://lmax-exchange.github.io/disruptor/>

~~~
spo81rty
LMAX does look pretty cool.

------
jhill925
I found this hidden gem and have used it in several projects. It is the
simplest ORM I have ever used in Java. (I use Eclipse to generate the JPA
class from database tables, and I a done).

<https://github.com/mwanji/DbUtils-JPA>

------
hatchoo
It's <https://github.com/Atmosphere/atmosphere> for me.

I'm also looking for a good alternative to Hibernate.

------
doug1001
for me, it's Storm (<http://storm-project.net>), the distributed processing
technology (often described as "real-time Hadoop) built on Thrift and the
extraordinary ZeroMQ. I believe Storm source is ~ 80 % java and 20% clojure.

------
rodrigoavie
Thanks everyone for the suggestions. Keep them coming!

