Welcome!

Microservices Expo Authors: Liz McMillan, Elizabeth White, Astadia CloudGPS, Jason Bloomberg, Karthick Viswanathan

Related Topics: Microservices Expo

Microservices Expo: Article

Wireless Web Serviceswith J2MERemote Possibilities

Wireless Web Serviceswith J2MERemote Possibilities

What happens when the hype of Web services meets the increasingly popular and ever-changing world of wireless computing? Most likely, confusion and disillusionment. In this two-part article, we'll explore the uncharted waters of wireless Web services. We'll use the J2ME platform for developing our Web service clients and access remote services on the Internet using standardized industry protocols. In this first article, we'll examine XML-RPC, a simple, lightweight mechanism for invoking remote services with XML. The second article will compare and contrast XML-RPC with SOAP, a more robust, sophisticated, and heavier solution for invoking remote services with XML.

The Wireless World
A Web service is a coarse-grained interface to one or more business services that is invocable across a network. With a wireless network, this invocation process becomes more complicated. Many cellular telephone service providers use analog circuit-switched networks that open a constant connection for the duration of the exchange. More advanced providers are moving to digital packet-switched networks. In packet switching, a stream of digital bits is carved up into bit clusters, called packets, and blasted across the network individually.

Circuit-switched analog networks are more expensive to maintain and offer limited bandwidth. Digital packet-switched networks are cheaper, more efficient, and do not have the same bandwidth limitations. The trade-off with packet-switched networks is that packets are occasionally lost ("dropped") during transmission. Dropped packets must be retransmitted. The larger a transmission is, the greater the likelihood that packets will be dropped, requiring retransmission and degrading performance.

The bottom line is that regardless of the type of network being used by a provider, wireless clients must keep their exchanges as thin as possible to ensure optimum performance. Additionally, mobile devices typically do not have an abundance of resources for processing fat requests or responses, or storing robust data models.

XML-RPC for Wireless Web Services
XML-RPC is a Remote Procedure Calling protocol that invokes remote procedures over a network by sending XML-formatted messages. The XML-RPC specification was developed and is maintained by UserLand Software, Inc.; the full specification can be found at www.xmlrpc.org/spec.

XML-RPC is an extremely lightweight mechanism that can be used as part of a Web services architecture. The key to a Web services architecture is the utilization of XML as a language-agnostic, vendor- and platform-neutral medium for accessing Internet or intranet services. XML-RPC provides the minimum functionality necessary to specify data types, pass parameters, and invoke remote procedures in a neutral way.

What makes XML-RPC so efficient? XML-RPC defines eight data types: six primitive types (int, Boolean, string, double, datetime, and base64) and two complex types (struct and array). These are the only types available, yet they provide all the functionality that is needed about 80% of the time. Although SOAP provides a more robust data-typing mechanism based upon XML Schemas (even allowing the creation of custom data types), this is often overkill in a wireless environment. We'll explore these topics further in our next article; for now, we simply need to understand that XML-RPC is an extremely lightweight mechanism for invoking Web services in a standardized and neutral manner.

The wireless applications that we'll be developing in these articles require the J2ME platform, so we'll take a brief look at J2ME to provide for a basic background for these wireless Web services.

J2ME Primer
The Java 2 Micro Edition is a Java 2 platform for developing applications for devices with limited memory. Specifically, J2ME addresses the need for application development for consumer and embedded devices. Because it is designed for devices with extremely small footprints, many of the features of the J2SE are not included. Some of the notable features not included are floating point data types, serialization (no JavaBeans), thread groups and thread daemons, finalizations, user-defined class loaders, and the JNI. As Figure 1 indicates, the J2ME platform is a layered stack consisting of a virtual machine and the core J2ME class libraries, as well as configuration class libraries and device-specific profiles.

Configurations
Configurations define the run-time environment by specifying the Java features (classes) that are available as well as which virtual machine will be used. A configuration can also be thought of as relating to a category of devices that have common characteristics and memory constraints. For devices that have a total memory from 160 to 512 kB, the Connected Limited Device Configuration (CLDC) for J2ME can be used. CLDC devices usually include cell phones, two-way pagers and low-end PDAs. The CLDC also targets devices with a network connection and processing power of 16 or 32 bits. The CLDC uses the K (k for kilobyte) Virtual Machine or KVM. For devices that have a total memory of 2MB or greater and a 32-bit or 64-bit microprocessor, the Connected Device Configuration (CDC) is used. The CDC uses the CVM and is generally used on set-top TVs, higher-end PDAs, and next generation mobile devices. A configuration (and corresponding virtual machine), combined with a device-specific profile, and the core J2ME libraries, constitutes a complete J2ME environment.

Profiles Overview
Profiles work on top of configurations and focus on a "vertical" market or industry segment of devices. Profiles also allow developers to address more device-specific features such as the life cycle of an application, user interfaces, and networking issues. CDC devices typically use the Foundation profile, which targets devices that require more networking capabilities and no GUIs. CLDC devices typically use the Mobile Information Device Profile (MIDP). For the wireless development that we focus on in this series, we'll be using MIDP.

MIDP
The MIDP consists of APIs for user interface design as well as for database activity. A MIDP application is referred to as a midlet. MIDP even allows multiple midlets to be packaged together as a midlet suite and share information between midlets within the suite. This is generally only useful, however, in the case of midlets that maintain a database. For our purposes, we're interested in MIDP's GUI capabilities. MIDP supports 10 GUI components: Command, Alert, Choice, Choice Group, Form, List, StringItem, TextBox, TextField, and Ticker.

In our sample application, we'll be using the following GUI components:

  • List: Contains a list of choices, typically relies upon a device's "select" or "go" functionality.
  • Command: Presents a choice of action. Contains a label, a type, and a priority.
  • Display: The midlet's canvas upon which UI components are displayed.
  • Alert: Informs the user about an exceptional condition or error. It can also be used to display the results of a query to the user.
To understand how a MIDP user interface is created and how it functions, it's necessary to understand the life cycle of a midlet. This can be seen in four stages, each with a corresponding method defined within the midlet:
  • Initialization: constructor: Every midlet has a default constructor. This is used to initialize a midlet's data members, including GUI components, with their desired property values (size, shape, color, label, text, reference, etc.).
  • Activation: startApp(): Acquires necessary resources, makes display visible to user, and begins to perform requested services.
  • Passivation: pauseApp(): Stops performing services and releases shared resources.
  • Destruction: destroyApp(): Releases shared and local resources and saves any persistent data.
The mobile device will handle the management of a midlet through these life cycle methods via Application Management Software (AMS). AMS frees the developer from directly managing a midlet and its resources.

Writing a MIDP Web Service Client
In this article, we'll create a MIDP client that uses the XML-RPC protocol for invoking remote Web services in a platform- and language-neutral way. To do this, we'll need a J2ME implementation of the XML-RPC protocol. At the time of this writing, the only publicly available client implementation is kXML-RPC, an open-source XML-RPC project for the J2ME platform. kXML-RPC is maintained by the Enhydra organization and can be freely downloaded from their Web site at http://kxmlrpc.enhydra.org. The kXML-RPC library uses Enhydra's kXML parser to handle the low-level XML parsing details. With the addition of the parser, the kxmlrpc jar file reaches a whopping 24kb!

With the kxmlrpc jar file downloaded to your system and placed in your application classpath, you can write the MIDP client. We'll walk through the creation of the midlet and highlight the most interesting lines of code, but the entire source code for the midlet can be seen in Listing 1, and the source for MyMidl et.java can be downloaded from the kXML-RPC Web site (kxmlrpc-samples.zip) located at http://kxmlrpc.enhydra.org/software/downloads/index.html.

The first step, obviously, is to import the necessary packages and declare the MIDP components that will be used in the application. After this, we define the midlet's constructor, initializing all the UI components and adding them to the display as necessary. With that complete, we need to fill in the three other life cycle methods. In the startApp() method, we simply bring the MIDP display into action. Since we don't use any shared resources, the pauseApp() method is blank. Finally, the destroyApp() method releases the local resources that we have allocated for our midlet.

Now we're ready for the interesting part of the code, the commandAction() method. This method is called anytime the user performs a command event (pressing a key, selecting an item from a list, etc.). The Command and Displayable objects are then queried to determine which component has actually been activated/deactivated, and the appropriate actions are performed. Our midlet has three remote XML-RPC Web services displayed in a list (see Figure 2), and a switch statement is performed on the index of that list to determine which item has been selected. In Listing 1, only the first service is given an implementation, but the other two can be seen by downloading the source code.

The Timestamp service is very simple, a parameterless request is sent to the service and a String object representing the current time is returned. To perform this query, a kxmlrpc object is created with the specified URL for the Web service. Then an empty Vector is created and the actual request is performed with the following line:

String serverTime = ( String )
xmlrpc.execute(
"sysTime.getSystemTime", params );

The execute() method accepts two parameters, a String representing the name of the service, and a Vector representing any parameters that should be passed to the service. This particular service returns a String object that is then sent to the screen to display the current time on the server. An example can be seen in Figure 3.

Deploying and Testing a Midlet
For deploying and testing our midlet, we used Sun's J2ME Wireless Toolkit (J2MEWTK) version 1.0.3 beta which can be downloaded from Sun's Web site at http://java.sun.com/products/j2mewtoolkit/. The toolkit is 100% Java, built using the Java 2 Standard Edition, so even though it contains the J2ME APIs and is used for deploying and testing J2ME applications, it requires a J2SE implementation in order to run.

To deploy and test your midlet, you need to do four things: create a project for your application, write the midlet's code, place all of the files and resources in their appropriate application directories, and then build and run the application.

With the toolkit properly installed, the first step is to create a project for your application. To do so, follow these steps:

  • Start the KToolbar application
  • Click the "New Project" button. Name your project and name your project's midlet (this will also be the name used for the midlet in the .java source file).
  • Click the "OK" button on the Settings screen that shows keys and values. This screen represents your application's deployment properties. You can specify these properties now or later by clicking the "Settings" button.
Now that you've created a project, the toolkit has created a corresponding directory structure for your project. That project directory structure is located under the apps directory of the J2MEWTK installation directory. We're only interested in three of them: the source code, resource, and library directories.
  • \src: Place your java midlet's source code files in this directory.
  • \res: Place any resource files (images, text files, etc.) in this directory.
  • \lib: Place JAR files and Java class files that your midlet(s) will need in this directory.
After creating a project, writing the midlet code, and placing all the necessary files in the appropriate directories, you're ready to actually test the application. This requires three essential steps:
  • Build the application into an executable midlet by clicking the "Build" button.
  • Resolve any errors or exceptions that are thrown and rebuild the application until a successful build is accomplished.
  • Execute the application by clicking the "Run" button after a successful build has been created.
When you run a midlet from the J2MEWTK, a phone emulator is started and the toolkit attempts to load your midlet into the emulator. You can test your midlet with any of the supplied emulators, or even download additional emulation environments from the Web. With your midlet running, you can navigate through your midlet just as you would on a real J2ME-enabled wireless phone. If your computer is currently connected to the Web, then you should be able to access the services listed in your midlet code.

Deploying into Production
Once your midlet development and testing is complete, you can package your application into an executable format by selecting the "Package" menu item from the "Project" menu. The toolkit will create a .jar and jad file in your project's \bin directory. The .jad file is used for describing and executing your midlet, while the .jar file contains the Java class files, library and resource files used by your midlet. From now on, simply double-clicking the .jad file will run the midlet.

Looking Ahead
In this article we've taken a look into the world of the wireless Web, XML-RPC as a Web service communication protocol, and the J2ME environment with special attention paid to the MID profile, and also looked at a demonstration of an XML-RPC midlet using the kxmlrpc code. XML-RPC provides a very thin, efficient means of invoking remote services in a standard and neutral way. It defines a succinct set of eight data types, providing the means necessary to encode simple and moderately complex data structures in a highly efficient manner. More often than not, XML-RPC will provide you with all the functionality that you need, especially given the natural constraints of wireless devices. For applications that require more functionality, the Simple Object Access Protocol (SOAP) may be in order. In our next article we'll delve into SOAP and provide a detailed analysis of when to choose SOAP over XML-RPC for wireless computing.

More Stories By Kyle Gabhart

Kyle Gabhart is a subject matter expert specializing in strategic planning and tactical delivery of enterprise technology solutions, blending EA, BPM, SOA, Cloud Computing, and other emerging technologies. Kyle currently serves as a director for Web Age Solutions, a premier provider of technology education and mentoring. Since 2001 he has contributed extensively to the IT community as an author, speaker, consultant, and open source contributor.

Comments (0)

Share your thoughts on this story.

Add your comment
You must be signed in to add a comment. Sign-in | Register

In accordance with our Comment Policy, we encourage comments that are on topic, relevant and to-the-point. We will remove comments that include profanity, personal attacks, racial slurs, threats of violence, or other inappropriate material that violates our Terms and Conditions, and will block users who make repeated violations. We ask all readers to expect diversity of opinion and to treat one another with dignity and respect.


@MicroservicesExpo Stories
"We focus on SAP workloads because they are among the most powerful but somewhat challenging workloads out there to take into public cloud," explained Swen Conrad, CEO of Ocean9, Inc., in this SYS-CON.tv interview at 20th Cloud Expo, held June 6-8, 2017, at the Javits Center in New York City, NY.
"As we've gone out into the public cloud we've seen that over time we may have lost a few things - we've lost control, we've given up cost to a certain extent, and then security, flexibility," explained Steve Conner, VP of Sales at Cloudistics,in this SYS-CON.tv interview at 20th Cloud Expo, held June 6-8, 2017, at the Javits Center in New York City, NY.
"Peak 10 is a hybrid infrastructure provider across the nation. We are in the thick of things when it comes to hybrid IT," explained , Chief Technology Officer at Peak 10, in this SYS-CON.tv interview at 20th Cloud Expo, held June 6-8, 2017, at the Javits Center in New York City, NY.
"I think DevOps is now a rambunctious teenager – it’s starting to get a mind of its own, wanting to get its own things but it still needs some adult supervision," explained Thomas Hooker, VP of marketing at CollabNet, in this SYS-CON.tv interview at DevOps Summit at 20th Cloud Expo, held June 6-8, 2017, at the Javits Center in New York City, NY.
"I will be talking about ChatOps and ChatOps as a way to solve some problems in the DevOps space," explained Himanshu Chhetri, CTO of Addteq, in this SYS-CON.tv interview at @DevOpsSummit at 20th Cloud Expo, held June 6-8, 2017, at the Javits Center in New York City, NY.
Your homes and cars can be automated and self-serviced. Why can't your storage? From simply asking questions to analyze and troubleshoot your infrastructure, to provisioning storage with snapshots, recovery and replication, your wildest sci-fi dream has come true. In his session at @DevOpsSummit at 20th Cloud Expo, Dan Florea, Director of Product Management at Tintri, provided a ChatOps demo where you can talk to your storage and manage it from anywhere, through Slack and similar services with...
If you are thinking about moving applications off a mainframe and over to open systems and the cloud, consider these guidelines to prioritize what to move and what to eliminate. On the surface, mainframe architecture seems relatively simple: A centrally located computer processes data through an input/output subsystem and stores its computations in memory. At the other end of the mainframe are printers and terminals that communicate with the mainframe through protocols. For all of its apparen...
Many organizations are now looking to DevOps maturity models to gauge their DevOps adoption and compare their maturity to their peers. However, as enterprise organizations rush to adopt DevOps, moving past experimentation to embrace it at scale, they are in danger of falling into the trap that they have fallen into time and time again. Unfortunately, we've seen this movie before, and we know how it ends: badly.
DevOps at Cloud Expo, taking place October 31 - November 2, 2017, at the Santa Clara Convention Center in Santa Clara, CA, is co-located with 21st Cloud Expo and will feature technical sessions from a rock star conference faculty and the leading industry players in the world. The widespread success of cloud computing is driving the DevOps revolution in enterprise IT. Now as never before, development teams must communicate and collaborate in a dynamic, 24/7/365 environment. There is no time to w...
From manual human effort the world is slowly paving its way to a new space where most process are getting replaced with tools and systems to improve efficiency and bring down operational costs. Automation is the next big thing and low code platforms are fueling it in a significant way. The Automation era is here. We are in the fast pace of replacing manual human efforts with machines and processes. In the world of Information Technology too, we are linking disparate systems, softwares and tool...
All organizations that did not originate this moment have a pre-existing culture as well as legacy technology and processes that can be more or less amenable to DevOps implementation. That organizational culture is influenced by the personalities and management styles of Executive Management, the wider culture in which the organization is situated, and the personalities of key team members at all levels of the organization. This culture and entrenched interests usually throw a wrench in the work...
There is a huge demand for responsive, real-time mobile and web experiences, but current architectural patterns do not easily accommodate applications that respond to events in real time. Common solutions using message queues or HTTP long-polling quickly lead to resiliency, scalability and development velocity challenges. In his session at 21st Cloud Expo, Ryland Degnan, a Senior Software Engineer on the Netflix Edge Platform team, will discuss how by leveraging a reactive stream-based protocol,...
DevOps sees the coming together of practices, philosophies, and tools that allow you to create services and applications very quickly. This means that you can improve on your apps and evolve them at a much faster rate than those developers who are using traditional software development processes. We’ve talked about DevOps, in general, a great deal, but today, we’re going to dig a little deeper and take a look at Java DevOps specifically.
In his session at 20th Cloud Expo, Mike Johnston, an infrastructure engineer at Supergiant.io, discussed how to use Kubernetes to set up a SaaS infrastructure for your business. Mike Johnston is an infrastructure engineer at Supergiant.io with over 12 years of experience designing, deploying, and maintaining server and workstation infrastructure at all scales. He has experience with brick and mortar data centers as well as cloud providers like Digital Ocean, Amazon Web Services, and Rackspace. H...
With continuous delivery (CD) almost always in the spotlight, continuous integration (CI) is often left out in the cold. Indeed, it's been in use for so long and so widely, we often take the model for granted. So what is CI and how can you make the most of it? This blog is intended to answer those questions. Before we step into examining CI, we need to look back. Software developers often work in small teams and modularity, and need to integrate their changes with the rest of the project code b...
From personal care products to groceries and movies on demand, cloud-based subscriptions are fulfilling the needs of consumers across an array of market sectors. Nowhere is this shift to subscription services more evident than in the technology sector. By adopting an Everything-as-a-Service (XaaS) delivery model, companies are able to tailor their computing environments to shape the experiences they want for customers as well as their workforce.
If you read a lot of business and technology publications, you might think public clouds are universally preferred over all other cloud options. To be sure, the numbers posted by Amazon Web Services (AWS) and Microsoft’s Azure platform are nothing short of impressive. Statistics reveal that public clouds are growing faster than private clouds and analysts at IDC predict that public cloud growth will be 3 times that of private clouds by 2019.
"Outscale was founded in 2010, is based in France, is a strategic partner to Dassault Systémes and has done quite a bit of work with divisions of Dassault," explained Jackie Funk, Digital Marketing exec at Outscale, in this SYS-CON.tv interview at 20th Cloud Expo, held June 6-8, 2017, at the Javits Center in New York City, NY.
"At the keynote this morning we spoke about the value proposition of Nutanix, of having a DevOps culture and a mindset, and the business outcomes of achieving agility and scale, which everybody here is trying to accomplish," noted Mark Lavi, DevOps Solution Architect at Nutanix, in this SYS-CON.tv interview at @DevOpsSummit at 20th Cloud Expo, held June 6-8, 2017, at the Javits Center in New York City, NY.
SYS-CON Events announced today that Calligo has been named “Bronze Sponsor” of SYS-CON's 21st International Cloud Expo®, which will take place on Oct 31 – Nov 2, 2017, at the Santa Clara Convention Center in Santa Clara, CA. Calligo is an innovative cloud service provider offering mid-sized companies the highest levels of data privacy. Calligo offers unparalleled application performance guarantees, commercial flexibility and a personalized support service from its globally located cloud platfor...