Comic: If Architecture Was Like Software
Software “Architect”? Dream on, code monkey.

Software “Architect”? Dream on, code monkey.

I would expect that the 1.6.0_03 to 1.6.0_04 JDK update would contain very minor bug fixes. Instead, it contains a major JAX-WS upgrade from JAX-WS 2.0 to JAX-WS 2.1. Ouch.
Someone pointed me to Java 6.4 is a whole new Java Release! Also, Rama disagrees in the comments on his blog. I stand by my original opinion that this change warranted more than an upgrade from _03 to _04.
Wouldn’t you know it…all of our web services (well, for one app, at least) broke. Why didn’t they call this 1.6.1?
Here is some sample code someone I work with sent me. This worked on JDK 1.6.0_03:
private void addHttpHeaders(final SOAPMessageContext context,
final String userName,
final String companyId,
final String enterpriseId) {
//JDK1.6.0 - JDK1.6.0_03
final MimeHeaders hd = context.getMessage().getMimeHeaders();
hd.addHeader(USERNAME_HEADER, userName);
hd.addHeader(COMPANY_HEADER, companyId);
hd.addHeader(ENTERPRISE_HEADER, enterpriseId);
...
The point is to add custom HTTP headers. On the server, a Servlet filter intercepts these custom headers for some security-related functions.
With JDK 1.6.0_4, he had to change the code to this:
//JDK1.6.0_04 - switch to JAXWS-2.1
Map<String, List<String>> requestHeaders = (Map)
context.get(MessageContext.HTTP_REQUEST_HEADERS);
if(requestHeaders == null) {
requestHeaders = new HashMap<String, List<String>>();
context.put(MessageContext.HTTP_REQUEST_HEADERS, requestHeaders);
}
requestHeaders.put(USERNAME_HEADER,
Collections.singletonList(userName));
requestHeaders.put(COMPANY_HEADER,
Collections.singletonList(companyId));
requestHeaders.put(ENTERPRISE_HEADER,
Collections.singletonList(enterpriseId));
}
To make this code portable across BOTH 1.6.0_03 and 1.6.0_4, he ended up leaving BOTH techniques in the code.
This is just typical WS-* crap, in my opinion. It’s always very cryptic and complex, not to mention fragile if you try switching from one implementation to another. The promises never live up to the reality.
Thus, I use REST whenever possible.
We’ve come such a long way…I can’t recall the last time I had a tabs v. spaces argument.

Great hair is eternal.
(tabs considered harmful)
In no particular order…
Weiqi says:
The point? Java has survived in the face of all these public high profile separations. It will live on past this one.
I don’t think “Java” will die because one key engineer left Sun. Weiqi gives a list of important people who left Sun, and of course Java is still around.
While Java won’t die, individual initiatives may suffer. For example, now that Peter Ahé no longer works for Sun, who is championing the idea to erase erasure in Java 7? As far as we know, nobody. This makes part of me die inside.
I find myself wondering if maybe Sun would have continued advocating and promoting Jini if Bill Joy, the “father of Jini”, hadn’t left Sun. Who knows.
For a non-Sun example, take a look at Jython. Jython was a revolutionary step towards bringing scripting languages to the JVM — YEARS before today’s efforts with other languages like JRuby. UPDATE: See Alan Kennedy’s comment below. Yet when the Jython creator accepted a job at Microsoft, look how long it took for others to step up and revitalize Jython. It’s damn hard to pick up the pieces when the tech lead leaves.
For yet another example, take a look at the hit HSQLDB took when Thomas Mueller left the project. Again, it took years for another team to pick up the pieces and fully get back on track.
I don’t know. Perhaps nothing. Certainly not Java. But news like this does make me nervous, that’s all I’m saying. Here is why…
Best of all, Chet’s own words:
One of the things that attracted me to Flex, and to Adobe, was a client platform that enables very rich user experiences; transitions, animations, filters, and just darned good-looking UIs are all pretty exciting to this graphics geek.
So…Java didn’t offer enough of those things?
I don’t know anything. I’m just blogging. You know, writing down my thoughts and ideas. In my opinion, everybody is replaceable.
It is also my opinion that when important people move on, the organization’s focus shifts to reflect the priorities of the replacement people.
And finally, I think it made for a good comic. That’s all.
This is a real XXXX in the XXXX…
UPDATE: I withdraw this comic. See my apology and second attempt.

In next week’s episode, James Gosling joins 37 Signals as a Rails evangelist!
Helvetica, like the font, is boring.
*** UPDATE: See my comment below ***
I spent the last few days profiling and optimizing one of our app’s primary GUI screens. Here are some observations: