More than two weeks ago I had a problem. I was deploying an application to Sun Java System Application Server. And the application crashed. I've done a lot of investigation and found the problem. Strangely, the problem was here:
String initCtxProviderUrl = "iiop://myserver:3700/"; Hashtable props = new Hashtable(); props.put("java.naming.factory.initial", "com.sun.jndi.cosnaming.CNCtxFactory"); props.put("java.naming.provider.url", initCtxProviderUrl); Context initCtx = new InitialContext(props);
This is basic. This snippet of code is in any EJB example. It have to work. Anytime. And it works on five other servers in the same environment. But it does not in one particular case. Throws NullPointerException.
I did all the usual diagnosing, turned on debugging, went through logs, separated the problematic code from the rest of the application, used packet sniffer to make sure no firewall is blocking that ... all the usual things. The problem seems to be that a second IIOP listener tries to start when there is already one running. Simple. It took only few hours on Friday night.
As we did not have enogh time to spend on this problem (project schedule), I logged that problem to the Sun On-line Support Center. That was not easy in itself, as the support contract is for the customer and the processes are not always easy. One way or another, the problem report got there few days later.
And the result is ... nothing. No response. For nearly two weeks.
The server lies there, useless. I've done everything I could. I'm not the kind of engineer that bothers to log any minor problem that I could fix myself. Even a full day of my effort is worth it, if I could fix it. And sometimes I invest few days of my time. I see it as a battle, the problem on one side, me on the other. I take it prosonally. I log only the most difficult problems, and only if I end up in the dead end. That's the reason I get angry by such an approach of the support team.
Few weeks before that case I've got another problem. I was testing a prototype to validate my architectural decisions. I was using TinyRadius Java library to make a very simple RADIUS accounting server. All the tests went well. As I was preparing a test report I've realized that I forgot to set a shared secret. The tests should fail. I investigated that and I've found out that TinyRadius library does not implement RADIUS accounting authenticators. I've mailed description of this problem to TinyRadius' maintainer Matthias Wuttke. It was Friday afternoon again. We exchanged few e-mails, Matthias accepted that as a bug and expressed hope that he will be able to fix it soon.
I was really surprised to find a new version of TinyRadius in my mailbox the very same day. It took only few hours to write a fix. And it worked. As I tested it, I've found another problem in the library and Matthias fixed in few hours again. That's great. That's really wonderful. This can make a humble engineer very happy.
This is not my first bad experience with commercial support. I have similar stories to tell about HP, IBM, SAP and even worse for Oracle. And this is not my first good experience with Open Source community. Most problems in open source software can be fixed by searching mailing lists. Most of the bugs are already fixed in the development version or the fix will get there in few days after I report it. And all other problems I can usually fix (or "workaround") myself in few hours or days.
I wonder how will all this end. The level of commercial support goes down. The level of open source community support goes up. Does it mean that we will see dramatic changes sometime soon?
I would really like that change, I think.