Hi,
You should definitely use the java API, AT commands create slow and messy code.
As for the GPRS selection, I personally like the "AT^SJNET=..." way because you just have to focus on the TCP/IP layer like you would do on a computer. The low level network handling can be restricted to the starting/setup code.
About disconnection, it really helps, because some mobile networks don't handle GPRS sessions correctly (they could all end-up in timeouts at midnight for example). Closing the GPRS session definitely helps. Reconnecting to the GSM network might help also. If you do a lot of connections, don't forget to close them gracefully.
As a general safety, your watchdog monitoring code should restart the chip when you haven't received a successful message in the last X hours from the server. This is the best failsafe mechanism in case of failures (of any kind) because it checks the complete chain).
Best regards,