Let us assume that one is suitably armed with JBoss documentation. Of course, I’ll leave the dubious practice of obfuscating information and forcing users to buy docs as an exercise for the reader’s judgement ability. So, we have the docs, we have the latest download, we’re ready to roll. Lets fire up the server! Hmm, the server seems to spew out endless pages (31, actually) of junk before finally proclaiming it’s up and running. This, it turns out, is a recurring theme. The endless spewage of information, relevant or otherwise, to users. Shutting down provides us with an equally amusing 20 pages. Now, I know that huge long complicated sounding messages give one that warm and fuzzy ‘I’m a hacker’ feeling, I remember booting up linux and feeling special just watching the boot messages fly. However, I personally find it unprofessional and irritating in my old age. Especially since some of those messages are of level WARN and are ludicrously easy to miss.
Speaking of warnings, why should a clean server, with no modifications whatsoever, spew out WARN [DeploymentInfo] Not deleting localUrl, it is null or not a copy: file:[name deleted to protect the guilty] messages? How do I fix it? I’m being warned after all, and I’d like to be well behaved enough not to get these warnings. Of course, I don’t feel too guilty since this happens on a virgin server, one as yet unsullied by my code or applications.
Next, let me try to deploy a bigass j2ee application (which works in a number of other app servers, incidentally) into this beast. First step is to set up a datasource. Hmm, this seems to be a rather complicated process. It’s very much a hit and miss affair, and a case of playing hunt-the-xml-file (a game you better like playing as often and for as long as possible or you’re in trouble). Trawling through the docs is also of little to no help. You’d have to somehow figure out that a DataSource is a resource adaptor, and that there are some db samples littered around, so by copying these to various locations you can hope to stumble into an appropriate directory. Consider a bunch of other appservers, I was able to set up a DataSource on Orion, Pramati, Weblogic (various versions since 4.5), JRun, and pretty much ANY other server either by a) editing a short, brief, sweet xml/properties file, usually very well documented, or b) going to some kind of console interface and adding one there, under a clearly labelled ‘add data source’ option.
Nevermind, maybe the configuration pains are worth it. Actually, no, they’re not. There are many other gotchas waiting to happen. In fact, life with jboss is an endless series of gotchas and ‘you idiot, you thought we read specs huh’. Case in point, there is no support for j2ee application clients. They get deployed, but running them seems a Herculean task verging on the impossible. There is waffle about how to use JBoss RMI invokers, but who the hell cares? Appclients exists so one specifically doesn’t have to know useless crap like that. It might provide good masturbatory material to those who like rutting in a pigsty, but the rest of us have work to do. Maybe they DO support running application clients, but if they do, it really is one of the best kept secrets of JBoss. The terms ‘application client’, ‘appclient’, and ‘application-client’ do not exists anywhere in their docs.
Secondly, JBoss does not allow primitive primary keys. I realise the spec is somewhat unclear on this point, but really, if all other vendors manage to support it, why can’t jboss?
How about their EJBQL support? Works fairly well, actually. Unless of course you happen to have some obscure error in your query (weird usage of MEMBER OF, if I remember correctly). In the civilised world (ie, all other appservers), you’re politely informed that your query is invalid. Of course, as an extra favour, you’re also told of where this query is, what it is, and sometimes exactly which bit of the query is undigestable.
Not so with JBoss! Ho Ho Ho! This particular query results in a NullPointerException. The NPE hilariously springs out from some internal JBoss CMR class. The undiscerning reader will of course foolishly assume that their CMR collections are fubar, but nono, it’s just JBoss cute and cuddly way of saying it’s bad EJBQL. No matter, at least the ejb they report the error about helps you narrow it down somewhat. Wrong again! The name of the EJB reported varies actually. Sometimes it’s the previous one processed, sometimes it’s the next one to be processed, the only consistent thing about it is that it isn’t the one which has the actual error. What a tease.
Of course, no mention of JBoss error reporting is complete without a dressing down of their miles of stacktraces. Long stacktraces to me have become synonymous with ugly/slow/bloated architectures. A stacktrace in a way is like a sequence diagram snapshot. You’re able to see the (often tortuous) path that is taken to execute your code. Comparing Orion stacktraces for example with JBoss ones will give you a rough idea of how much faster Orion is (think few orders of magnitude). There’s also the disturbing habit of reporting the same 5 page stacktrace 3 or 4 times. I realise it’s important to ensure the user realises that something just went splat, but honestly, repeating it so many times? It was just one little error, there really is no need to yell so much. It’d be akin to Tolstoy deciding that War and Peace books had to be sold with 3 copies bonded together into a three thousand pagefest, to ensure that people get the point.
JBoss documentation has a special place in one’s heart too. Again, it very much reminds one of children’s writing. Very cute in places, insightful in others, and simply childish elsewhere. I laughed, I cried, I mostly hunted about uselessly for helpful information. The number of reported downloads varies also by document. The website for example claims over 2 million apparently, whereas the admin guide says it’s 100k+/month, with 100 developers worldwide. The clustering guide thinks differently, with 50k+/month, and 1000 developers worldwide. The CMP guide on the other hand is convinced it’s 150k/month downloads. The log4j guide disagrees with everyone, and says it’s 1 million downloads.
Log4j guide? That’s right, you get 29 pages of log4j love. Clearly logging is such an incredibly difficult and time consuming task that it requires 29 pages to fully explain. Nevermind that in the rest of the civilised world, logging just works and can be assumed to be something that one doesn’t have to worry about.
Speaking of logging, one minor irritant is how astounding easy it is to clobber all of JBoss’ logging. Simply try to configure log4j for your application and hey presto, you’ve hijacked the whole appserver’s logging. Guaranteed to impress girls everywhere.
Of course, all this and more could be forgiven if it were the fastest meanest appserver around. It’s certain mean, but to the wrong people, to the users. Speed wise, well, lets just say in all my benchmarking, JBoss consistently turtles along at the bottom, both in terms of throughput and response times. Particularly hilarious is comparing it to Orion, which will probably service your request, start your TX’s, call your EJB’s, render lovely output, and then solve a few of the world’s problems in the time it takes JBoss to figure out exactly who and what it should route your request to.
The only ray of sunshine in this whole mess is that little splinter group off of JBoss. It’s entirely possible that JBoss COULD be a worthwhile product. There’s nothing inheritely impossible in the concept of a functional worthy of respect open source j2ee project. I’d humbly submit that those involved would have far better luck arriving at that holy grail by acknowledging its weaknesses and not trying to milk it as a cashcow/personal deification platform. Oh, and agreeing on exactly how many downloads jboss has.