US20080256554A1 - Method and modules for generating client-server applications - Google Patents
Method and modules for generating client-server applications Download PDFInfo
- Publication number
- US20080256554A1 US20080256554A1 US11/733,227 US73322707A US2008256554A1 US 20080256554 A1 US20080256554 A1 US 20080256554A1 US 73322707 A US73322707 A US 73322707A US 2008256554 A1 US2008256554 A1 US 2008256554A1
- Authority
- US
- United States
- Prior art keywords
- server
- client
- computing platform
- model
- user
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/38—Creation or generation of source code for implementing user interfaces
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
- G06F8/24—Object-oriented
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/36—Software reuse
Definitions
- the present invention relates to applications running in client-server in general, and to a model and methods for constructing such applications in particular.
- the model-view-controller design pattern (MVC) is widely used in constructing applications.
- the MVC design pattern suggests separating an application into three layers: a model layer which provides a model of the data to be processed and manipulated, a view layer which provides presentation of the data, and a controller layer which coordinates the model and the view.
- an object is created which implements each of the three layers, thus receiving the basic functionality of each layer without further effort, so that only domain-specific and application-specific tasks have to be implemented.
- the model in the MVC design pattern is a domain-specific representation of the information on which the application operates.
- the model is preferably in communication with a persistent storage, such as a database storing the raw data of the application.
- the model adds an additional layer beyond the storage, which provides the meaning to the raw data, such as interpreting a first date as a birthday, and a second date as an account opening date.
- the view layer renders the model into a form suitable for interaction with a user, typically a user interface element.
- the controller layer processes and responds to events, typically user actions received through the user interface, and may invoke requests or changes on the model in response to the events. For example, web applications are often developed on the basis of the MVC design pattern.
- the view is the code that renders the actual HTML page
- the controller is the code that gathers dynamic data and generates the content within the HTML
- the model is represented by the actual content, represented as objects, the raw data of which is usually stored in a database, XML files or any other persistent storage.
- a typical control flow in an application constructed using the MVC design pattern is as follows: 1. The user interacts with the user interface. 2. The controller handles the input event from the user interface, for example via a registered handler or callback. 3. The controller accesses the model, possibly updating it. 4. One or more views offer a user interface while showing data from the model. Each view receives the data from the model. 5. The user interface is ready for further user interactions, which begin the cycle anew.
- One of the main advantages of the ARC pattern relates to the option of replacing any of the parts, such as the user interface or the storage (for example database) without affecting the other layers.
- the storage for example database
- the MVC does not easily offer itself for use in client-server applications. It will be appreciated by a person skilled in the art that in such applications, that it is possible to locate the model, controller or view layers in either the server or one or more client platforms, and that each chosen location implies different implementation difficulties, technical challenges and user experience. Placing the controller and the view layer in the client platform, with which the user interacts, is generally considered good practice. However, placing and executing the model in either the client computing platform or the server computing platform poses significant difficulties. Placing and executing the model on the server platform harms the application's performance, since communication between the client and the server is required for each request or update. In addition, if connection to the server is lost, the application can not function.
- model layer in the client platform results in duplicated abstraction layers. This may lead to suboptimal software construction. Additionally, placing the model in either the client or the server poses problems when the model is required to communicate with a multiplicity of servers.
- the design pattern and applications built using the design pattern split the model of the traditional model-view-controller design pattern into a server model and a client model.
- the client model stores all data collected from the server model, and stores data changes until the server is available.
- a set of modules for implementing an application used by a user, the application executed in a client-server environment by a client computing platform and a server computing platform, the set of modules including: a server model class providing functionality of communicating with a repository, and supplying initial data and subsequent data retrieved from the repository according to one or more predetermined rules; a view class providing functionality of receiving and supplying the initial data and subsequent data to the user; a client model class providing functionality of issuing one or more requests for initial data and subsequent data, receiving the initial data and subsequent data, keeping the initial data and subsequent data, and supplying the initial data and subsequent data to a view object associated with the view class; and a controller class for providing communication between the view object associated with the view class, a client model object associated with the client model class and a server model object associated with the server model class.
- the one or more predetermined rules are optionally determined based on any one or more elements of the group consisting of: a detail associated with the user, a role of the user, a permission of the user, a privilege of the user, a preference of the user, a geographic location of the client computing platform, a geographic location of the server computing platform, the client-server application, a resource of the client computing platform, memory of the client computing platform, processing power of the client computing platform, a resource of the server computing platform, memory of the server computing platform, processing power of the server computing platform, the repository, and a communication channel between the client computing platform and the server computing platform.
- Another aspect of the disclosed invention relates to a method for constructing a client-server application to be used by a user of a client computing platform and executed by the client computing platform and a server computing platform, the method comprising the steps of: generating a server model object, the server model object communicating with a repository, and supplying initial data and subsequent data retrieved from the repository according to an at least one predetermined rule; generating one or more view objects, each view object receiving and supplying the initial data and subsequent data to the user; generating a client model object for issuing one or more requests for initial data and subsequent data, receiving the initial data and subsequent data, keeping the initial data and subsequent data, and supplying the initial data and subsequent data to the view objects; and generating a controller object for communicating with the view object, the client model object and the server model object, for supplying the initial data and the subsequent data from the server model object to the view object according to the at least one predetermined rule.
- the step of generating the client model object optionally comprises the steps of: implementing an initial data request to the controller object and Implementing a subsequent data request to the controller object.
- the step of generating the controller object can comprise the steps of: implementing a message queue handler; determining an initial data fetching rule; implementing the initial data fetching rule; determining a subsequent data fetching rule; and implementing the subsequent data fetching rule.
- the initial data fetching rule optionally relates to retrieving information from one or more tables of the repository.
- the initial data fetching rule can relate to a number of records that should be fetched from an one or more tables of the repository.
- the subsequent data fetching rule optionally relates to retrieving information from one or more tables of the repository or to a number of records that should be fetched from one or more tables of the repository.
- the initial data fetching rule or the subsequent data fetching rule can be determined based on any one or more elements of the group consisting of: a detail associated with the user, a role of the user, a permission of the user, a privilege of the user, a preference of the user, a geographic location of the client computing platform, a geographic location of the server computing platform, the client-server application, a resource of the client computing platform, memory of the client computing platform, processing power of the client computing platform, a resource of the server computing platform, memory of the server computing platform, processing power of the server computing platform, the repository, and a communication channel between the client computing platform and the server computing platform.
- Yet another aspect of the disclosed invention relates to a computer readable storage medium containing a set of instructions for implementing an application executed in a client-server environment by a client computing platform and a server computing platform, the set of instructions comprising: a server model class providing functionality of communicating with a repository, and supplying initial data and subsequent data retrieved from the repository according to an at least one predetermined rule; a view class providing functionality of receiving and supplying the initial data and subsequent data to the user; a client model class providing functionality of issuing one or more requests for initial data and subsequent data, receiving the initial data and subsequent data, keeping the initial data and subsequent data, and supplying the initial data and subsequent data to a view object associated with the view class; and a controller class for providing communication between the view object associated with the view class, a client model object associated with the client model class and a server model object associated with the server model class.
- FIG. 1 is a block diagram of the main objects in an application implemented according to a preferred embodiment of the MMVC design pattern
- FIG. 2 is a class diagram of the MMVC design pattern
- FIG. 3 is a flow chart of the main steps in a method for constructing a client-server application, in accordance with the MMVC design pattern.
- the disclosed methods and class collection provide a way of constructing client-server applications, which combines the benefits of constructing and activating the model object of the model-view-controller (MVC) design pattern on the server side of the application, with the benefits of constructing and activating the model object on the client side of the application.
- MVC model-view-controller
- MMVC multi-model-view-controller
- the client model object consolidates the data segments into a single data model.
- the client model notifies the views about changes in the data if these changes are relevant to the specific view, according to the way the view registered itself with the model.
- Each server model object communicates with the relevant repository, such as the data base on one hand, and with the controller object, which is activated by the client computing platform on the other hand. Data is passed between the client model object and the server model objects through the controller and according to predetermined algorithms. Changes made in the client model are cached within the controller and are controllably passed to the server model and to the repositories.
- the disclosed solution saves client-server round trips of data and provides a user with high performance, while maintaining data integrity and ensuring that actions such as transactions are not lost, without re-implementing large parts of the functionality, such as transactability, rollback, persistency and others on the client side.
- the application is generally used in a client server environment, in which one or more servers, such as server 1 ( 100 ) and server 2 ( 104 ) provide one or more services to a multiplicity of clients such as client 1 ( 108 ).
- the servers and clients are optionally in geographically apart locations, and are preferably connected by a communication channel, such as a Local Area Network (LAN), Wide Area Network (WAN), the Internet, intranet or the like.
- LAN Local Area Network
- WAN Wide Area Network
- Each of the servers and clients is a general purpose processor provisioned with a CPU and memory.
- Servers 100 and 104 are optionally mainframe computers, personal computers, network computers or the like, executing one or more applications.
- Each of the clients is preferably also a computing platform, such as a mainframe computer, a personal computer, a network computer, a personal digital assistant (PDA), a cellular phone, or the like.
- the applications are preferably implemented as one or more sets of computer instructions arranged in one or more modules, static libraries, dynamic link libraries, which interact with one another.
- the instructions can be written in any one or more programming languages, such as C#, C, C++, Java, VB or others, and under any development environment, such as .NET, J2EE or others.
- any of the servers or clients can be implemented as firmware ported for a specific processor such as digital signal processor (DSP) or microcontrollers, or as hardware or configurable hardware such as field programmable gate array (FPGA) or application specific integrated circuit (ASIC).
- DSP digital signal processor
- FPGA field programmable gate array
- ASIC application specific integrated circuit
- the repository is preferably a database, stored on a storage device for example an optical storage device such as a CD, a DVD, or a laser disk; a magnetic storage device such as a tape or a hard disk; a semiconductor storage device such as Flash device, memory stick, or the like.
- a storage device for example an optical storage device such as a CD, a DVD, or a laser disk; a magnetic storage device such as a tape or a hard disk; a semiconductor storage device such as Flash device, memory stick, or the like.
- Server model objects 112 , 120 and 128 , client model object 136 , controller model object 140 and view model objects 144 and 148 are instantiations of the server model, client model, controller, and view classes, respectively, which are part of the disclosed MMVC model.
- each object is of the corresponding class or of a subclass thereof, and thus inherits or re-implements the functionality of the class as well as application-specific methods.
- the application For each service supported by each server, the application comprises and executes an object which implements the functionality of a server model.
- the server model object functions as the model object in the traditional MVC model.
- server 1 ( 100 ) providing a first application constructs and executes server model object 112
- server 2 104 which provides two applications constructs and executes server model object 120 for the first application and server model 128 for the second application.
- FIG. 1 further comprises an object structure constructed and executed by client 108 when executing a client-side of an application using the disclosed design pattern.
- the application executed on client platform 108 comprises User Interface (UI) library 168 , which comprises UT object 1 ( 170 ) and UI object 2 ( 172 ), which represent the actual objects rendered on the display device.
- UI User Interface
- the objects in UI library 1 ( 168 ) are managed through objects in UI library reference layer 152 , which comprises UI element 1 ( 156 ) and UI element 2 ( 160 ).
- UI element 1 ( 156 ) provides the abstraction level for UI object 1 ( 170 ), and similarly for UI element 2 ( 160 ) and UI object 2 ( 172 ).
- UI elements are used by one or more views, such as view 1 ( 144 ) and view 2 ( 148 ) which manipulate those parts of the data to be shown by the UI elements. It will be appreciated by persons skilled in the art that each view preferable constructs its own UI elements and UI objects, but UI elements constricted from the same class and UI objects constructed from the same class can be used in different views.
- the views communicate with controller object 140 , and with client model object 136 .
- Client model object 136 is a reflection of server model object 112 within client 104 .
- the views such as view 1 ( 144 ) and view 2 ( 148 ) communicate with client model object 136 as they would communicate with the model object if the traditional MVC design pattern was used.
- Controller object 140 mediates between client model 136 and server models 112 , 120 and 128 .
- client model object 136 fetches data from server model objects 112 , 120 and 128 , through controller 140 .
- Client model object 136 keeps the data fetched from the server model objects for future use.
- Controller 140 fetches the data according to predetermined rules, related for example to the initial type and quantity of data to be fetched, continuation type and quantity of data to be fetched, or the like. For example, if the user is permitted to view data from one or more database tables, the initial fetching of the data can bring the latest X records from the relevant tables, and if more data is required, than fetch additional Y records. Then, if the user then needs to see any of the first X records again, they are already present within the data kept within client model 136 and do not have to be re-fetched from a server model over the network. Controller model 140 is thus responsible for fetching data from server models to the client model, from which it is passed to the views, and also for transferring updates from the views and from the client model to the server models.
- the view requests this information from the controller, the controller communicates with the client model and determines that the information is not available; the controller then requests the information from the server model object, which retrieves the information from the repository; the information is then sent to the client model object for storage; and the view is notified. If the user later requests to view the first records again, the records are already available within the client model and the view can be updated without the client having to communicate with the server.
- the MMVC design pattern is preferably implemented when generating a client-server application.
- the implementation can take the form of inheriting, instantiating, inheriting and instantiating, or otherwise implementing the disclosed classes and their respective data and functionality, preferably in accordance with an object oriented methodology.
- functionalities associated with objects usually referred to as “methods”, are hereinafter referred to as “functions”.
- the class diagram of the MMVC includes a server model class 208 objects of which are typically executed by a server computing platform, generally referenced 200 ; and client model class 212 , controller class 216 and view class 220 objects of which are typically executed by a client computing platform, generally referenced 204 .
- server model class 208 objects of which are typically executed by a server computing platform, generally referenced 200
- client model class 212 , controller class 216 and view class 220 objects of which are typically executed by a client computing platform, generally referenced 204 For simplicity, the following description relates to classes. However, it will be appreciated by a person skilled in the art that the actual communication and processing is preferably done by objects of the respective classes or sub-classes thereof
- Controller class 216 generally provides communication between client model class 212 , view classes 220 and server model classes 208 . Since each controller communicates with a single client model, multiple views and multiple server models, each controller has a 1-1 relationship 214 with a client model, 1:N relationship 222 with views such as view 1 ( 220 ) and view 2 ( 224 ), and a 1:M relationship 210 with a server model 208 .
- Client model 212 has a 1:P relationship 218 with views such as view 1 ( 220 ) and view 2 ( 224 ). It will be appreciated that in the context of the disclosed invention, N, M, and P are arbitrary integer numbers. Controller class 216 has attributes, i.e.
- the controller implements the functionality of AddServerModel, for adding a server model to its list, SetClientModel for setting its client model, and RegisterView, i.e. adding a view to the view list.
- AddServerModel for adding a server model to its list
- SetClientModel for setting its client model
- RegisterView i.e. adding a view to the view list.
- a view registers with the controller it notifies the controller of the data types or data sets that are of interest to the view, so that each view is notified about a change in the data only if the data is relevant to the view.
- the controller further has a method of OnNotifyChange in which the server model or the client model informs the controller about data change caused for example by the user of the application, or by change to the data of the server model, and updates the views with the new data, or if the data is updated by the views, sends notifications to the server model and to the client model.
- the controller also comprises one or more methods for handling a message queue, such as QueueHandling. Queue handling methods are intended for collecting messages and updates for the server model when the connection to the server is lost, and passing the information in order when the connection is resumed.
- Queue handling methods are intended for collecting messages and updates for the server model when the connection to the server is lost, and passing the information in order when the connection is resumed.
- the client tries to update the server with changed data when the server is not available, the changes are kept locally on the client and the server is updated later when the connection is resumed.
- the temporary local storage enables the user to continue working on the system.
- the user is optionally notified
- Server model object 208 has the attributes of a Repository, such as a database, and ControllerList which is a collection of controllers.
- Server model 208 preferably supports the function of GetInitialData for getting the first data batch from the repository, and GetNextData for fetching the subsequent batch of data.
- the controller calls the functions of GetInitialData and GetNextData upon request from the views for this data, in situations when the data is not available in the client model. When the data is fetched, it is passed to the client model and thus becomes available to the views.
- Client model 212 has attributes of LocalData, as fetched from the server model and possible changed by the user, possibly a Contorller, and a ViewList of the views reflecting data from the model. Client model 212 also provides the functionality of GetInitialData and GetNextData as server model 208 . However, if the data is not available to client model 212 , it sends a request to controller 216 which in turn requests the data from one of server models 208 . Once the data is received from the server model trough the controller, it is stored within the client model for future use by the views.
- views such as view 1 ( 220 ) and view 2 ( 224 ) are similar to the views of the traditional MVC model, since they address their data request to the controller rather than to the model.
- the views are thus unaware whether the supplied information is already available from the client model or is fetched upon request from the client model using the controller and the server model.
- Each view provides the functionality of OnDataChange which is called when the data in the client model changes, in order to update the view to reflect the changed information.
- class diagram of FIG. 2 shows only the schematic connections and schematic essential data and functionality necessary for implementing the MMVC design pattern, rather than the full details and functionality associated with the classes and objects, which are similar to the details and functionality associated with implementing the traditional MVC design pattern.
- the method comprises implementing a server model class 300 , implementing a client model class 305 , implementing a controller class 310 and implementing a view class 315 .
- the classes are implemented according to the traditional MVC model, except for additions which are detailed below.
- the method comprises implementing the functions of GetInitialData on step 320 and GetNextData on step 325 .
- the functions GetInitialData and GetNextData examine the internal model of the data held within the client model, and if the requested data is not available, the client model addresses the controller.
- the method further comprises implementing a message queue handler step 330 , in which the controller manages the event queue and updated that should be notified to the server model. Handling the events and updates is particularly important for semi-connected systems, in which connection to the server is not continuous, while the user needs to keep working on the application. Thus, the controller stores the changes and updates the server when possible. Controller implementation step 310 further comprises initial data fetching rule determination on step 335 and implementation of the rule on step 340 .
- Initial data fetching rule relates to the initial data requested from the server model for the client model, so that a user can start working with the application, without waiting for response from the server. The rule may depend on the user's identity, role, preferences, or other configurable data.
- Controller implementation step 310 comprises also subsequent data fetching rule determination on step 345 and implementation of the rule on step 350 .
- the subsequent data fetching rule determines how to fetch data from the server model beyond the initial data. The rule may relate to how much data should be fetched, at what time intervals, and other factors, and may again relate to the user's identity, role, preferences, and other configuration details.
- the controller's functions for fetching the initial data and next or subsequent data are preferably called by the client model once it is decided that the client model does not have the requested data, and that such data should be fetched from the server model.
- the controller is further responsible for receiving update notifications from the server model and for updating the client model, and fro synchronizing between the client model and a multiplicity of server models, if the application involves more than one server model, for example when data from more than one server is required by the application.
- the disclosed design pattern and model is an extension of the MVC design pattern, which is suitable for implementing client-server applications.
- Using the disclosed model enables a user to work on the client side of an application, without requiring intensive data fetching from the server, which is time and bandwidth consuming on the one hand, and a total barrier when the server is not available to the client on the other hand.
- Using the disclosed design pattern requires determining and implementing rules, policies or other guidelines for the initial fetching of data from the server model to the client model and subsequent fetches.
- the rules or policies optionally relate to the user's identity, role, permissions, privileges, geographic location of the client and the server, application, software, hardware or other resources such as available bandwidth, processing power, memory, on the repository in which the data is stored, on the communication channel between the client and the server, or and any other factor.
- the initial fetching and subsequent fetching can alternatively relate to data hierarchies. For example, the initial data can be fetched from an initial data set, while subsequent fetching can relate to other data sets. In yet another alternative, the initial fetching and subsequent fetching are determined by the user's behavior. For example, the initial data can be fetched according to the data the user consumed in the previous use of the application, similar to a recently-used mechanism.
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Stored Programmes (AREA)
Abstract
Description
- 1. Field of the Invention
- The present invention relates to applications running in client-server in general, and to a model and methods for constructing such applications in particular.
- 2. Discussion of the Related Art
- The model-view-controller design pattern (MVC) is widely used in constructing applications. The MVC design pattern suggests separating an application into three layers: a model layer which provides a model of the data to be processed and manipulated, a view layer which provides presentation of the data, and a controller layer which coordinates the model and the view. When implementing an application under the object oriented methodology, an object is created which implements each of the three layers, thus receiving the basic functionality of each layer without further effort, so that only domain-specific and application-specific tasks have to be implemented. The model in the MVC design pattern is a domain-specific representation of the information on which the application operates. The model is preferably in communication with a persistent storage, such as a database storing the raw data of the application. The model adds an additional layer beyond the storage, which provides the meaning to the raw data, such as interpreting a first date as a birthday, and a second date as an account opening date. The view layer renders the model into a form suitable for interaction with a user, typically a user interface element. The controller layer processes and responds to events, typically user actions received through the user interface, and may invoke requests or changes on the model in response to the events. For example, web applications are often developed on the basis of the MVC design pattern. In web applications, the view is the code that renders the actual HTML page, the controller is the code that gathers dynamic data and generates the content within the HTML, and the model is represented by the actual content, represented as objects, the raw data of which is usually stored in a database, XML files or any other persistent storage. A typical control flow in an application constructed using the MVC design pattern is as follows: 1. The user interacts with the user interface. 2. The controller handles the input event from the user interface, for example via a registered handler or callback. 3. The controller accesses the model, possibly updating it. 4. One or more views offer a user interface while showing data from the model. Each view receives the data from the model. 5. The user interface is ready for further user interactions, which begin the cycle anew. One of the main advantages of the ARC pattern relates to the option of replacing any of the parts, such as the user interface or the storage (for example database) without affecting the other layers. Thus, it is possible, for example to upgrade any component while avoiding changes in the logic of the applications or other elements which are not replaced.
- However, the MVC does not easily offer itself for use in client-server applications. It will be appreciated by a person skilled in the art that in such applications, that it is possible to locate the model, controller or view layers in either the server or one or more client platforms, and that each chosen location implies different implementation difficulties, technical challenges and user experience. Placing the controller and the view layer in the client platform, with which the user interacts, is generally considered good practice. However, placing and executing the model in either the client computing platform or the server computing platform poses significant difficulties. Placing and executing the model on the server platform harms the application's performance, since communication between the client and the server is required for each request or update. In addition, if connection to the server is lost, the application can not function. On the other hand, if the model is placed on the client platform, then various abstraction levels or services should be developed for the model, such as persistency, server abstraction, connectivity and others. As these abstraction level should be handled by the server platform, due to its connection to the storage, placing the model layer in the client platform results in duplicated abstraction layers. This may lead to suboptimal software construction. Additionally, placing the model in either the client or the server poses problems when the model is required to communicate with a multiplicity of servers.
- There is thus a need in the art for a method that will enable the development of client-server applications, while maintaining the separation between the model, view and control layers. Such method should enable the development of efficient applications, which do not require intensive communication between the client and the server, while maintaining data integrity even while connection between the client and the server is not available. The method should further enable the construction of client-multi-server applications while offering the same advantages.
- It is an object of the present invention to provide a novel design pattern for implementing applications in a client-server environment. The design pattern and applications built using the design pattern split the model of the traditional model-view-controller design pattern into a server model and a client model. The client model stores all data collected from the server model, and stores data changes until the server is available.
- In accordance with the present invention, there is thus provided a set of modules for implementing an application used by a user, the application executed in a client-server environment by a client computing platform and a server computing platform, the set of modules including: a server model class providing functionality of communicating with a repository, and supplying initial data and subsequent data retrieved from the repository according to one or more predetermined rules; a view class providing functionality of receiving and supplying the initial data and subsequent data to the user; a client model class providing functionality of issuing one or more requests for initial data and subsequent data, receiving the initial data and subsequent data, keeping the initial data and subsequent data, and supplying the initial data and subsequent data to a view object associated with the view class; and a controller class for providing communication between the view object associated with the view class, a client model object associated with the client model class and a server model object associated with the server model class. Within the set of modules, the one or more predetermined rules are optionally determined based on any one or more elements of the group consisting of: a detail associated with the user, a role of the user, a permission of the user, a privilege of the user, a preference of the user, a geographic location of the client computing platform, a geographic location of the server computing platform, the client-server application, a resource of the client computing platform, memory of the client computing platform, processing power of the client computing platform, a resource of the server computing platform, memory of the server computing platform, processing power of the server computing platform, the repository, and a communication channel between the client computing platform and the server computing platform.
- Another aspect of the disclosed invention relates to a method for constructing a client-server application to be used by a user of a client computing platform and executed by the client computing platform and a server computing platform, the method comprising the steps of: generating a server model object, the server model object communicating with a repository, and supplying initial data and subsequent data retrieved from the repository according to an at least one predetermined rule; generating one or more view objects, each view object receiving and supplying the initial data and subsequent data to the user; generating a client model object for issuing one or more requests for initial data and subsequent data, receiving the initial data and subsequent data, keeping the initial data and subsequent data, and supplying the initial data and subsequent data to the view objects; and generating a controller object for communicating with the view object, the client model object and the server model object, for supplying the initial data and the subsequent data from the server model object to the view object according to the at least one predetermined rule. Within the method, the step of generating the client model object optionally comprises the steps of: implementing an initial data request to the controller object and Implementing a subsequent data request to the controller object. The step of generating the controller object can comprise the steps of: implementing a message queue handler; determining an initial data fetching rule; implementing the initial data fetching rule; determining a subsequent data fetching rule; and implementing the subsequent data fetching rule. The initial data fetching rule optionally relates to retrieving information from one or more tables of the repository. The initial data fetching rule can relate to a number of records that should be fetched from an one or more tables of the repository. Within the method, the subsequent data fetching rule optionally relates to retrieving information from one or more tables of the repository or to a number of records that should be fetched from one or more tables of the repository. Within the method, the initial data fetching rule or the subsequent data fetching rule can be determined based on any one or more elements of the group consisting of: a detail associated with the user, a role of the user, a permission of the user, a privilege of the user, a preference of the user, a geographic location of the client computing platform, a geographic location of the server computing platform, the client-server application, a resource of the client computing platform, memory of the client computing platform, processing power of the client computing platform, a resource of the server computing platform, memory of the server computing platform, processing power of the server computing platform, the repository, and a communication channel between the client computing platform and the server computing platform.
- Yet another aspect of the disclosed invention relates to a computer readable storage medium containing a set of instructions for implementing an application executed in a client-server environment by a client computing platform and a server computing platform, the set of instructions comprising: a server model class providing functionality of communicating with a repository, and supplying initial data and subsequent data retrieved from the repository according to an at least one predetermined rule; a view class providing functionality of receiving and supplying the initial data and subsequent data to the user; a client model class providing functionality of issuing one or more requests for initial data and subsequent data, receiving the initial data and subsequent data, keeping the initial data and subsequent data, and supplying the initial data and subsequent data to a view object associated with the view class; and a controller class for providing communication between the view object associated with the view class, a client model object associated with the client model class and a server model object associated with the server model class.
- The present invention will be understood and appreciated more fully from the following detailed description taken in conjunction with the drawings in which:
-
FIG. 1 is a block diagram of the main objects in an application implemented according to a preferred embodiment of the MMVC design pattern; -
FIG. 2 is a class diagram of the MMVC design pattern; and -
FIG. 3 is a flow chart of the main steps in a method for constructing a client-server application, in accordance with the MMVC design pattern. - The disclosed methods and class collection provide a way of constructing client-server applications, which combines the benefits of constructing and activating the model object of the model-view-controller (MVC) design pattern on the server side of the application, with the benefits of constructing and activating the model object on the client side of the application. In accordance with a preferred embodiment of the disclosed methods and class collection, there is thus provided a multi-model-view-controller (MMVC) design pattern, which suggests two model objects: a client model object activated by the client computing platform, and a server model object, activated by the server computing platform The client model object retrieves and caches segments of data from one or more server model objects via the controller and according to predetermined rules enforced by the controller. The client model object consolidates the data segments into a single data model. The client model notifies the views about changes in the data if these changes are relevant to the specific view, according to the way the view registered itself with the model. Each server model object communicates with the relevant repository, such as the data base on one hand, and with the controller object, which is activated by the client computing platform on the other hand. Data is passed between the client model object and the server model objects through the controller and according to predetermined algorithms. Changes made in the client model are cached within the controller and are controllably passed to the server model and to the repositories. Thus, the disclosed solution saves client-server round trips of data and provides a user with high performance, while maintaining data integrity and ensuring that actions such as transactions are not lost, without re-implementing large parts of the functionality, such as transactability, rollback, persistency and others on the client side.
- Referring now to
FIG. 1 , showing a block diagram of the main objects in an application implemented according to the disclosed design pattern and method. The application is generally used in a client server environment, in which one or more servers, such as server 1 (100) and server 2 (104) provide one or more services to a multiplicity of clients such as client 1 (108). The servers and clients are optionally in geographically apart locations, and are preferably connected by a communication channel, such as a Local Area Network (LAN), Wide Area Network (WAN), the Internet, intranet or the like. Each of the servers and clients is a general purpose processor provisioned with a CPU and memory. 100 and 104 are optionally mainframe computers, personal computers, network computers or the like, executing one or more applications. Each of the clients is preferably also a computing platform, such as a mainframe computer, a personal computer, a network computer, a personal digital assistant (PDA), a cellular phone, or the like. The applications are preferably implemented as one or more sets of computer instructions arranged in one or more modules, static libraries, dynamic link libraries, which interact with one another. The instructions can be written in any one or more programming languages, such as C#, C, C++, Java, VB or others, and under any development environment, such as .NET, J2EE or others. Alternatively, any of the servers or clients can be implemented as firmware ported for a specific processor such as digital signal processor (DSP) or microcontrollers, or as hardware or configurable hardware such as field programmable gate array (FPGA) or application specific integrated circuit (ASIC). If an executed application is a client-server application, then the server side is executed on one or more servers, and the client side is executed on one or more clients. Each server such as server 1 (100) or server 2 (104) optionally comprises a backend repository, such asServers repository 116 of server 1 (100) and 124 and 132 of server 2 (104). The repository is preferably a database, stored on a storage device for example an optical storage device such as a CD, a DVD, or a laser disk; a magnetic storage device such as a tape or a hard disk; a semiconductor storage device such as Flash device, memory stick, or the like.repositories - Server model objects 112, 120 and 128,
client model object 136,controller model object 140 and view model objects 144 and 148 are instantiations of the server model, client model, controller, and view classes, respectively, which are part of the disclosed MMVC model. Preferably, each object is of the corresponding class or of a subclass thereof, and thus inherits or re-implements the functionality of the class as well as application-specific methods. - For each service supported by each server, the application comprises and executes an object which implements the functionality of a server model. The server model object functions as the model object in the traditional MVC model. Thus, server 1 (100) providing a first application constructs and executes
server model object 112, whileserver 2 104 which provides two applications constructs and executesserver model object 120 for the first application andserver model 128 for the second application.FIG. 1 further comprises an object structure constructed and executed byclient 108 when executing a client-side of an application using the disclosed design pattern. Thus, the application executed onclient platform 108 comprises User Interface (UI)library 168, which comprises UT object 1 (170) and UI object 2 (172), which represent the actual objects rendered on the display device. The objects in UI library 1 (168) are managed through objects in UIlibrary reference layer 152, which comprises UI element 1 (156) and UI element 2 (160). UI element 1 (156) provides the abstraction level for UI object 1 (170), and similarly for UI element 2 (160) and UI object 2 (172). UI elements are used by one or more views, such as view 1 (144) and view 2 (148) which manipulate those parts of the data to be shown by the UI elements. It will be appreciated by persons skilled in the art that each view preferable constructs its own UI elements and UI objects, but UI elements constricted from the same class and UI objects constructed from the same class can be used in different views. The views communicate withcontroller object 140, and withclient model object 136.Client model object 136 is a reflection ofserver model object 112 withinclient 104. The views such as view 1 (144) and view 2 (148) communicate withclient model object 136 as they would communicate with the model object if the traditional MVC design pattern was used.Controller object 140 mediates betweenclient model 136 and 112, 120 and 128. During construction, and upon demand,server models client model object 136 fetches data from server model objects 112, 120 and 128, throughcontroller 140.Client model object 136 keeps the data fetched from the server model objects for future use.Controller 140 fetches the data according to predetermined rules, related for example to the initial type and quantity of data to be fetched, continuation type and quantity of data to be fetched, or the like. For example, if the user is permitted to view data from one or more database tables, the initial fetching of the data can bring the latest X records from the relevant tables, and if more data is required, than fetch additional Y records. Then, if the user then needs to see any of the first X records again, they are already present within the data kept withinclient model 136 and do not have to be re-fetched from a server model over the network.Controller model 140 is thus responsible for fetching data from server models to the client model, from which it is passed to the views, and also for transferring updates from the views and from the client model to the server models. - As an example for the information flow in the system, suppose a number of records from a specific table were initially fetched from the repository to the client model object via a server model. If the user then requests to see additional records, the view requests this information from the controller, the controller communicates with the client model and determines that the information is not available; the controller then requests the information from the server model object, which retrieves the information from the repository; the information is then sent to the client model object for storage; and the view is notified. If the user later requests to view the first records again, the records are already available within the client model and the view can be updated without the client having to communicate with the server.
- Referring now to
FIG. 2 , showing a class diagram of the MMVC design pattern. The MMVC design pattern is preferably implemented when generating a client-server application. The implementation can take the form of inheriting, instantiating, inheriting and instantiating, or otherwise implementing the disclosed classes and their respective data and functionality, preferably in accordance with an object oriented methodology. In order to avoid confusion, functionalities associated with objects, usually referred to as “methods”, are hereinafter referred to as “functions”. - The class diagram of the MMVC includes a
server model class 208 objects of which are typically executed by a server computing platform, generally referenced 200; andclient model class 212,controller class 216 andview class 220 objects of which are typically executed by a client computing platform, generally referenced 204. For simplicity, the following description relates to classes. However, it will be appreciated by a person skilled in the art that the actual communication and processing is preferably done by objects of the respective classes or sub-classes thereof -
Controller class 216 generally provides communication betweenclient model class 212,view classes 220 andserver model classes 208. Since each controller communicates with a single client model, multiple views and multiple server models, each controller has a 1-1relationship 214 with a client model, 1:N relationship 222 with views such as view 1 (220) and view 2 (224), and a 1:Mrelationship 210 with aserver model 208.Client model 212 has a 1:P relationship 218 with views such as view 1 (220) and view 2 (224). It will be appreciated that in the context of the disclosed invention, N, M, and P are arbitrary integer numbers.Controller class 216 has attributes, i.e. comprises or points to: ViewList which is a list of the connected views, ClientModel which is the client model connected to the controller, and ServerModelList which is the list of server models connected to the controller. The controller implements the functionality of AddServerModel, for adding a server model to its list, SetClientModel for setting its client model, and RegisterView, i.e. adding a view to the view list. Optionally, when a view registers with the controller, it notifies the controller of the data types or data sets that are of interest to the view, so that each view is notified about a change in the data only if the data is relevant to the view. The controller further has a method of OnNotifyChange in which the server model or the client model informs the controller about data change caused for example by the user of the application, or by change to the data of the server model, and updates the views with the new data, or if the data is updated by the views, sends notifications to the server model and to the client model. The controller also comprises one or more methods for handling a message queue, such as QueueHandling. Queue handling methods are intended for collecting messages and updates for the server model when the connection to the server is lost, and passing the information in order when the connection is resumed. Thus, if the client tries to update the server with changed data when the server is not available, the changes are kept locally on the client and the server is updated later when the connection is resumed. The temporary local storage enables the user to continue working on the system. In a preferred embodiment of the invention, the user is optionally notified that updating the server is delayed, and is optionally notified when the delayed update is performed. -
Server model object 208 has the attributes of a Repository, such as a database, and ControllerList which is a collection of controllers.Server model 208 preferably supports the function of GetInitialData for getting the first data batch from the repository, and GetNextData for fetching the subsequent batch of data. Preferably, the controller calls the functions of GetInitialData and GetNextData upon request from the views for this data, in situations when the data is not available in the client model. When the data is fetched, it is passed to the client model and thus becomes available to the views. -
Client model 212 has attributes of LocalData, as fetched from the server model and possible changed by the user, possibly a Contorller, and a ViewList of the views reflecting data from the model.Client model 212 also provides the functionality of GetInitialData and GetNextData asserver model 208. However, if the data is not available toclient model 212, it sends a request tocontroller 216 which in turn requests the data from one ofserver models 208. Once the data is received from the server model trough the controller, it is stored within the client model for future use by the views. - The views, such as view 1 (220) and view 2 (224) are similar to the views of the traditional MVC model, since they address their data request to the controller rather than to the model. The views are thus unaware whether the supplied information is already available from the client model or is fetched upon request from the client model using the controller and the server model. Each view provides the functionality of OnDataChange which is called when the data in the client model changes, in order to update the view to reflect the changed information.
- It will be appreciated that the class diagram of
FIG. 2 shows only the schematic connections and schematic essential data and functionality necessary for implementing the MMVC design pattern, rather than the full details and functionality associated with the classes and objects, which are similar to the details and functionality associated with implementing the traditional MVC design pattern. - Referring now to
FIG. 3 , showing a preferred embodiment of a method for constructing a client-server application, in accordance with the disclosed model. The method comprises implementing a server model class 300, implementing aclient model class 305, implementing acontroller class 310 and implementing aview class 315. The classes are implemented according to the traditional MVC model, except for additions which are detailed below. For the client model, the method comprises implementing the functions of GetInitialData onstep 320 and GetNextData onstep 325. The functions GetInitialData and GetNextData examine the internal model of the data held within the client model, and if the requested data is not available, the client model addresses the controller. The method further comprises implementing a messagequeue handler step 330, in which the controller manages the event queue and updated that should be notified to the server model. Handling the events and updates is particularly important for semi-connected systems, in which connection to the server is not continuous, while the user needs to keep working on the application. Thus, the controller stores the changes and updates the server when possible.Controller implementation step 310 further comprises initial data fetching rule determination onstep 335 and implementation of the rule onstep 340. Initial data fetching rule relates to the initial data requested from the server model for the client model, so that a user can start working with the application, without waiting for response from the server. The rule may depend on the user's identity, role, preferences, or other configurable data. For example, it can be determined that for all users tagged as “sales person”, the initial data comprises the latest ten records from a “products” table, and the latest fifty records from “sales” table which relate to their sales. Additionally, the user data or preferences, such as area, language, and others can be used for setting the initial data.Controller implementation step 310 comprises also subsequent data fetching rule determination onstep 345 and implementation of the rule onstep 350. The subsequent data fetching rule determines how to fetch data from the server model beyond the initial data. The rule may relate to how much data should be fetched, at what time intervals, and other factors, and may again relate to the user's identity, role, preferences, and other configuration details. The controller's functions for fetching the initial data and next or subsequent data are preferably called by the client model once it is decided that the client model does not have the requested data, and that such data should be fetched from the server model. The controller is further responsible for receiving update notifications from the server model and for updating the client model, and fro synchronizing between the client model and a multiplicity of server models, if the application involves more than one server model, for example when data from more than one server is required by the application. - It will be appreciated that the order of steps in
FIG. 3 is not obliging, and the order of steps can change according to the convenience of the implementer, as long as the user adheres to the requirement of the programming language and development environment. - The disclosed design pattern and model is an extension of the MVC design pattern, which is suitable for implementing client-server applications. Using the disclosed model enables a user to work on the client side of an application, without requiring intensive data fetching from the server, which is time and bandwidth consuming on the one hand, and a total barrier when the server is not available to the client on the other hand. Using the disclosed design pattern requires determining and implementing rules, policies or other guidelines for the initial fetching of data from the server model to the client model and subsequent fetches. The rules or policies optionally relate to the user's identity, role, permissions, privileges, geographic location of the client and the server, application, software, hardware or other resources such as available bandwidth, processing power, memory, on the repository in which the data is stored, on the communication channel between the client and the server, or and any other factor. The initial fetching and subsequent fetching can alternatively relate to data hierarchies. For example, the initial data can be fetched from an initial data set, while subsequent fetching can relate to other data sets. In yet another alternative, the initial fetching and subsequent fetching are determined by the user's behavior. For example, the initial data can be fetched according to the data the user consumed in the previous use of the application, similar to a recently-used mechanism.
- It will be appreciated by persons skilled in the art that the present invention is not limited to what has been particularly shown and described hereinabove. Rather the scope of the present invention is defined only by the claims which follow.
Claims (12)
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US11/733,227 US7934191B2 (en) | 2007-04-10 | 2007-04-10 | Method and modules for generating client-server applications |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US11/733,227 US7934191B2 (en) | 2007-04-10 | 2007-04-10 | Method and modules for generating client-server applications |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| US20080256554A1 true US20080256554A1 (en) | 2008-10-16 |
| US7934191B2 US7934191B2 (en) | 2011-04-26 |
Family
ID=39854958
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| US11/733,227 Active 2030-02-23 US7934191B2 (en) | 2007-04-10 | 2007-04-10 | Method and modules for generating client-server applications |
Country Status (1)
| Country | Link |
|---|---|
| US (1) | US7934191B2 (en) |
Cited By (68)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US20100293521A1 (en) * | 2009-05-18 | 2010-11-18 | Austin Paul F | Cooperative Execution of Graphical Data Flow Programs in Multiple Browsers |
| US20120023421A1 (en) * | 2010-07-22 | 2012-01-26 | Sap Ag | Model for extensions to system providing user interface applications |
| US20120159420A1 (en) * | 2010-12-16 | 2012-06-21 | Sap Ag | Quality on Submit Process |
| US20120311725A1 (en) * | 2011-06-01 | 2012-12-06 | Microsoft Corporation | Moderation of shared data objects |
| US20150089350A1 (en) * | 2013-09-20 | 2015-03-26 | Oracle International Corporation | Model-driven desktop integration framework |
| US20170048339A1 (en) * | 2015-08-10 | 2017-02-16 | Oracle International Corporation | Transactional autosave with local and remote lifecycles |
| US9948700B2 (en) | 2014-07-01 | 2018-04-17 | Oracle International Corporation | ADFDI support for custom attribute properties |
| CN108038009A (en) * | 2017-12-22 | 2018-05-15 | 金蝶软件(中国)有限公司 | Front and back end exchange method, device and computer equipment based on Web applications |
| US10013668B2 (en) | 2015-08-14 | 2018-07-03 | Oracle International Corporation | Secure storage of enterprise certificates for cloud services |
| US10048948B2 (en) | 2015-07-06 | 2018-08-14 | Oracle International Corporation | Optimized retrieval of custom string resources |
| US10127206B2 (en) | 2014-07-16 | 2018-11-13 | Oracle International Corporation | Dynamic column groups in excel |
| US10255061B2 (en) | 2016-08-05 | 2019-04-09 | Oracle International Corporation | Zero down time upgrade for a multi-tenant identity and data security management cloud service |
| US10261836B2 (en) | 2017-03-21 | 2019-04-16 | Oracle International Corporation | Dynamic dispatching of workloads spanning heterogeneous services |
| US10261761B1 (en) * | 2014-03-19 | 2019-04-16 | Amazon Technologies, Inc. | Template-driven data access |
| US10263947B2 (en) | 2016-08-05 | 2019-04-16 | Oracle International Corporation | LDAP to SCIM proxy service |
| US10296305B2 (en) * | 2013-09-27 | 2019-05-21 | Rudolf Markus PETRI | Method and device for the automated production and provision of at least one software application |
| US10341410B2 (en) | 2016-05-11 | 2019-07-02 | Oracle International Corporation | Security tokens for a multi-tenant identity and data security management cloud service |
| US10341354B2 (en) | 2016-09-16 | 2019-07-02 | Oracle International Corporation | Distributed high availability agent architecture |
| US10348858B2 (en) | 2017-09-15 | 2019-07-09 | Oracle International Corporation | Dynamic message queues for a microservice based cloud service |
| US10417607B1 (en) * | 2015-05-19 | 2019-09-17 | Amazon Technologies, Inc. | Status updates during latency |
| US10419514B2 (en) | 2015-08-14 | 2019-09-17 | Oracle International Corporation | Discovery of federated logins |
| US10425386B2 (en) | 2016-05-11 | 2019-09-24 | Oracle International Corporation | Policy enforcement point for a multi-tenant identity and data security management cloud service |
| US10445395B2 (en) | 2016-09-16 | 2019-10-15 | Oracle International Corporation | Cookie based state propagation for a multi-tenant identity cloud service |
| US10452497B2 (en) | 2015-08-14 | 2019-10-22 | Oracle International Corporation | Restoration of UI state in transactional systems |
| US10454940B2 (en) | 2016-05-11 | 2019-10-22 | Oracle International Corporation | Identity cloud service authorization model |
| US10454915B2 (en) | 2017-05-18 | 2019-10-22 | Oracle International Corporation | User authentication using kerberos with identity cloud service |
| US10484382B2 (en) | 2016-08-31 | 2019-11-19 | Oracle International Corporation | Data management for a multi-tenant identity cloud service |
| US10484243B2 (en) | 2016-09-16 | 2019-11-19 | Oracle International Corporation | Application management for a multi-tenant identity cloud service |
| US10505941B2 (en) | 2016-08-05 | 2019-12-10 | Oracle International Corporation | Virtual directory system for LDAP to SCIM proxy service |
| US10511589B2 (en) | 2016-09-14 | 2019-12-17 | Oracle International Corporation | Single logout functionality for a multi-tenant identity and data security management cloud service |
| US10516672B2 (en) | 2016-08-05 | 2019-12-24 | Oracle International Corporation | Service discovery for a multi-tenant identity and data security management cloud service |
| US10530578B2 (en) | 2016-08-05 | 2020-01-07 | Oracle International Corporation | Key store service |
| US10567364B2 (en) | 2016-09-16 | 2020-02-18 | Oracle International Corporation | Preserving LDAP hierarchy in a SCIM directory using special marker groups |
| US10581820B2 (en) | 2016-05-11 | 2020-03-03 | Oracle International Corporation | Key generation and rollover |
| US10582012B2 (en) | 2015-10-16 | 2020-03-03 | Oracle International Corporation | Adaptive data transfer optimization |
| US10582001B2 (en) | 2015-08-11 | 2020-03-03 | Oracle International Corporation | Asynchronous pre-caching of synchronously loaded resources |
| US10585682B2 (en) | 2016-08-05 | 2020-03-10 | Oracle International Corporation | Tenant self-service troubleshooting for a multi-tenant identity and data security management cloud service |
| US10594684B2 (en) | 2016-09-14 | 2020-03-17 | Oracle International Corporation | Generating derived credentials for a multi-tenant identity cloud service |
| US10616224B2 (en) | 2016-09-16 | 2020-04-07 | Oracle International Corporation | Tenant and service management for a multi-tenant identity and data security management cloud service |
| US10693861B2 (en) | 2016-05-11 | 2020-06-23 | Oracle International Corporation | Task segregation in a multi-tenant identity and data security management cloud service |
| US10705823B2 (en) | 2017-09-29 | 2020-07-07 | Oracle International Corporation | Application templates and upgrade framework for a multi-tenant identity cloud service |
| US10715564B2 (en) | 2018-01-29 | 2020-07-14 | Oracle International Corporation | Dynamic client registration for an identity cloud service |
| US10735394B2 (en) | 2016-08-05 | 2020-08-04 | Oracle International Corporation | Caching framework for a multi-tenant identity and data security management cloud service |
| US10764273B2 (en) | 2018-06-28 | 2020-09-01 | Oracle International Corporation | Session synchronization across multiple devices in an identity cloud service |
| US10791087B2 (en) | 2016-09-16 | 2020-09-29 | Oracle International Corporation | SCIM to LDAP mapping using subtype attributes |
| US10798165B2 (en) | 2018-04-02 | 2020-10-06 | Oracle International Corporation | Tenant data comparison for a multi-tenant identity cloud service |
| US10834137B2 (en) | 2017-09-28 | 2020-11-10 | Oracle International Corporation | Rest-based declarative policy management |
| US10831789B2 (en) | 2017-09-27 | 2020-11-10 | Oracle International Corporation | Reference attribute query processing for a multi-tenant cloud service |
| US10846390B2 (en) | 2016-09-14 | 2020-11-24 | Oracle International Corporation | Single sign-on functionality for a multi-tenant identity and data security management cloud service |
| US10878079B2 (en) | 2016-05-11 | 2020-12-29 | Oracle International Corporation | Identity cloud service authorization model with dynamic roles and scopes |
| US10904074B2 (en) | 2016-09-17 | 2021-01-26 | Oracle International Corporation | Composite event handler for a multi-tenant identity cloud service |
| US10931656B2 (en) | 2018-03-27 | 2021-02-23 | Oracle International Corporation | Cross-region trust for a multi-tenant identity cloud service |
| US11012444B2 (en) | 2018-06-25 | 2021-05-18 | Oracle International Corporation | Declarative third party identity provider integration for a multi-tenant identity cloud service |
| US11061929B2 (en) | 2019-02-08 | 2021-07-13 | Oracle International Corporation | Replication of resource type and schema metadata for a multi-tenant identity cloud service |
| US11165634B2 (en) | 2018-04-02 | 2021-11-02 | Oracle International Corporation | Data replication conflict detection and resolution for a multi-tenant identity cloud service |
| US11258775B2 (en) | 2018-04-04 | 2022-02-22 | Oracle International Corporation | Local write for a multi-tenant identity cloud service |
| US11271969B2 (en) | 2017-09-28 | 2022-03-08 | Oracle International Corporation | Rest-based declarative policy management |
| US11321187B2 (en) | 2018-10-19 | 2022-05-03 | Oracle International Corporation | Assured lazy rollback for a multi-tenant identity cloud service |
| US11321343B2 (en) | 2019-02-19 | 2022-05-03 | Oracle International Corporation | Tenant replication bootstrap for a multi-tenant identity cloud service |
| US20220197448A1 (en) * | 2019-04-11 | 2022-06-23 | Beijing Bytedance Network Technology Co., Ltd. | Method, apparatus and device for displaying followed user information, and storage medium |
| US11423111B2 (en) | 2019-02-25 | 2022-08-23 | Oracle International Corporation | Client API for rest based endpoints for a multi-tenant identify cloud service |
| US11611548B2 (en) | 2019-11-22 | 2023-03-21 | Oracle International Corporation | Bulk multifactor authentication enrollment |
| US11651357B2 (en) | 2019-02-01 | 2023-05-16 | Oracle International Corporation | Multifactor authentication without a user footprint |
| US11669321B2 (en) | 2019-02-20 | 2023-06-06 | Oracle International Corporation | Automated database upgrade for a multi-tenant identity cloud service |
| US11687378B2 (en) | 2019-09-13 | 2023-06-27 | Oracle International Corporation | Multi-tenant identity cloud service with on-premise authentication integration and bridge high availability |
| US11693835B2 (en) | 2018-10-17 | 2023-07-04 | Oracle International Corporation | Dynamic database schema allocation on tenant onboarding for a multi-tenant identity cloud service |
| US11792226B2 (en) | 2019-02-25 | 2023-10-17 | Oracle International Corporation | Automatic api document generation from scim metadata |
| US11870770B2 (en) | 2019-09-13 | 2024-01-09 | Oracle International Corporation | Multi-tenant identity cloud service with on-premise authentication integration |
Families Citing this family (7)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US8412797B2 (en) * | 2009-08-27 | 2013-04-02 | Vmware, Inc. | Platform for development and deployment of system administration solutions |
| US20120291006A1 (en) * | 2011-05-12 | 2012-11-15 | Google Inc. | Development Architecture for Cloud-Based Applications |
| US8856803B2 (en) | 2011-11-02 | 2014-10-07 | Oracle International Corporation | Content delivery within an application |
| US9292260B2 (en) * | 2012-06-22 | 2016-03-22 | Oracle International Corporation | Method and system for implementing a pattern viewer |
| US9513885B2 (en) | 2013-08-22 | 2016-12-06 | Peter Warren | Web application development platform with relationship modeling |
| US20150067138A1 (en) | 2013-08-27 | 2015-03-05 | International Business Machines Corporation | Optimize data exchange for mvc-based web applications |
| CN109062628A (en) * | 2018-07-12 | 2018-12-21 | 北京猫眼文化传媒有限公司 | A kind of module polymerization loading method and device |
Citations (8)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US20030145305A1 (en) * | 2001-11-16 | 2003-07-31 | Mario Ruggier | Method for developing and managing large-scale web user interfaces (WUI) and computing system for said WUI |
| US20050268277A1 (en) * | 2004-06-01 | 2005-12-01 | Uwe Reeder | Dynamic contexts |
| US20050273759A1 (en) * | 2000-12-04 | 2005-12-08 | Lucassen John M | MVC (Model-View-Controller) based multi-modal authoring tool and development environment |
| US20060143592A1 (en) * | 2004-12-28 | 2006-06-29 | Bender Lothar H | Pluggable model framework |
| US20070233691A1 (en) * | 2006-03-30 | 2007-10-04 | Sap Ag | System and method for implementing accumulative rows within master tables |
| US20080228610A1 (en) * | 2004-08-20 | 2008-09-18 | Sk Telecom Co., Ltd. | Interface Architecture of Subscriber Information Management Billing, Prepaid System for Mobile Network System, and Prepaid Method Using the Interface Architecture |
| US7496895B1 (en) * | 2004-12-29 | 2009-02-24 | The Mathworks, Inc. | Multi-domain unified debugger |
| US7702719B1 (en) * | 2000-02-08 | 2010-04-20 | International Business Machines Corporation | Methods and apparatus for reducing the number of server interactions in network-based applications using a dual-MVC approach |
-
2007
- 2007-04-10 US US11/733,227 patent/US7934191B2/en active Active
Patent Citations (8)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US7702719B1 (en) * | 2000-02-08 | 2010-04-20 | International Business Machines Corporation | Methods and apparatus for reducing the number of server interactions in network-based applications using a dual-MVC approach |
| US20050273759A1 (en) * | 2000-12-04 | 2005-12-08 | Lucassen John M | MVC (Model-View-Controller) based multi-modal authoring tool and development environment |
| US20030145305A1 (en) * | 2001-11-16 | 2003-07-31 | Mario Ruggier | Method for developing and managing large-scale web user interfaces (WUI) and computing system for said WUI |
| US20050268277A1 (en) * | 2004-06-01 | 2005-12-01 | Uwe Reeder | Dynamic contexts |
| US20080228610A1 (en) * | 2004-08-20 | 2008-09-18 | Sk Telecom Co., Ltd. | Interface Architecture of Subscriber Information Management Billing, Prepaid System for Mobile Network System, and Prepaid Method Using the Interface Architecture |
| US20060143592A1 (en) * | 2004-12-28 | 2006-06-29 | Bender Lothar H | Pluggable model framework |
| US7496895B1 (en) * | 2004-12-29 | 2009-02-24 | The Mathworks, Inc. | Multi-domain unified debugger |
| US20070233691A1 (en) * | 2006-03-30 | 2007-10-04 | Sap Ag | System and method for implementing accumulative rows within master tables |
Cited By (95)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US20100293521A1 (en) * | 2009-05-18 | 2010-11-18 | Austin Paul F | Cooperative Execution of Graphical Data Flow Programs in Multiple Browsers |
| US8392876B2 (en) * | 2009-05-18 | 2013-03-05 | National Instruments Corporation | Cooperative execution of graphical data flow programs in multiple browsers |
| US20120023421A1 (en) * | 2010-07-22 | 2012-01-26 | Sap Ag | Model for extensions to system providing user interface applications |
| US8984489B2 (en) * | 2010-12-16 | 2015-03-17 | Sap Portals Israel Ltd | Quality on submit process |
| US20120159420A1 (en) * | 2010-12-16 | 2012-06-21 | Sap Ag | Quality on Submit Process |
| US8584079B2 (en) * | 2010-12-16 | 2013-11-12 | Sap Portals Israel Ltd | Quality on submit process |
| US9268960B2 (en) * | 2011-06-01 | 2016-02-23 | Microsoft Technology Licensing, Llc | Moderation of shared data objects |
| US20120311725A1 (en) * | 2011-06-01 | 2012-12-06 | Microsoft Corporation | Moderation of shared data objects |
| US20150089350A1 (en) * | 2013-09-20 | 2015-03-26 | Oracle International Corporation | Model-driven desktop integration framework |
| US10073825B2 (en) | 2013-09-20 | 2018-09-11 | Oracle International Corporation | Model-driven tooltips in excel |
| US9619453B2 (en) | 2013-09-20 | 2017-04-11 | Oracle International Corporation | Model-driven list picker |
| US9626350B2 (en) | 2013-09-20 | 2017-04-18 | Oracle International Corporation | Date picker in excel |
| US9740676B2 (en) | 2013-09-20 | 2017-08-22 | Oracle International Corporation | Automatic column resizing |
| US9772987B2 (en) * | 2013-09-20 | 2017-09-26 | Oracle International Corporation | Model-driven desktop integration framework |
| US10223347B2 (en) | 2013-09-20 | 2019-03-05 | Oracle International Corporation | Date picker in excel |
| US10296305B2 (en) * | 2013-09-27 | 2019-05-21 | Rudolf Markus PETRI | Method and device for the automated production and provision of at least one software application |
| US10261761B1 (en) * | 2014-03-19 | 2019-04-16 | Amazon Technologies, Inc. | Template-driven data access |
| US9948700B2 (en) | 2014-07-01 | 2018-04-17 | Oracle International Corporation | ADFDI support for custom attribute properties |
| US10127206B2 (en) | 2014-07-16 | 2018-11-13 | Oracle International Corporation | Dynamic column groups in excel |
| US10248634B2 (en) | 2014-07-16 | 2019-04-02 | Oracle International Corporation | Model-driven data entry validation |
| US10417607B1 (en) * | 2015-05-19 | 2019-09-17 | Amazon Technologies, Inc. | Status updates during latency |
| US10048948B2 (en) | 2015-07-06 | 2018-08-14 | Oracle International Corporation | Optimized retrieval of custom string resources |
| US11102313B2 (en) * | 2015-08-10 | 2021-08-24 | Oracle International Corporation | Transactional autosave with local and remote lifecycles |
| US20170048339A1 (en) * | 2015-08-10 | 2017-02-16 | Oracle International Corporation | Transactional autosave with local and remote lifecycles |
| US10582001B2 (en) | 2015-08-11 | 2020-03-03 | Oracle International Corporation | Asynchronous pre-caching of synchronously loaded resources |
| US10013668B2 (en) | 2015-08-14 | 2018-07-03 | Oracle International Corporation | Secure storage of enterprise certificates for cloud services |
| US10452497B2 (en) | 2015-08-14 | 2019-10-22 | Oracle International Corporation | Restoration of UI state in transactional systems |
| US10419514B2 (en) | 2015-08-14 | 2019-09-17 | Oracle International Corporation | Discovery of federated logins |
| US10582012B2 (en) | 2015-10-16 | 2020-03-03 | Oracle International Corporation | Adaptive data transfer optimization |
| US11088993B2 (en) | 2016-05-11 | 2021-08-10 | Oracle International Corporation | Policy enforcement point for a multi-tenant identity and data security management cloud service |
| US10581820B2 (en) | 2016-05-11 | 2020-03-03 | Oracle International Corporation | Key generation and rollover |
| US10878079B2 (en) | 2016-05-11 | 2020-12-29 | Oracle International Corporation | Identity cloud service authorization model with dynamic roles and scopes |
| US10425386B2 (en) | 2016-05-11 | 2019-09-24 | Oracle International Corporation | Policy enforcement point for a multi-tenant identity and data security management cloud service |
| US10848543B2 (en) | 2016-05-11 | 2020-11-24 | Oracle International Corporation | Security tokens for a multi-tenant identity and data security management cloud service |
| US10341410B2 (en) | 2016-05-11 | 2019-07-02 | Oracle International Corporation | Security tokens for a multi-tenant identity and data security management cloud service |
| US10454940B2 (en) | 2016-05-11 | 2019-10-22 | Oracle International Corporation | Identity cloud service authorization model |
| US10693861B2 (en) | 2016-05-11 | 2020-06-23 | Oracle International Corporation | Task segregation in a multi-tenant identity and data security management cloud service |
| US10263947B2 (en) | 2016-08-05 | 2019-04-16 | Oracle International Corporation | LDAP to SCIM proxy service |
| US10585682B2 (en) | 2016-08-05 | 2020-03-10 | Oracle International Corporation | Tenant self-service troubleshooting for a multi-tenant identity and data security management cloud service |
| US10505941B2 (en) | 2016-08-05 | 2019-12-10 | Oracle International Corporation | Virtual directory system for LDAP to SCIM proxy service |
| US10735394B2 (en) | 2016-08-05 | 2020-08-04 | Oracle International Corporation | Caching framework for a multi-tenant identity and data security management cloud service |
| US10516672B2 (en) | 2016-08-05 | 2019-12-24 | Oracle International Corporation | Service discovery for a multi-tenant identity and data security management cloud service |
| US10530578B2 (en) | 2016-08-05 | 2020-01-07 | Oracle International Corporation | Key store service |
| US10721237B2 (en) | 2016-08-05 | 2020-07-21 | Oracle International Corporation | Hierarchical processing for a virtual directory system for LDAP to SCIM proxy service |
| US10579367B2 (en) | 2016-08-05 | 2020-03-03 | Oracle International Corporation | Zero down time upgrade for a multi-tenant identity and data security management cloud service |
| US10255061B2 (en) | 2016-08-05 | 2019-04-09 | Oracle International Corporation | Zero down time upgrade for a multi-tenant identity and data security management cloud service |
| US11356454B2 (en) | 2016-08-05 | 2022-06-07 | Oracle International Corporation | Service discovery for a multi-tenant identity and data security management cloud service |
| US11601411B2 (en) | 2016-08-05 | 2023-03-07 | Oracle International Corporation | Caching framework for a multi-tenant identity and data security management cloud service |
| US10484382B2 (en) | 2016-08-31 | 2019-11-19 | Oracle International Corporation | Data management for a multi-tenant identity cloud service |
| US11258797B2 (en) | 2016-08-31 | 2022-02-22 | Oracle International Corporation | Data management for a multi-tenant identity cloud service |
| US10511589B2 (en) | 2016-09-14 | 2019-12-17 | Oracle International Corporation | Single logout functionality for a multi-tenant identity and data security management cloud service |
| US10594684B2 (en) | 2016-09-14 | 2020-03-17 | Oracle International Corporation | Generating derived credentials for a multi-tenant identity cloud service |
| US11258786B2 (en) | 2016-09-14 | 2022-02-22 | Oracle International Corporation | Generating derived credentials for a multi-tenant identity cloud service |
| US10846390B2 (en) | 2016-09-14 | 2020-11-24 | Oracle International Corporation | Single sign-on functionality for a multi-tenant identity and data security management cloud service |
| US10445395B2 (en) | 2016-09-16 | 2019-10-15 | Oracle International Corporation | Cookie based state propagation for a multi-tenant identity cloud service |
| US10616224B2 (en) | 2016-09-16 | 2020-04-07 | Oracle International Corporation | Tenant and service management for a multi-tenant identity and data security management cloud service |
| US10484243B2 (en) | 2016-09-16 | 2019-11-19 | Oracle International Corporation | Application management for a multi-tenant identity cloud service |
| US10567364B2 (en) | 2016-09-16 | 2020-02-18 | Oracle International Corporation | Preserving LDAP hierarchy in a SCIM directory using special marker groups |
| US11023555B2 (en) | 2016-09-16 | 2021-06-01 | Oracle International Corporation | Cookie based state propagation for a multi-tenant identity cloud service |
| US10791087B2 (en) | 2016-09-16 | 2020-09-29 | Oracle International Corporation | SCIM to LDAP mapping using subtype attributes |
| US10341354B2 (en) | 2016-09-16 | 2019-07-02 | Oracle International Corporation | Distributed high availability agent architecture |
| US10904074B2 (en) | 2016-09-17 | 2021-01-26 | Oracle International Corporation | Composite event handler for a multi-tenant identity cloud service |
| US10261836B2 (en) | 2017-03-21 | 2019-04-16 | Oracle International Corporation | Dynamic dispatching of workloads spanning heterogeneous services |
| US10454915B2 (en) | 2017-05-18 | 2019-10-22 | Oracle International Corporation | User authentication using kerberos with identity cloud service |
| US10348858B2 (en) | 2017-09-15 | 2019-07-09 | Oracle International Corporation | Dynamic message queues for a microservice based cloud service |
| US10831789B2 (en) | 2017-09-27 | 2020-11-10 | Oracle International Corporation | Reference attribute query processing for a multi-tenant cloud service |
| US11308132B2 (en) | 2017-09-27 | 2022-04-19 | Oracle International Corporation | Reference attributes for related stored objects in a multi-tenant cloud service |
| US10834137B2 (en) | 2017-09-28 | 2020-11-10 | Oracle International Corporation | Rest-based declarative policy management |
| US11271969B2 (en) | 2017-09-28 | 2022-03-08 | Oracle International Corporation | Rest-based declarative policy management |
| US10705823B2 (en) | 2017-09-29 | 2020-07-07 | Oracle International Corporation | Application templates and upgrade framework for a multi-tenant identity cloud service |
| CN108038009A (en) * | 2017-12-22 | 2018-05-15 | 金蝶软件(中国)有限公司 | Front and back end exchange method, device and computer equipment based on Web applications |
| US11463488B2 (en) | 2018-01-29 | 2022-10-04 | Oracle International Corporation | Dynamic client registration for an identity cloud service |
| US10715564B2 (en) | 2018-01-29 | 2020-07-14 | Oracle International Corporation | Dynamic client registration for an identity cloud service |
| US10931656B2 (en) | 2018-03-27 | 2021-02-23 | Oracle International Corporation | Cross-region trust for a multi-tenant identity cloud service |
| US11528262B2 (en) | 2018-03-27 | 2022-12-13 | Oracle International Corporation | Cross-region trust for a multi-tenant identity cloud service |
| US11165634B2 (en) | 2018-04-02 | 2021-11-02 | Oracle International Corporation | Data replication conflict detection and resolution for a multi-tenant identity cloud service |
| US11652685B2 (en) | 2018-04-02 | 2023-05-16 | Oracle International Corporation | Data replication conflict detection and resolution for a multi-tenant identity cloud service |
| US10798165B2 (en) | 2018-04-02 | 2020-10-06 | Oracle International Corporation | Tenant data comparison for a multi-tenant identity cloud service |
| US11258775B2 (en) | 2018-04-04 | 2022-02-22 | Oracle International Corporation | Local write for a multi-tenant identity cloud service |
| US11012444B2 (en) | 2018-06-25 | 2021-05-18 | Oracle International Corporation | Declarative third party identity provider integration for a multi-tenant identity cloud service |
| US10764273B2 (en) | 2018-06-28 | 2020-09-01 | Oracle International Corporation | Session synchronization across multiple devices in an identity cloud service |
| US11411944B2 (en) | 2018-06-28 | 2022-08-09 | Oracle International Corporation | Session synchronization across multiple devices in an identity cloud service |
| US11693835B2 (en) | 2018-10-17 | 2023-07-04 | Oracle International Corporation | Dynamic database schema allocation on tenant onboarding for a multi-tenant identity cloud service |
| US11321187B2 (en) | 2018-10-19 | 2022-05-03 | Oracle International Corporation | Assured lazy rollback for a multi-tenant identity cloud service |
| US11651357B2 (en) | 2019-02-01 | 2023-05-16 | Oracle International Corporation | Multifactor authentication without a user footprint |
| US11061929B2 (en) | 2019-02-08 | 2021-07-13 | Oracle International Corporation | Replication of resource type and schema metadata for a multi-tenant identity cloud service |
| US11321343B2 (en) | 2019-02-19 | 2022-05-03 | Oracle International Corporation | Tenant replication bootstrap for a multi-tenant identity cloud service |
| US11669321B2 (en) | 2019-02-20 | 2023-06-06 | Oracle International Corporation | Automated database upgrade for a multi-tenant identity cloud service |
| US11423111B2 (en) | 2019-02-25 | 2022-08-23 | Oracle International Corporation | Client API for rest based endpoints for a multi-tenant identify cloud service |
| US11792226B2 (en) | 2019-02-25 | 2023-10-17 | Oracle International Corporation | Automatic api document generation from scim metadata |
| US20220197448A1 (en) * | 2019-04-11 | 2022-06-23 | Beijing Bytedance Network Technology Co., Ltd. | Method, apparatus and device for displaying followed user information, and storage medium |
| US11899907B2 (en) * | 2019-04-11 | 2024-02-13 | Beijing Bytedance Network Technology Co., Ltd. | Method, apparatus and device for displaying followed user information, and storage medium |
| US11687378B2 (en) | 2019-09-13 | 2023-06-27 | Oracle International Corporation | Multi-tenant identity cloud service with on-premise authentication integration and bridge high availability |
| US11870770B2 (en) | 2019-09-13 | 2024-01-09 | Oracle International Corporation | Multi-tenant identity cloud service with on-premise authentication integration |
| US11611548B2 (en) | 2019-11-22 | 2023-03-21 | Oracle International Corporation | Bulk multifactor authentication enrollment |
Also Published As
| Publication number | Publication date |
|---|---|
| US7934191B2 (en) | 2011-04-26 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US7934191B2 (en) | Method and modules for generating client-server applications | |
| EP3428811B1 (en) | Database interface agent for a tenant-based upgrade system | |
| US10810003B2 (en) | Method and system for optimization of container image layering | |
| US9009292B2 (en) | Context-based data pre-fetching and notification for mobile applications | |
| US10909064B2 (en) | Application architecture supporting multiple services and caching | |
| CN101611422B (en) | Web data usage platform | |
| US8458727B2 (en) | Asynchronous client to server updates | |
| US10713375B2 (en) | Database public interface | |
| US12032551B2 (en) | Techniques and architectures for data field lifecycle management | |
| US20160098253A1 (en) | Delivering and deploying services in multi-server landscapes | |
| US20170161511A1 (en) | Database public interface | |
| CN116034576B (en) | Container Orchestration System (COS) service discovery across multiple COS clusters based on COS cluster domain name system | |
| US11275806B2 (en) | Dynamic materialization of feeds for enabling access of the feed in an online social network | |
| CN110574033B (en) | Reduce remote procedure calls for multimedia content delivery | |
| US12321338B2 (en) | Mechanisms for deploying database clusters | |
| US20170344353A1 (en) | Architectures and techniques for record protection and field management | |
| US12265536B2 (en) | Intelligent API service for enterprise data in the cloud | |
| US20240169219A1 (en) | Asynchronous rule compilation in a multi-tenant environment | |
| CN114556319B (en) | Digital decoupling | |
| US12013867B2 (en) | Distributed data processing using embedded hermetic and deterministic language | |
| US12353401B1 (en) | Database systems and client-side methods for offline operation | |
| US12461838B2 (en) | Configurable system tray application | |
| US12487914B2 (en) | Simulated software features in a simulated sandbox within a production environment | |
| US20260046344A1 (en) | Database systems and client-side methods for pausing flows offline | |
| US20240169009A1 (en) | System and method for estimated update timing of cached data |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| FEPP | Fee payment procedure |
Free format text: PAYOR NUMBER ASSIGNED (ORIGINAL EVENT CODE: ASPN); ENTITY STATUS OF PATENT OWNER: LARGE ENTITY |
|
| STCF | Information on status: patent grant |
Free format text: PATENTED CASE |
|
| FEPP | Fee payment procedure |
Free format text: PAYER NUMBER DE-ASSIGNED (ORIGINAL EVENT CODE: RMPN); ENTITY STATUS OF PATENT OWNER: LARGE ENTITY Free format text: PAYOR NUMBER ASSIGNED (ORIGINAL EVENT CODE: ASPN); ENTITY STATUS OF PATENT OWNER: LARGE ENTITY |
|
| FPAY | Fee payment |
Year of fee payment: 4 |
|
| MAFP | Maintenance fee payment |
Free format text: PAYMENT OF MAINTENANCE FEE, 8TH YEAR, LARGE ENTITY (ORIGINAL EVENT CODE: M1552); ENTITY STATUS OF PATENT OWNER: LARGE ENTITY Year of fee payment: 8 |
|
| MAFP | Maintenance fee payment |
Free format text: PAYMENT OF MAINTENANCE FEE, 12TH YEAR, LARGE ENTITY (ORIGINAL EVENT CODE: M1553); ENTITY STATUS OF PATENT OWNER: LARGE ENTITY Year of fee payment: 12 |