Sunday, November 06, 2005

Network Connection Limitation when using BlackBerry Device with "Direct TCP/IP Mode"

I recently had developed some prototype using J2ME/MIDP 2.0 on BlackBerry 7290 Device with Cingular GPRS Network.

I encountered a problem when making direct network connection from BlackBerry Device through Cingular APN without using BlackBerry Enterprise Service ( Note: "What are - The different ways to make an HTTP or socket connection" is a good article describing three different ways to make socket connections from BlackBerry devices ). The exceptions was only occurred on the real device with trace on device log like:

======================================
app:Java Exception data:
ArrayIndexOutOfBoundsException
No detail message
net_rim_cldc_io_tcp
StreamDatagramTransportBase
close
0x3474
net_rim_cldc_io_tcp
StreamDatagramConnectionBase
close
0x29B7
net_rim_cldc_io_tcp
Protocol
shutDownConnection
0x5A5
net_rim_cldc_io_tcp
TcpIOThread
run
0x51B9
===================================

After talking to a nice BlackBerry Support Engineer I learned that "The BlackBerry supports a maximum of 5 direct TCP connections to occur at a time" and this limitation is existed in both 4.0, latest 4.0.2 and the coming 4.1 Handheld Software

So, this has a very sad implication: you have to use BlackBerry Enterprise Service(BES) to communicate with BlackBerry Device if you want to develope a real Enterprise Mobile Software targeting BlackBerry Device. BlackBerry is realy not an Open Platform for developing Enterprise Mobile Software. You can not develop a Mobile Enterprise Solution for BlackBerry Device ONLY, you have to be a RIM Partner or VAR to build a BES centric solution and I hope this was not RIM intended to be.

( Note: My personal guess is that, for BlackBerry Devices, "Direct TCP/IP Mode" actually is a shortcut of BES Solution, the internal TcpIOThread actually is just an on-device light weight BES Daemon thread for network communication )