The invention provides a solution to client-server data handling tasks, such as, transport and data manipulation, by keeping the middleware ignorant of the specific semantics of the data and makes it instead a “dumb” or “blind” transport conduit between the client and the data base. Conversely, the invention provides the client with a mechanism to manipulate the database data without the middleware understanding the type or structure of the data that is being acted upon. This flows easily with the functioning of the client and the database, which is, to move the data back and forth from one to the other, with the client accepting the data from the user and displaying the database data to the user.
|
1. A method for handling data in a client-server computing environment, comprising the steps of:
accepting the data from a user of a client in an opaque bag, wherein said bag comprises client data and self-contained manipulation code,
wherein the client data comprises a key value pair having a key component and a value component provided by said client, wherein a value of said key value pair comprises current state of each datum,
wherein said self-contained manipulation code uses a common vocabulary known to said client and a database;
mapping an attribute of the client data to an owning model object using said common vocabulary; and
storing the client data as database data in said database, wherein
a server serving documents on a global telecommunications network to and from said client to said database;
a middleware, being part of said server, acting as a blind conduit between said client and said database, wherein said middleware comprises both a data transfer component and a data manipulation component; and
said data manipulation component of said middleware accepting commands from said client to operate on said data, said data transfer component of said middleware acting as said blind conduit, said data manipulation component having no knowledge of type or structure of said client data.
19. An apparatus for handling data in a client-server computing environment, comprising:
a client for accepting the data from a user in an opaque bag, and parsing modified data as client data,
wherein said bag comprises client data and self-contained manipulation code,
wherein the client data comprises a key value pair having a key component and a value component provided by said client, wherein a value of said key value pair comprises current state of each datum,
wherein said self-contained manipulation code uses a common vocabulary known to said client and a database, and wherein an attribute of the client data is mapped to an owning model object using said common vocabulary;
said database for storing the client data as database data;
a server serving client data to and from said client to said database on Internet; and
a middleware, wherein said middleware comprises:
a data transfer component, wherein said data transfer component comprises a blind conduit between said client and said database; and
a data manipulation component operationally separate from said data transfer component,
wherein said client manipulating said database data without knowledge of a type or structure of said client data; and
wherein said middleware accepting commands from said client to operate on said data without knowledge of said type or structure of said client data.
2. A method for handling data in a client-server computing environment, as in
3. A method for handling data in a client-server computing environment, as in
4. A method for handling data in a client-server computing environment, as in
5. A method for handling data in a client-server computing environment, as in
6. A method for handling data in a client-server computing environment, as in
7. A method for handling data in a client-server computing environment, as in
8. A method for handling data in a client-server computing environment, as in
9. A method for handling data in a client-server computing environment, as in
10. A method for handling data in a client-server computing environment, as in
11. A method for handling data in a client-server computing environment, as in
12. A method for handling data in a client-server computing environment, as in
13. A method for handling data in a client-server computing environment, as in
14. A method for handling data in a client-server computing environment, as in
15. A method for handling data in a client-server computing environment, as in
16. A method for handling data in a client-server computing environment, as in
transporting said client data, wherein said step of transporting matches said key value pair provided by said client to a key value pair stored in a server.
17. A method for handling data in a client-server computing environment, as in
18. A method for handling data in a client-server computing environment, as in
20. An apparatus for handling data in a client-server computing environment, as in
|
A portion of the disclosure of this patent document contains material that is subject to copyright protection. The copyright owner has no objection to the reproduction by anyone of the patent document or the patent disclosure, as it appears in the Patent and Trademark Office file or records, but otherwise reserves all copyright rights whatsoever.
This patent application incorporates by reference the material contained in the “Computer Program Listing Appendix Copy 1” and the identical duplicate “Computer Program Listing Appendix Copy 2”, entitled “IAMA0001.DOC”, created on Nov. 10, 2004, and containing 1.4 Megabytes of data.
The invention relates to a computer mediated method and apparatus for data-neutral robust communication between client and server software in a standard client-server environment. The communication involves data being delivered from the server-side data base to the user for display, and conversely, the delivery of modified or unmodified data from the client-side to the server-side using the currently available software, such as, the Java transcript.
The World Wide Web is a graphical interface that overlays the Internet. The Internet is a collection of interconnected, autonomous data communication networks, which spans the globe. The World Wide Web or the Web is a graphical hypertext-based interface that enables users to move quickly between Web sites and Web documents, also known as Web pages, on the Internet by following the links to the other Web documents or Web sites (Web pages) embedded within a Web document (Web page).
A Web document may contain many forms of information, including text, graphics, video, audio, and links to other Web documents anywhere in the world. Presently, Hypertext Mark-up language (HTML) is the standard format for documents on the Web. An HTML formatted document has HTML codes which is a set of commands embedded in the document.
A software application known as Web browser is used to access documents on the Web. By understanding the HTML, Web browser software can properly display a Web document on a user's output display device. A user at a computer system executing a Web browser software application can access information in the form of Web documents or pages on the Web. The information may reside on the same or different computer system or systems. More importantly, Web browser software interprets the HTML commands in an HTML formatted Web document to navigate a link in that Web document to another Web document. The Web browser thereby provides automatic access to other Web documents on the Web.
A server on the Web serves, or publishes, Web documents over the Web. The documents are available to a user who accesses the server from a client executing Web browser application software. The server and client communicate using a communications protocol. Typically, a server and client communicate over a data communication network underlying the Web using an International Standards Organization (ISO) Open Systems Interconnection (OSI) Application layer protocol such as Hyper Text Transfer Protocol (HTTP). The Application layer protocol provides a method of communicating ASCII-based, HTML-formatted information comprising a Web document published by a server. The Web document is transmitted over a data communications network to a client upon request from the client. The HTTP protocol, uses the services of a standard set of OSI transport-layer and Network-layer data communication protocols such as the Transport Control Protocol/Internet Protocol (TCP/IP) suite of data communication protocols. This model is often referred to as a client-server computing model, in which one or more clients access or query a server over a data communication network.
A client on the Web is comprised of a computer system executing Web browser application software. The client communicates with the server using HTTP, but must understand HTML as well, so that, among other things, upon receiving an HTML document from the server, the client knows how to display the document on an attached output display device. A server running the HTTP, i.e. a HTTP server receives a request from a client for a particular HTML document. The HTTP server scans its file system directory in search of the data files or files storing the HTML document. Upon locating the file or files in the file system, the HTTP server transmits the contents of the file using the HTML. Thus, the HTTP server has no knowledge, and, in fact, needs no knowledge of the content or format of the HTML document to transmit, the HTML document to the client over the data communication network.
A server running the HTTP, i.e. an HTTP server receives a request form a client for a particular HTML document. The HTTP server scans its file system directory in search of the data files or files storing the HTML document. Upon locating the file or files in the file system, the HTTP server transmits the contents of the file using the HTTP. Thus, the HTTP server has no knowledge, and in fact needs no knowledge, of the content or format of the HTML document to transmit the HTML document to the client over the data communication network. A disadvantage in the above approach is that the contents of the HTML document are static. In other words, the contents of the HTML document do not change once created by an editor until such time as the document is directly modified by a user via an editor.
In virtually all user-interactive software models in general, the client software is the only component which knows what to do with both application data and user data. Its job is to display server-side database data to the user on the client machine, as well as taking user data or the input data from the client-side machine and delivering that data to the database. In this model, both the client software and the database contain objects which are essentially “bags” of data, with each datum being bound to a particular “field” or named data model attribute.
There are two primary types of data handling requirements in this model, and one secondary type. The first being data transport, the second data manipulation, and the third, particular to the HTTP protocol, is a mechanism for transporting this data within the narrow request/response features of the HTTP internet protocol used by Internet Web browsers for communicating with server-side computers. In existing client-server software models, a middle tier (a software layer, a Java servlet in this implementation) of software is required which understands both the way the database handles and stores data, as well as how the client understands and stores the same data. The middleware (servlet) acts as a conduit from the client to the server-side database, and vice versa. The middleware must also be able to carry out client requests for database data manipulation.
The first type of data handling, data transport, provides a mechanism to move data back and forth between the client and the server. Unfortunately existing client-server communication protocols (including the HTTP protocol used in this implementation of this invention) do not provide a mechanism for the client to write arbitrary data to the server-side database, nor does it provide for the client to directly query the database for arbitrary data. Instead, the middle-tier must understand both the client representation of data and the format it is provided in, as well as understanding the database representation of data and the way in which it is to be stored.
The second type of data handling involves manipulating data in the database based on client requests. This handling normally involves a fairly common set of actions such as data value assignment, data deletion, data creation (instantiation), etc. In currently available models, the client communicates with the middle-tier in very specific, non-generic ways, in order to accomplish these database manipulations.
Unfortunately this paradigm makes the mistake of adding special-case data manipulation logic to the middleware (servlet) to facilitate moving data from the client into the server database and from the data base to the client. It is unfortunate because it means that the middleware, which otherwise would be blind conduit of data between the database and the client, and blink executioner of data base instructions, would suddenly need to understand these client data structures, e.g. it would need to know that an object has sub items stored as a list and so forth.
There would also need to be special commands given by the client to the middleware telling it to move an item, or remove an item. As the data model grows over time and additional data types are required by the client, it requires that the client, the data base, and the server middleware all be constantly updated to remain synchronized with regard to the number and types of data used by the client. This is a cumbersome task which is fraught with errors and bugs do largely to the fact that each layer in the model must understand the specific design of the data.
The middleware would also have to implement frequent “special” case code to handle changes to data. Finally, the prior art model requires that the middleware provide data manipulation facilities unique to each data type. Such actions need to constantly be modified and upgraded as new data is added by the client or the database.
The invention describes solutions to the client-server data handling tasks such as, transport and data manipulation by keeping the middleware ignorant of the specific semantics of the data and makes it instead a “dumb” or “blind” transport conduit between the client and the data base. Conversely, the invention provides the client with a mechanism to manipulate the database data without the middleware understanding the type or structure of the data that is being acted upon. This flows easily with the functioning of the client and the database, which is, to move the data back and forth from one to the other, with the client accepting the data from the user (not shown) and displaying the database data to the user, and the database storing the client data or any data.
To enable a self-contained manipulation of contents, the client, the middleware, and the database all handle the data without any intricate knowledge of the data. The invention uses a common vocabulary with which to map various attributes to their owning model object.
The mechanism of data transport involves the task of matching the key value pairs or data pairs provided by the client with the key value pairs stored in the server and conversely matching the key value pairs stored in the server to the key value pairs provided by the client.
Additionally, when transporting the data from the database to the client, the server uses a generic utility to create data structures that the client can understand. This utility knows nothing about the type of data it handles except for the reason that it holds a set of key value pairs.
The utility involved in this invention is a client enabled Document Object Model (DOM) written in Java Script. The Java script generation routine blindly “walks” the database data tree and requests each object for its key value. It then creates a String representation of the data and includes it in every page sent down to the client.
The data handling must provide a mechanism which allows the client to modify or add or remove data form the database. The invention solves this problem by using a generic set of commands and a generic, data-neutral, data addressing or assignment scheme which allows all data to be treated opaquely.
APPENDIX A is a source code in JavaScript showing an implementation of the invention. The invention describes solutions to the client-server data handling tasks such as, transport and data manipulation by keeping the middleware 40 (also called servlet), as in
To enable a self-contained manipulation of contents, the client, the middleware, and the database all handle the data without any intricate knowledge of the data. The invention uses a common vocabulary with which to map various attributes to their “owning” model object. This information is used to provide a coherent view of the database data to the client, as well as for the database to create the appropriate database structures within which to store and retrieve the data efficiently. This map is provided in a single location in server side and is utilized by both the client and the server as a description similar to a Document Type Definition (DTD) in HTML/SGML/XML as is well known in the art.
In a particular implementation of this invention, a command model is used wherein the command model “SXPersistentPropertyHolder” is used as an object which represents the opaque “bag” of data stored on the server and sent to the client. In this implementation, the only types of data the command processor “understands” are SXPersistentPropertyHolder, HashMap, and ArrayList.
The mechanism of data transport involves the task of matching the key value pairs or data pairs provided by the client with the key value pairs stored in the server and conversely matching the key value pairs stored in the server to the key value pairs provided by the client. To allow for the transport of neutral or opaque data objects, the middleware (servlet) need only receive a “bag” of such data from the client and hand it to the database's prescribed format (also called HashMaps as is well known in the art). Additionally, when transporting the data from the database to the client, the server utilizes a generic utility to create data structures that the client can understand. This utility knows nothing about the type of data it handles except for the reason that it holds a set of key value pairs. The utility involved in this invention is a client enabled Document Object Model (DOM) written in Java Script. The utility knows nothing about the type of data it handles, except that it holds a set of key value pairs. The Java script generation routine blindly “walks” the database data tree and requests each object for its key value. It then creates a String representation of the data and includes it in every page sent down to the client.
The data handling must provide a mechanism that allows the client to modify or add or remove data form the database. This invention solves this problem by using a generic set of commands and a generic, data-neutral, data addressing or assignment scheme that would allow all data to be treated opaquely.
The commands have the purpose of being sent from the client to the server via a single HTTP request. Within that request is a single request parameter named “commands” which has one long string parameter which is the concatenated set of commands that the client is requesting the server to execute. Each command request string may contain any number of commands.
Individual commands within the “commands” string are of the form: verb(parameter1, . . . ,parameterN). Typically commands take one or more parameters. This is not a limitation of the command language, however, as the language provides the flexibility for the client to provide an arbitrary number of parameters to these commands. The “expected” parameters will be operated on as described below and the additional parameters will simply be ignored. The power of the variable command feature comes into play if the server-side model object “target” object provided in the command implements a “get( )” or “set( )” method which takes the same number and type of parameters as specified in the command, in which case that method will be invoked in favor of the default command processing, allowing model objects to override default data manipulation and provide their own, perhaps richer, data manipulation action(s).
For a model object to override the default action processing of the command facility, it need only implement a “getSomeAttributeName( )” and or a “setSomeAttributeName( )” method, where “AttributeName” is the same as the attribute name specified in the “target” of the command, and where the model object is the target of the command.
Additional commands are also provided which allow the client to do more than simply manipulate data on the server. These additional commands actually enable the client to manipulate the server itself. These special, non-data-oriented commands allow the client to instruct the server to perform certain tasks such as perform a browser redirect, or print a message to an error log, etc.
Finally, the command syntax also provides a mechanism for the client to mark certain pieces of data as unknown by inserting tokens e.g. “@FooBar@”, in place of the data. In this case the client expects that when the server sees these tokens it replaces the tokens via the SXClientCommand API with dynamically generated values on the server side. One example of this in HTTP is the uploading of a file, and the assignment of the filename to a server-side model object because the client does not know, at request submission time, what the final server side filename is because, for example, the server may need to rename the file to avoid collisions
In this case the client sends up an “assign” command with a token that had been agreed upon with the server, e.g. @FielnameGoesHere@. When the server is about to tell the “commands” in the current request to “perform”, it can first use SXClientCommand API to replace the token with the upload file's server-side name. The specific command syntax, the addressing scheme to refer to data within the commands and some examples of what some actual commands look like are shown in
In a particular implementation of the invention, a command model object called “SXPersistentPropertyHolder” is used which represents the “opaque bag” of data stored on the server and sent to the client. In this implementation, the only types of data the command processor understands are SXPersistentPropertyHolder, Hash Map, and Aray List.
To transport the modified instructions of the HTTP protocol, the invention invokes commands that allow the client to create instructions for the middleware to operate on data without the middleware needing to know the internals of that data. After executing the commands and making the appropriate modifications to the data, the middleware blindly hands the modified data off to the database.
These commands are passed from the client to the server via a HTTP “post” instruction. They are provided in a single HTTP string value bound to a “key” called “commands”. When this HTTP request reaches the server, the server middleware examines the request and upon discovery of the commands, the server-side “Client Command” class parses the command string into its constituent data manipulation commands e.g. “move”, “insert”, “delete”, thereby creating a unique “SXClient Command” object for each command, and then, one by one, tells each SXClient Command object to perform its action.
Although the invention for data transport and data manipulation emphasizes server logic to be ignorant of the type and form of client and database data, it nevertheless provides facilities to implement methods which overrides, and are invoked in place of the default command handling. This gives the server the ultimate power and flexibility in handling client data.
Additional commands are also provided which allow the client to do more than simply manipulate data on the server. These additional commands actually enable the client to manipulate the server itself. These special, non-data-oriented commands allow the client to instruct the server to perform certain tasks such as perform a browser redirect, or print a message to an error log.
The invention provides additional benefit of allowing the client to send changed data to the server without having the server cause a full page refresh on the client. The Figs. detail how the server blindly manipulates the “opaque” data using a generic addressing scheme as well as a command language and associated syntax for operating on the model objects.
Although the invention has been described in detail with reference to the particular preferred embodiments, persons possessing ordinary skill in the art to which this invention pertains will appreciate that various modifications and enhancements may be made without departing from the spirit and scope of the claims that follow.
Bernstein, Keith, Kieffer, Robert
Patent | Priority | Assignee | Title |
8205216, | May 01 2008 | International Business Machines Corporation | Data sharing between applications where only one application knows the business purpose of the data |
8555294, | May 01 2008 | International Business Machines Corporation | Data sharing between applications where only one application knows the business purpose of the data |
Patent | Priority | Assignee | Title |
5860070, | May 31 1996 | Oracle International Corporation | Method and apparatus of enforcing uniqueness of a key value for a row in a data table |
5899990, | Mar 31 1997 | Oracle America, Inc | Java-to-Database Connectivity Server |
5999941, | Nov 25 1997 | WEB COM GROUP, INC | Database access using active server pages |
5999990, | May 18 1998 | GENERAL DYNAMICS ADVANCED INFORMATION SYSTEMS, INC; GENERAL DYNAMICS MISSION SYSTEMS, INC | Communicator having reconfigurable resources |
6065016, | Aug 06 1996 | AT&T Corp | Universal directory service |
6292800, | Jan 29 1999 | OATH INC | Database system |
6480860, | Feb 11 1999 | International Business Machines Corporation | Tagged markup language interface with document type definition to access data in object oriented database |
6601098, | Jun 07 1999 | GOOGLE LLC | Technique for measuring round-trip latency to computing devices requiring no client-side proxy presence |
Executed on | Assignor | Assignee | Conveyance | Frame | Reel | Doc |
Feb 05 2001 | America Online, Inc. | (assignment on the face of the patent) | / | |||
Jul 01 2002 | BERNSTEIN, KEITH | AMERICA ONLINE, INC | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 013801 | /0042 | |
Jul 02 2002 | KIEFFER, ROBERT | AMERICA ONLINE, INC | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 013801 | /0042 | |
Apr 03 2006 | AMERICA ONLINE, INC | AOL LLC, a Delaware Limited Liability Company | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 019711 | /0316 | |
Apr 03 2006 | AMERICA ONLINE, INC | AOL LLC, a Delaware Limited Liability Company | CORRECTIVE ASSIGNMENT TO CORRECT THE NATURE OF CONVEYANCE PREVIOUSLY RECORDED ON REEL 019711 FRAME 0316 ASSIGNOR S HEREBY CONFIRMS THE NATURE OF CONVEYANCE IS CHANGE OF NAME | 022451 | /0186 | |
Dec 04 2009 | AOL LLC | AOL Inc | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 023750 | /0210 | |
Dec 09 2009 | AOL ADVERTISING INC | BANK OF AMERICAN, N A AS COLLATERAL AGENT | SECURITY AGREEMENT | 023649 | /0061 | |
Dec 09 2009 | AOL Inc | BANK OF AMERICAN, N A AS COLLATERAL AGENT | SECURITY AGREEMENT | 023649 | /0061 | |
Dec 09 2009 | YEDDA, INC | BANK OF AMERICAN, N A AS COLLATERAL AGENT | SECURITY AGREEMENT | 023649 | /0061 | |
Dec 09 2009 | TRUVEO, INC | BANK OF AMERICAN, N A AS COLLATERAL AGENT | SECURITY AGREEMENT | 023649 | /0061 | |
Dec 09 2009 | Tacoda LLC | BANK OF AMERICAN, N A AS COLLATERAL AGENT | SECURITY AGREEMENT | 023649 | /0061 | |
Dec 09 2009 | SPHERE SOURCE, INC | BANK OF AMERICAN, N A AS COLLATERAL AGENT | SECURITY AGREEMENT | 023649 | /0061 | |
Dec 09 2009 | Quigo Technologies LLC | BANK OF AMERICAN, N A AS COLLATERAL AGENT | SECURITY AGREEMENT | 023649 | /0061 | |
Dec 09 2009 | BEBO, INC | BANK OF AMERICAN, N A AS COLLATERAL AGENT | SECURITY AGREEMENT | 023649 | /0061 | |
Dec 09 2009 | ICQ LLC | BANK OF AMERICAN, N A AS COLLATERAL AGENT | SECURITY AGREEMENT | 023649 | /0061 | |
Dec 09 2009 | GOING, INC | BANK OF AMERICAN, N A AS COLLATERAL AGENT | SECURITY AGREEMENT | 023649 | /0061 | |
Dec 09 2009 | Lightningcast LLC | BANK OF AMERICAN, N A AS COLLATERAL AGENT | SECURITY AGREEMENT | 023649 | /0061 | |
Dec 09 2009 | MAPQUEST, INC | BANK OF AMERICAN, N A AS COLLATERAL AGENT | SECURITY AGREEMENT | 023649 | /0061 | |
Dec 09 2009 | Netscape Communications Corporation | BANK OF AMERICAN, N A AS COLLATERAL AGENT | SECURITY AGREEMENT | 023649 | /0061 | |
Sep 30 2010 | BANK OF AMERICA, N A | YEDDA, INC | TERMINATION AND RELEASE OF SECURITY INTEREST IN PATENT RIGHTS | 025323 | /0416 | |
Sep 30 2010 | BANK OF AMERICA, N A | TRUVEO, INC | TERMINATION AND RELEASE OF SECURITY INTEREST IN PATENT RIGHTS | 025323 | /0416 | |
Sep 30 2010 | BANK OF AMERICA, N A | Tacoda LLC | TERMINATION AND RELEASE OF SECURITY INTEREST IN PATENT RIGHTS | 025323 | /0416 | |
Sep 30 2010 | BANK OF AMERICA, N A | SPHERE SOURCE, INC | TERMINATION AND RELEASE OF SECURITY INTEREST IN PATENT RIGHTS | 025323 | /0416 | |
Sep 30 2010 | BANK OF AMERICA, N A | Quigo Technologies LLC | TERMINATION AND RELEASE OF SECURITY INTEREST IN PATENT RIGHTS | 025323 | /0416 | |
Sep 30 2010 | BANK OF AMERICA, N A | Netscape Communications Corporation | TERMINATION AND RELEASE OF SECURITY INTEREST IN PATENT RIGHTS | 025323 | /0416 | |
Sep 30 2010 | BANK OF AMERICA, N A | MAPQUEST, INC | TERMINATION AND RELEASE OF SECURITY INTEREST IN PATENT RIGHTS | 025323 | /0416 | |
Sep 30 2010 | BANK OF AMERICA, N A | Lightningcast LLC | TERMINATION AND RELEASE OF SECURITY INTEREST IN PATENT RIGHTS | 025323 | /0416 | |
Sep 30 2010 | BANK OF AMERICA, N A | GOING INC | TERMINATION AND RELEASE OF SECURITY INTEREST IN PATENT RIGHTS | 025323 | /0416 | |
Sep 30 2010 | BANK OF AMERICA, N A | AOL ADVERTISING INC | TERMINATION AND RELEASE OF SECURITY INTEREST IN PATENT RIGHTS | 025323 | /0416 | |
Sep 30 2010 | BANK OF AMERICA, N A | AOL Inc | TERMINATION AND RELEASE OF SECURITY INTEREST IN PATENT RIGHTS | 025323 | /0416 | |
Jun 14 2012 | AOL Inc | Facebook, Inc | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 028487 | /0602 | |
Oct 28 2021 | Facebook, Inc | Meta Platforms, Inc | CHANGE OF NAME SEE DOCUMENT FOR DETAILS | 058961 | /0436 |
Date | Maintenance Fee Events |
Jun 09 2010 | M1551: Payment of Maintenance Fee, 4th Year, Large Entity. |
Jun 04 2014 | M1552: Payment of Maintenance Fee, 8th Year, Large Entity. |
Jun 29 2018 | M1553: Payment of Maintenance Fee, 12th Year, Large Entity. |
Date | Maintenance Schedule |
Jan 02 2010 | 4 years fee payment window open |
Jul 02 2010 | 6 months grace period start (w surcharge) |
Jan 02 2011 | patent expiry (for year 4) |
Jan 02 2013 | 2 years to revive unintentionally abandoned end. (for year 4) |
Jan 02 2014 | 8 years fee payment window open |
Jul 02 2014 | 6 months grace period start (w surcharge) |
Jan 02 2015 | patent expiry (for year 8) |
Jan 02 2017 | 2 years to revive unintentionally abandoned end. (for year 8) |
Jan 02 2018 | 12 years fee payment window open |
Jul 02 2018 | 6 months grace period start (w surcharge) |
Jan 02 2019 | patent expiry (for year 12) |
Jan 02 2021 | 2 years to revive unintentionally abandoned end. (for year 12) |