to be easily portable to many different native platforms (e.g., BREW,
Windows Mobile and Linux to name just a few). The Symbian OS Java
ME subsystem takes a proprietary integration approach which is tightly
coupled with Symbian OS. Let's see why.
10.1.1 How Symbian OS Differs from Other Java Hosting Operating
There are a few key reasons as to why the Java ME subsystem takes a
unique and proprietary approach to integration with Symbian OS.
First, Symbian OS is an open platform and has an existing application
management model for installation and launching. MIDP application
management must be integrated with the native model which makes any
MIDP-only application management inappropriate.
Secondly, although versions of Symbian OS from version 9 support
POSIX, it is not shipped on all devices and specifically not on devices
before Symbian OS v9. The older and deprecated stdlib layer is not
complete enough to support MIDP 2.0. That would leave most of the
JSR functionality to be implemented using Symbian C++ APIs. Hiding the
native Symbian C++ code under a generic platform-agnostic C layer is
also not a proper solution because of the idiomatic use of Symbian OS
services which would not fit well with a generic C layer.
Thirdly, as an application platform, Symbian OS has a rich set of
native UI controls that are customized by different licensees to produce
a distinct and precise look and feel to which Java applications must
These are some of the key issues that limit the reuse of code developed
for other platforms to only the VM engine and Java packages that are
implemented in pure Java. The general shape of the Java ME subsystem
architecture is therefore unique and proprietary to Symbian OS. If at some
point a legitimate question arises of possibly being able to implement a
component in a more generic way or of reusing existing code from other
platforms, please assume that it was considered but there was a good
reason to opt for a Symbian OS proprietary approach.
10.1.2 Overview of Architecture and Main Processes
We take at least two points of view in this chapter: that of a hosted Java
application (i.e., the point of view of an application developer) and that of
the Symbian OS architecture (i.e., the point of view of an operating system
integrator). Each has different logical groupings of Java ME components.
So we had better start by clarifying the some of the terms that are used
across this chapter (see Table 10.1). Some groups overlap in the area
which they point to but imply that it is being discussed from a different
point of view. In cases where a certain component is not included in the