GlassFish Story: How to Make a Huge Unmaintainable Obsoleted Project Maintainable and Modern

By David Matějček

Elevator Pitch

Developers are just common people, lazy and scared of changes. But they are also selfish and they have passion and desire to be happy. Sometimes they go crazy and do something they were told that it is not possible. Refactor and modernize an unmaintainable project. How?

Description

GlassFish is here for many years; it evolved from SunOne, used parts of Tomcat, it was a very ambitious project 20 years ago. However it was too “heavy” to be developed for reasonable cost and it’s speed of development decreased just to pass TCK tests as a referential implementation. That continued even after Eclipse adopted GlassFish despite officially there was no referential implementation of Jakarta EE anymore.

But then something happened. Several fans of GlassFish and Jakarta EE joined and started contributing to GlassFish - and as there was nothing much to lose, they were sometimes quite radical. They migrated tools to most recent versions, they integrated the TCK directly to the GlassFish build, they introduced or reintroduced some tools to keep quality and never go back.

Then some users started noticing that GlassFish started moving again and results are quite good. They started reporting issues and sometimes contributed fixes. All our steps had side effects - the most significant positive side effect is that the build was more and more simple, it was easier to write new tests to cover nearly any thinkable use case. Easier to reproduce and fix bugs, easier to introduce new features. Another side effect is performance - lower memory requirements, faster startups, deployments, higher possible load and better effectivity.

Well, is it possible to use this experience also for other projects? How much? Or is GlassFish useful directly for your projects? Can you use just it’s components? How to write tests with GlassFish without pain? Why we rescued this “dead horse”? I will try to answer all your questions including those provocative.

Notes

Why I am the best person? It was my idea to rescue GF and make it production ready again. Then we agreed with Arjan that we would try to do that if there would not be some aggressive resistance. Soon we have found that our idea was widely supported. Sure, I am not the best speaker around the world, but I am learning. Also I learned that my experiences with refactoring of huge projects and skipping years of their development are quite unique.