J2ME Secrets
 

So where does this leave the J2ME developer?

Make sure the JSR's you need (such as JSR 82 for Bluetooth, etc.) are specifically enabled for your target device. Look for the specific JSR support callout rather than assuming signification by terms like "bluetooth enabled."

Recognize that most if not all mobile device carriers replace or modify the OEM firmware for the devices with their own "crippled" versions. In many cases they have deviated drastically from the JSR 118 Ch. 15 specifications and "locked out" the customer's option to accept and run applications that require access to many of the more useful API's (like JSR 82, JSR 75, JSR 172, JSR 179, etc.) You have to dig but you can sometimes find the information on the developer web sites for the carriers.

Many of the mobile carriers have effectively destroyed the long recognized third party verification "trust" relationship between the developers, carriers, customers, and certificate authorities by becoming their own certificate authority in a fashion which effectively neutralizes the third party certificate providers. They claim it is to protect their customer "experience" but it is transparent that the real reason is to control access to their markets.

So, DO NOT purchase expensive third party code signing certificates from the likes of Verisign, Thawte, et al until you have done the research to see whether the target carrier's branded software for the device will recognize those certificates AND allow the desired access to the API's. You'll find root certificates for Verisign, Thawte, et al in many of the devices but this DOES NOT mean that a particular API will work for an application thus signed. For example, at this writing the implementation of JSR 82 as documented on the Cingular/ATT developer site provides that the Bluetooth (JSR 82) API's will NOT allow connections (discovery will work) for any application running on a Cingular/ATT branded device (my carrier) unless that application is signed with a propriatary Cingular Premium certificate. That is in fact what I found to be the case on my own Cingular/ATT device (a recently purchased Sony-Ericsson W810i). A Verisign or Thawte certificate will buy you precisely NOTHING with respect to this (and several other) critical Java API's on their devices based upon the developer documentation.

In view of this, DO NOT waste your money on expensive industry certification processes such as Java Verified unless you just want the cachet of being able to display their logo. That certification will buy you precisely NOTHING in terms of your application working on the carrier's devices as the carrier recognizes only their proprietary certificates, not those issued by industry certification houses.

Add all that up and I've just saved you thousands of dollars and an ulcer or two. Now that I've got your interest, read the long version (if you haven't) when you have the time. You'll more fully appreciate the real situation of the J2ME landscape.

Take some of that money you just saved and buy your next mobile device outright from one of the many on-line outlets. Buy it with un-branded (OEM) firmware and unlocked to any network. Not only will you enjoy the enhanced function and capability of not having a "dumbed down" phone, but you will also be able to easily use it for development. I couldn't even test my Bluetooth applications on my own Cingular branded phone due to the certificate/JSR 118 mess. Reloading it with the manufacturer's OEM software for the phone fixed that. Also, you'll open up a whle world of available mobile apps that are out there which you otherwise will NOT be able to run. Advise your friends and neighbors to do likewise. If you feel so inclined, contact your legislators and tell them how you feel about these monopolistic practices by the carriers. Don't let them dictate your phone choices and/or what software you can run on them.

If you are a developer or experimenter/hobbiest and just want to experiment/learn the technology, forget about certificates and just get your phone debranded. Either do it yourself or use one of the vendors. You'll be a lot happier. I was. It shouldn't cost you more than $25-$30. My do-it-yourself process cost me $13.

I hope this blog saves someone a number of the bumps and bruises that I've had.

73's de N5DP.