Apogee's CJREs (Custom edition JREs) are suitable for devices based on embedded systems that need to run 'desktop-level' Java applications. This means that each CJRE can execute any Java application targeted at Oracle's Java SE 5, SE 6, or SE 7 platform. Apogee can also provide CJREs that can execute Java applications targeted at Oracle's Java SE Embedded platform or even the Sun's "venerable" J2SE 1.4 platform.
Apogee can create CJREs for a wide range of wireless and "connected"
devices requested by Apogee's customers, including: smart phones,
tablets, "hand-helds", point-of-sale terminals, industrial controllers,
Internet routers, network processors, home gateways, industrial
gateways, set-top boxes, Telematics devices, "smart grid" controllers,
Cloud environment servers, etc. Each such device can be based on: any
x86, ARM, MIPS, or PowerPC processor running any implementation of Linux
(including any "enterprise" Linux); or any x86 or ARM processor running
WinCE or Windows Mobile; or any x86, ARM, MIPS, or PowerPC processor
running Unix (for example, BSD Unix).
|Each CJRE includes the following main components, ported to a customer-requested target device and made to work effectively and seamlessly with the target device OS and system software (runtime libraries, drivers, etc.):
Java SE 7 class library (JSE7 CL) from latest Oracle's Java SE 7 OpenJDK.
IBM's optimizing Just-in-Time (JIT) compiler, tuned by Apogee to compile the compiler-selected or user-selected bytecode methods of a given Java applications into "native" (binary) methods of the highest possible performance when executed on the processor targeted by CJRE.
- IBM's "embedded class" J9 Virtual Machine (J9VM), enhanced by Apogee to work effectively and seamlessly with the port of JSE7 CL. Can be optionally provided in an "application development" configuration, in which case it supports debugging and profiling of Java applications, tracing of executions of threads, tracing of heap allocations and garbage collection activities, and "dumping" of Java heap or selected portions of Java heap.
|JAR files of Java SE 5/6/7 applications
|Open-source application-level packages
(e.g. Tomcat servlet container, Jetty web server, ServiceMix ESB, etc.)
|Open source client-side runtimes (e.g. OSGi framework & service bundles, etc.)
|Java SE class library from latest Oracle's Java SE 7 OpenJDK
|IBM's J9VM, JIT compiler, core Java APIs
|Target device OS (any implementation of Linux, WinCE, Windows Mobile, any Unix)
|Single/multi core processor (x86, ARM, MIPS, PowerPC) of the target device
The use of the ports of JSE7 CL in CJREs means that each CJRE is fully compatible with Oracle's Java SE 5/6/7 platforms.
Each CJRE cab be provided in two main configurations: a "head-less" CJRE that does not support any graphics; and a "head-full" CJRE that fully supports the Java SE 5/6/7 AWT, 2D, and Swing graphicsm adapted by Apogee to work effectively with the following native libraries:
- X-Window or DirectFB libraries in case of CJREs targeted at x86, ARM, MIPS, or PowerPC processors running Linux or Unix.
- GTK2 used "on top" of X in case of CJREs targeted at x86, ARM, MIPS, or PowerPC processors running Linux or Unix.
- GDI in case of CJREs targeted at x86 or ARM processors running Windows CE or Windows Mobile.
Each CJRE targeted at an x86, ARM, MIPS, or Power PC processor running real-time Linux (for example, the RedHat MRG, SUSE Linux Real-time Extension, RTLinux from FSM Labs, etc.) can be provided in a "soft real-time" configuration (Soft-RT CJRE) or a "hard real-time" configuration (Hard-RT CJRE). Each Soft-RT CJRE support the real-time features requested by a given customer, for example deterministic execution and termination of real-time threads. Each Hard-RT CJRE is fully compliant with the latest JSR-001 RTSJ (Real-Time Specification for Java). The J9VM used in each Soft-RT or Hard-RT CJRE supports the soft or hard real-time features that must be supported by a Java VM, and includes Apogee's real-time garbage collector (RTGC) comparable to IBM's Metronome RTGC, but allowing more extensive control over timing of garbage collections. In addition, each Soft-RT or Hard-RT CJRE includes: (i) Apogee's real-time class library (RTCL) providing the implementations of soft or hard real-time features the supports for which do not have included in a Java VM; and (ii) Apogee's highly deterministic Just-Ahead-of-Time (JAOT) compiler invoked at J9VM start-up time. The JAOT compiler includes a special "fuzzy" logic for selecting bytecode methods in a Java application about to be executed on the CJRE that are suitable for compilation into native methods (for example a bytecode method invoked inside a loop), all of which are immediately compiled into native methods. This means that each JAOT-created native method is deterministically executed upon its each invocation when the Java application is running on the CJRE.
Each CJRE can support serial/parallel port communication using IBM's JavaComm
library, and can optionally include Apogee's ports of any of the the following "client-side" runtimes:
- The OSGi R4 framework and service bundles from Eclipse (Equinox) or Apache.org (Felix) or Knoplerfish.
- Configuration Admin Service and Extension Point Framework from Eclipse.org
- Various runtimes from Apache.org (Log4J, Jakarta commons-lang, commons-logging, etc.)
- Various runtimes from IBM, such as: IPv6, SyncML, RFID Data Capture and Delivery Package, JMS, MQ Telemetry Transport, Message MicroBroker from Lotus Expeditor Desktop Edition, etc.
- OpenFusion client-side CORBA support from PrismTech.
- JConsole from Sun's Java SE 6 OpenJDK
- and more...
Finally, each CJRE can optionally include Apogee's port of the following "application-level" packages:
- Tomcat Java Servlet container from Apache.org
- Jetty HTTP server from Mortbay.org
- 'Service Mix' ESB (Enterprise Service Bus) from Apache.org
- JSP (Java Server Pages) package from Oracle's open-source Glassfish webtier.
- JAX-WS from Oracle's Glassfish webtier.
- Java Message Server (JMS) from IBM
- DOM.Xpath packages from W3.org
- and more...