WebSphere v5: A case study in how to design the worst development platform ever
I've had the opportunity to work with a large set of application servers and j2ee platforms, including Resin, Tomcat, WebLogic and WebSphere. The open source (Tomcat, Resin) servers, have, in my experience, always been the best platforms to work with, hands down. Configuration is simple. Applications deploy and run with minimal trouble. Things are buggy, but software is always buggy. The cursing you do about the appserver is generally good natured, and you get along. If you really get stuck, you grab the sourcecode and debug the stupid thing, which almost universally works and isn't terrible to do because, well, it's an http protocol translator in a fancy box.. how complex could it be really?
Enter WebSphere.
Really, all I'm looking for in a development platform is:
- Stable: The platform has been used by a lot of people, and the job it is expected to do it does reliably. This means no crashing, even when i redeploy my application a zillion times.
- Fast Development: You should be able to drop code into the appserver and see it run without reading the wall street journal between compiling and actually seeing the code run.
- Non Developer Hostile Feature Set: In the interpretation of any standard, there are always things that are ambiguous, and can be interpreted in several ways. Often times one of these ways will allow developers some more latitude to do things that are not necessary or look slightly strange but really don't affect correctness, and the other way will do things extremely strict that will cause massive development problems because the person who wrote the tool is anal retentive.
- Diagnosable: In the event that I do something wrong, or god forbid, the tool crashes, I should be able to figure out what the hell actually happened, and fast.
Websphere, amazingly, fails all 4 of these tests.
- It routinely crashes on all of my development hosts and platforms just deploying my code. The crashes are non repeatable, and often silent. They usually appear to be instability in the jvm, but I don't give a damn, really. The appserver should eat generic webapps for lunch.
- Deployment cycles are terrifyingly slow. The only way to deploy an application is a zipped war, and you have to use a webgui to update your application. This totally ruins any chance at keeping your train of thought. Updates of an application usually take 5 minutes from a code change to seeing it run, or more. I know there is a hot deploy mode, but it's hostile to use and has been severely unreliable.
- I have never taken a jsp that works on another appsever, dropped it on websphere and seen it work. Websphere wont read mac line endings in jsps, but when it crashes, it tells you that your jsp tags are not properly closed. Complete crap. It also has the strictest, most retarded interpretation of the j2ee spec i've ever seen. Resetting the content type of your jsp page twice or more works perfectly on every other appserver. I know that's not right. I don't care, as long as its always set to the same string.
- When it crashes due to bad file encodings, or simply using the console, it gives misleading error messagess or no error messages at all.
For shame. I previously held IBM in very high regard with respect to the quality of their java tools. My experience with websphere has totally ruined the IBM java reputation for me. They need to get their heads out of the sand and realize that the people working in the trenches USE their tool, and make buying decisions based on how hard it is to use the tool.