1. Field of the Invention
The present invention relates to the field of application development for wireless mobile devices and, more particularly, to developing the server-side components which interact with wireless mobile devices and mobile clients.
2. Description of the Related Art
Mobile Devices have characteristics that differ significantly from the desktop environment. For example, mobile devices often are characterized by small displays, low processor power, less memory, and low bandwidth communications links. Further complicating matters, characteristics such as display size and bandwidth can vary not only among devices, but also among communications protocols.
Accordingly, mobile applications tend to be small and have a relatively small memory footprint. The mobile applications must be able to operate in a low bandwidth environment. Still, such applications must be able to adapt to changing user interfaces and bandwidth availability. In consequence, most mobile applications make use of a proxy. The proxy acts as an interface between the mobile application or client and one or more other servers. The proxy can perform a variety of processing functions to aid the mobile application.
At a fundamental level, proxies forward data from servers to mobile clients. More complex proxy functionality can include the adaptation of a server output stream to a format and bandwidth that is suitable for use by the mobile client. Proxies also can be configured to track the position of the mobile client.
Consumer demand for wireless services and network-aware applications has fueled a trend to release more applications with ever decreasing design cycles and reduced time to market. Still, the development of wireless applications requires a significant amount of effort not only with respect to developing the mobile client, but also with regard to developing the necessary proxy counterpart to the mobile application client. That is, often, the release of a new application or service requires the development of a new proxy for that application, thereby potentially doubling the necessary design time. The development of a proxy can demand the same commitment of resources as is required for the development of the mobile client. Moreover, the development of a robust proxy is essential if the mobile client is to provide significant services to the user.
Client side development has been addressed through tools and platforms such as Java 2 Micro Edition (J2ME), which provides a minimal configuration of a Java virtual machine and application programming interfaces (API's) that embody essential capabilities for a mobile device. Although a number of different tools exist for client-side development, for example the J2ME Wireless Toolkit available from Sun Microsystems of Santa Clara, Calif., and CODEWARRIOR from Metrowerks, of Austin, Tex., a need exists for an integrated development environment for the development of proxies for use with network aware applications and other applications for mobile devices.
The inventive arrangements disclosed herein provide an interactive development environment (IDE) and toolkit for the development of a server-side proxy for use with wireless, mobile clients. Accordingly, the present invention provides a complete infrastructure allowing a developer to efficiently develop a server-side application or proxy to compliment a client side development kit.
The present invention provides a complete and integrated development environment for the developer which can include an editor and a debugger. Additional features can be provided by incorporating aspects of the present invention within an existing development environment as is commercially available from third party developers. For example, a toolbar can be provided within an existing IDE. The toolbar can provide information about the API as well as automatically generate code in accordance with developer specified parameters. In consequence, manual coding of the proxy is minimized as several code generators are provided for developing a proxy shell.
One aspect of the present invention can include an integrated development tool for constructing a server-side proxy for interacting with a wireless, mobile device. The integrated development tool can include at least one module configured to generate program code to perform a specific function of the server-side proxy. The integrated development tool further can include means for accessing the module(s).
In one embodiment of the present invention, the means for accessing functions can include a wizard module for receiving user specified attributes of the server-side proxy. The wizard module can control operation of the module(s) to automatically generate program code specifying a programmatic architecture for the server-side proxy according to the user specified attributes. In another arrangement, the means for accessing functions can include a toolbar having at least one icon that can be activated via user input.
In another embodiment, the integrated development tool can include a module configured to generate program code to extract text from a markup language document. The integrated development tool also can include a module configured to generate program code to packetize data according to a type of wireless communications link over which the data is to be sent. Other exemplary modules that can be included within the integrated development tool can include, but are not limited to, a module configure to generate program code to convert images from a first graphics format to a second graphics format, wherein the second graphics format is suitable for transmission over a wireless communications link to a mobile device, a module configured to generate program code to receive a request originating from the mobile device and generate a hypertext transfer protocol request to an appropriate target, and a module configured to generate program code to maintain user profiles within a data source accessible to the server-side proxy.
The integrated development tool also can include a module configured to generate program code to manipulate data strings for encoding and decoding data and a module configured to generate program code to measure a quality of a communications link to the wireless, mobile device. Still, the integrated development tool can include a module configured to search a Universal Description, Discovery, and Integration registry.
The integrated development tool further can include one or more standardized Web Services Description Language documents, wherein each Web Services Description Language Document corresponds to a particular domain.
Another aspect of the present invention can include a method of constructing a server-side proxy for interacting with a wireless, mobile device. The method can include receiving user input specifying attributes of the server-side proxy and automatically generating program code specifying an architecture for the server-side proxy according to the user specified attributes. The program code can be generated by a plurality of modules, each module configured to generate code to perform a particular function of the server-side proxy.
In one embodiment of the present invention, the automatic generating step can include generating program code to extract text from a markup language document, generating program code to packetize data according to a type of wireless communications link over which the data is to be sent, or generating program code to convert images from a first graphics format to a second graphics format, wherein the second graphics format is suitable for transmission over a wireless communications link to a mobile device.
Still, the automatic generating step can include generating program code to receive a request originating from the mobile device and generate a hypertext transfer protocol request to an appropriate target, generating program code to maintain user profiles within a data source accessible to the server-side proxy, generating program code to manipulate data strings for encoding and decoding data, or generating program code to measure a quality of a communications link to the wireless, mobile. device. The integrated development tool also can include searching a Universal Description, Discovery, and Integration registry.
Other embodiments of the present invention can include a system for constructing a server-side proxy for interacting with a wireless, mobile device having means for performing the various functions described herein as well as a machine readable storage configured to cause a machine to perform the various steps disclosed herein.
There are shown in the drawings embodiments which are presently preferred, it being understood, however, that the invention is not limited to the precise arrangements and instrumentalities shown.
The present invention provides an interactive development environment and accompanying tools (hereafter collectively the “proxy IDE”) for developing a server-side proxy which can interact with a network aware, wireless, mobile client application. The proxy IDE can provide a variety of functions and code generation tools which expedite the development of a proxy for a wireless application. For example, the proxy IDE can provide a range of functions including, but not limited to, text extraction from Hypertext Markup Language (HTML) and Extensible Markup Language (XML) data, datagram packetization, image format conversion, Hypertext Transfer Protocol (HTTP) request support, user profile management, as well as string manipulation.
The functions disclosed herein can be provided through an application programming interface (API). Within the development environment, a toolbar referred to as a “mobile toolbar” can be provided. Additionally, a mobile proxy component for developing a proxy shell can be included. Still, a complete integrated environment containing an editor, a debugger, a compiler, and a host of other features is provided.
The following provides a more detailed description of various API's or components that can be included in the proxy IDE. According to one embodiment of the present invention, the API can be configured such that all classes of the API are implemented as Extension DLLs using Microsoft Foundation Class Library. Although the present invention can be implemented using the C++ programming language, more particularly the Visual C++ programming language, those skilled in the art will recognize that any of a variety of object oriented programming languages can be used, for example the Java programming language.
As such, the following exemplary API's and corresponding syntax are provided for purposes of illustration only, and are not intended to be a limitation of the present invention with regard to the functionality provided or the particular programming language used. Moreover, as the present invention can be used to generate a proxy which communicates with mobile clients using datagrams, those skilled in the art will recognize that the mobile client need not be programmed using the same programming language as that of the proxy. The present invention can be used to develop proxies for use with the Java 2 Micro Edition (J2ME) platform or another platform suited to wireless mobile application development and services.
The proxy IDE can include a text extraction API or module for extracting text from HTML and XML documents. The text extraction API can support the extraction of text from designated ranges of one or more markup language documents. The ranges can be specified by particular tag sets which indicate the start and end point for performing text extraction. Websites typically provide HTML and/or XML formatted responses over low bandwidth communication links. Moreover, HTML and XML documents can be large in comparison with the amount of bandwidth available for transmission of the documents to a mobile client. Accordingly, only a select amount of data need be passed on to the mobile client. The proxy IDE can provide an API for extracting text from various markup language documents. The following is an exemplary listing of text extraction functions that can be included within a proxy shell by the proxy IDE.
The proxy IDE can include a datagram packet API or module for fragmenting strings into smaller units which can be sent over a wireless communications link. For example, the maximum transmission unit of the wireless communications link usually falls short of the capacity to handle the length of strings which often must be sent to the mobile client. In consequence, the proxy must be configured to fragment the string into a unit having a length that can be handled by the wireless communications link. These packets must be assembled in correct order in the mobile client. The datagram packet API of the proxy IDE allows developers to specify a particular length for fragmentation and specify routing of the fragmented data to a given destination address and port number. The API further enables developers to send messages as universal data packets to a destination. The following is an exemplary listing of datagram packetization functions that can be included within a proxy shell by the proxy IDE.
The proxy IDE also can include an image processing API or module. As most mobile devices, such as wireless telephones, have a limited ability to handle and process graphics, proxies typically perform any necessary format conversion of graphic images. The image processing API allows a developer to request conversion of images from any of a variety of formats, for example GIF, JPEG, BMP, or the like, to Portable Network Graphics (PNG) format. Notably, the image processing API can include functions for increasing or decreasing the size of an image, increasing or reducing the resolution of an image, rotating the image, and/or filtering the image so that the client device can display and handle the image properly. The following is an exemplary listing of image processing functions that can be included within a proxy shell by the proxy IDE.
The proxy IDE can include an API or module for decoding requests originating in the mobile client and generating HTTP requests to connect to the appropriate server to acquire data. Accordingly, the proxy IDE can include an API for generating an HTTP query. Notably, the API can accommodate various options which specify whether data is to be requested at periodic time intervals either in a string or in a file. For example, at times, the cache of data on the proxy requires refreshing at periodic intervals. From time to time, data also may need to be resent to the mobile client. In either case, requests must be periodically sent to the server with the appropriate parameters. This involves making HTTP requests and creating connection-using threads—both functions which can be addressed by the HTTP processing API of the proxy IDE. The following methods provide different options for fetching data from a given Website. The following is an exemplary listing of request decoding and generation functions that can be included within a proxy shell by the proxy IDE.
The following methods can be provided by the “httpQuery” class:
The proxy IDE can include an API or module for maintaining user profiles within a data store such as a database. The API can provide functions for storing, selecting, deleting, managing, editing, and updating user profiles which specify names, addresses, telephone numbers, and other user specific preferences. User profiles can specify particular data items to be sent and which data items are not to be sent. Additionally, user profile functions allow users to avoid having to re-enter user specific data and aid in billing services. Accordingly, the user profile API provides the developer with methods to maintain user profiles.
The API also can provide classes to maintain client profiles. For purposes of the following discussion, the term “user” refers to mobile client. For this, a “Profile” database can be created having tables: Address, Property, and UserName. The tables can be used to maintain addresses and properties pertaining to client and client names. For this API to function properly, the system must include a user profile database as well as Open Database Connectivity (ODBC) drivers for the selected database product. The following is an exemplary listing of classes that can be included in this API and the methods associated therewith.
An “address manipulation” class can provide methods to select, update, and delete an address of the client based on “userid”. The class can include:
A “profile manipulation” class can be used to add or get a client profile. The profiles can include a client name and address. The following are methods which can be included in the “profile manipulation” class:
A “property manipulation” class can be used to maintain properties of the mobile client or the mobile client device. A property can be anything which provides details of the client device. Exemplary properties can include, but are not limited to, “display” which can indicate whether a device is a color device. Other properties can indicate particular tastes of the client. For example, “movies” can be set to comedy, action, drama, or the like. The following are the methods which can be included in the “property manipulation class”:
The proxy IDE also can include an API or module for accessing string manipulation functions for encoding and decoding data. For example, taking the case where data from the wireless client to the server and vice versa is sent in UDP packets without any structural information, one does not know how to separate the data at the opposite end. To separate data at the receiving end, applications typically utilize a protocol which describes the position of particular fields within packets. As data is sent to the proxy from the client and vice versa, delimiters can be inserted at the sending location to separate multiple fields. These fields can be recovered at the receiving end based on the delimiters. The string manipulation API provides interfaces to encode and decode the data using delimiters and includes the class “StrManip”, which includes constructors and methods. The following is an exemplary listing of string manipulation functions that can be included within a proxy shell by the proxy IDE.
The Universal Description, Discovery, and Integration (UDDI) browse API or module can provide methods to search the UDDI registry. Limitations of mobile clients make it difficult to inquire deep into the UDDI architecture, communicate with different points, and communicate using Simple Object Access Protocol (SOAP). The proxy, however, can be provided with the functionality necessary to access the UDDI registry, connect to the access point, and fetch the data, thereby acting as a gateway for the mobile client.
The UDDI browse API can provide both find and get API classes to query the UDDI registry on the basis of businessEntity, businessService, bindingTemplate, and tModel. For each class, different methods can be provided to add identifiers and categories to the search criteria. The program can be developed such that the ability to query the UDDI registry in depth is performed at run time. According to one embodiment of the present invention, a communications link with a UDDI portal can be established. The various classes of the UDDI browse API can include, but are not limited to:
1. findBusiness—This class can provide options to search the UDDI registry based upon a business name. The constructors and methods can include:
2. findService—Provides options to search the UDDI registry based upon a business key. The method can return all services provided by that business.
3. findBinding—This class can provide methods to find binding details for a service.
4. findtModel—Enables a search for tModel. The class has the following constructors and methods.
The next four classes can be used to obtain details for any of the four data structures, business, service, binding, and tModel, used in the UDDI registry. The following is a list of exemplary constructors and methods which can be present in each class.
5. getBusinessDetail
6. getServiceDetail
7. getBindingDetail
8. gettModelDetail
Constructors in each case can take the key for that data structure whose details are to be found. The getResponse( ) method can fetch the response from the UDDI registry. The above classes can provide standard UDDI search methods. The first four classes can be used to search on the basis of business, service, binding or tModel, while the last four classes can be used to obtain details for each category.
Another class in this category is the getServices class.
9. getServices—Allows searching of the registry based upon either keyword or tModel. The class can return the following information in the form of an array of ServiceDetails objects:
The getServices class can include the following constructors and methods.
Class ServiceDetails can include the methods to extract the values returned by the above Execute( ) method.
The proxy IDE can include a toolbar component through which a variety of different functions can be provided.
As shown, activation of button 205, referred to as the API methods button, can cause the set of API's provided herein, and listed as selections 230, to be displayed along with the classes and the methods of each set. Upon selecting “Convert to .png format”, the constructors as well as the methods for the selected API can be presented as selections 235. Responsive to selection of one of the methods, code for that method and for calling to that method can be inserted at the current cursor position in an editor window of the proxy IDE. The parameters taken by each method and in addition to the data type of the parameters can be listed as shown.
Activation of button 210, referred to as the WSDL documents button can provide two options to the developer.
The importance of WSDL with regard to Web services is greatly enhanced if standard WSDL documents are defined for specific industries. If interfaces are standardized through WSDL and service providers adhere to them, then the service users can switch from one vendor to another in the event that one vendor stops providing a given service. The user programs should continue to function. Accordingly, the following represents 12 exemplary services, for which WSDL documents can be provided within the proxy IDE.
1. Airline WSDL document can provide detail on the operations involved in airline reservation systems, the messages exchanged, and the message parameters. An exemplary airline WSDL is shown in the Appendix.
2. Movie WSDL document can provide operations for queries about movie releases for developers and users of the service.
3. News WSDL document can provide details on how news should be implemented and accessed.
4. Stock WSDL document can provide details on how services related to stock queries should be implemented and accessed.
5. Travel WSDL document can provide details on travel information services such as hotel reservations and room availability.
6. Weather WSDL document for use by both service providers and users of a weather service.
7. Yellow Pages WSDL document can provide functionality similar to conventional yellow pages.
8. Sports WSDL document.
9. Shopping WSDL document can provide different messages and operations involved in shopping.
10. Medical WSDL document can provide information such as doctor availability, scheduling an appointment, and other medical service functions.
11. Banking WSDL document can specify an interface.
12. Bidding WSDL document can specify an interface.
The WSDL documents for different services can be registered as tModels with a UDDI registry. Vendors interested in mobilizing their services can adhere to these tModels. On the other hand, the application developer can search the UDDI registry on the basis of these tModels. Additionally, programs can be developed in such a way that if one access point for a service is not working, the program automatically looks for a different access point.
The second option is to look for remote WSDL documents. In that case, the developer must provide a complete Website address where that WSDL document is located. The document can be fetched from the source and displayed in a window of the proxy IDE. Displaying the document within the IDE is advantageous since the developer can refer to the document while writing code.
Activation of button 215, referred to as the UDDI search button, can cause a dialog box for performing a UDDI registry search to be displayed.
Searching on the basis of a keyword can yield all of those services whose names contain the keyword. The services are returned from the UDDI registry along with complete details of the business providing that service, service access point, and overview uniform resource locator (URL), which provides information about how to use the service. In most cases, the overview URL points to the location from which the WSDL document can be fetched. Developers further can specify whether the search should include only those services whose technical details are given by the WSDL document.
Still, a developer can search on the basis of a tModel, for which another GUI can be presented. Searching on the basis of a tModel allows the developer to specify the tModel for the service being sought. The search can be made for all services that contain that particular tModel in their tModelBag. The tModel should be specified without the initial “uuid:”. For example, the tModel can be specified as “61D9BB17-841D-4170-BC24-E65A283F6ED2” rather than as “uuid:61D9BB17-841D-4170-BC24-E65A283F6ED2”. The output can be displayed in a window of proxy IDE.
Activation of button 220, referred to as the insert code button, provides options for inserting code corresponding to different functionalities at the current cursor position. Accordingly, a developer can be queried for specific variable names. Once specified, the code can be automatically generated. For example, according to one embodiment of the present invention, the following options can be provided.
Activation of button 225, referred to as the about proxy IDE button, provides information about the proxy IDE and/or the current development project.
The proxy IDE further can include a “Wizard” component for generating a shell for a proxy which conforms to options selected by the developer. The mobile proxy component can provide the following options to a developer for generating a proxy shell:
Still, it should be appreciated that the above listing is provided for purposes of illustration only. As such, additional options and functions can be included within the proxy IDE and presented. In any case, for each of the above options, with the exception of the database support option, appropriate headers and software code can be included in the generated application proxy shell. The last option for the developer to choose is the target device whose display size and display color are to be included in the project.
The wizard can generate several files for the developer as explained in further detail below. The mobile proxy component can generate Listener.cpp and Listener.h files. These files provide all of the functionality of the server, which continuously listens for the client requests at a default port, for example port 5995. For this purpose, a datagram socket can be used. When a datagram packet is received, a new thread that creates a new Worker class object can be instantiated. The Worker class object passes the thread the data along with the client's IP address and port number.
The mobile proxy also can generate Worker.cpp and Worker.h files. This class can provide a run( ) method which is called by the thread initiated in Listener class whenever the proxy receives a datagram from the client. This class can include logic for processing the client request. The class can be provided with data from the client as well as the client's IP address and port number. Worker.cpp can include the constants DISPLAY HEIGHT and DISPLAY WIDTH, which contain the value of the target machine's display height and display width. Worker.cpp further can include the constant DISPLAY COLOR, which states whether the display of the target device can support colors.
The mobile proxy component further can generate dbHandler.cpp and dbHandler.h files. The dbHandler file can be included if the developer makes use of the option “Database Support” and wants to connect with a DSN using ODBC. This class can create a CDatabase object whose name is provided by the developer and also provides all the logic to connect to DSN using ODBC. This class should contain all the methods to manipulate the database.
Still, the present invention is not limited only to those functions disclosed herein, nor to the design of proxies for the J2ME platform. Rather, the functions disclosed herein are provided for purposes of illustration and can be provided for any of a variety of available mobile client platforms. For example, additional functionality and API sets can be included to support Transmission Control Protocol (TCP) between client and proxy, Secure Socket Layer (SSL) communications between client, proxy, and other servers, link quality measurement, and measuring client capabilities.
Link quality measurement refers to the quality of wireless links as such links may not remain constant and can vary with movement as well as the position of the user. An API which can measure link quality between proxy and client can provide significant benefits with regard to adapting applications for changing bandwidth, maximum transmission unit (MTU) of datagram packets, jitter, and latency of the link. Accordingly, the proxy can limit the amount of data to be sent to the mobile client in the event the link quality degrades below a threshold point as determined by the aforementioned factors.
Measuring client capabilities refers to dynamically determining the capabilities of the client device. Although the developer can select a device type during generation of the proxy shell, dynamically determining device capability can be useful in situations in which adaptation to client capabilities is desired. For example, such can be the case wherein multiple devices are to be supported. Accordingly, a dynamic determination of parameters such as display area, graphics capabilities, and processor speed can prove to be beneficial.
The present invention can be realized in hardware, software, or a combination of hardware and software. The present invention can be realized in a centralized fashion in one computer system, or in a distributed fashion where different elements are spread across several interconnected computer systems. Any kind of computer system or other apparatus adapted for carrying out the methods described herein is suited. A typical combination of hardware and software can be a general purpose computer system with a computer program that, when being loaded and executed, controls the computer system such that it carries out the methods described herein.
The present invention also can be embedded in a computer program product, which comprises all the features enabling the implementation of the methods described herein, and which when loaded in a computer system is able to carry out these methods. Computer program in the present context means any expression, in any language, code or notation, of a set of instructions intended to cause a system having an information processing capability to perform a particular function either directly or after either or both of the following: a) conversion to another language, code or notation; b) reproduction in a different material form.
This invention can be embodied in other forms without departing from the spirit or essential attributes thereof. Accordingly, reference should be made to the following claims, rather than to the foregoing specification, as indicating the scope of the invention.
Below is an exemplary WSDL document that provides information regarding the interfaces that can be present in an Airline reservation service. The WSDL document provides detailed information regarding the operations involved in accessing this service, messages exchanged in each operation, parameters, and data types of each parameter.
This application claims the benefit of U.S. Provisional Application No. 60/440,156, filed in the United States Patent and Trademark Office on Jan. 15, 2003, the entirety of which is incorporated herein by reference.
Number | Date | Country | |
---|---|---|---|
60440156 | Jan 2003 | US |