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.

Patent
   7158982
Priority
Feb 05 2001
Filed
Feb 05 2001
Issued
Jan 02 2007
Expiry
Jul 14 2021
Extension
159 days
Assg.orig
Entity
Large
2
8
all paid
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 claim 1, further comprising matching said client data with database data for key value pairs.
3. A method for handling data in a client-server computing environment, as in claim 2, wherein said data handling uses a generic set of commands from said client to said server via at least a single HTTP request.
4. A method for handling data in a client-server computing environment, as in claim 3, wherein said data handling uses said generic set of commands, said commands comprising a format verb(parameter 1, parameter 2, . . . ).
5. A method for handling data in a client-server computing environment, as in claim 4, wherein said generic set of commands embeds any number of commands.
6. A method for handling data in a client-server computing environment, as in claim 5, wherein said generic set of commands embeds variable command feature.
7. A method for handling data in a client-server computing environment, as in claim 6, wherein said data handling invoking command “getSomeAttributeName( )” in favor of a default command processing.
8. A method for handling data in a client-server computing environment, as in claim 6, wherein said data handling invoking command “setSomeAttributeName( )” in favor of a default command processing.
9. A method for handling data in a client-server computing environment, as in claim 8, wherein said command enables said client to manipulate said server.
10. A method for handling data in a client-server computing environment, as in claim 8, wherein said command instructs said server to perform a browser redirect.
11. A method for handling data in a client-server computing environment, as in claim 8, wherein said command enables said client to manipulate said server and requests said server to print messages to an error log.
12. A method for handling data in a client-server computing environment, as in claim 8, wherein said command syntax providing a mechanism for the client to mark certain pieces of data as unknown by inserting tokens in place of real data.
13. A method for handling data in a client-server computing environment, as in claim 2, wherein said data handling is data neutral, said data handling comprising a data addressing scheme by which said data treated opaquely.
14. A method for handling data in a client-server computing environment, as in claim 1, wherein said client manipulates database data without having any knowledge of said type or structure of said client data.
15. A method for handling data in a client-server computing environment, as in claim 1, wherein the client, the middleware and the database handle the data without knowledge of said type or structure of said client data.
16. A method for handling data in a client-server computing environment, as in claim 1, further comprising the step of:
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 claim 16, wherein said step of mapping uses a map stored at a server side location.
18. A method for handling data in a client-server computing environment, as in claim 17, wherein said map is provided in a single location of said server side location.
20. An apparatus for handling data in a client-server computing environment, as in claim 19, wherein said middleware is a part of said server.

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.

FIG. 1 is an Illustration of the client-server data handling tasks, such as, transport and data manipulation using a preferred embodiment of the invention;

FIG. 2 is a tabular representation giving example of the model objects used in the implementation of the invention; and

FIG. 3 is a tabular representation of the data in specific command syntax, the addressing scheme to refer to the data within the commands and examples of some actual commands.

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 FIG. 1, ignorant of the specific semantics of the data and makes it instead a “dumb” or “blind” transport conduit between the client 10 and the data base 50. Conversely, the invention provides the client 10 with a mechanism to manipulate the database data 50 without the middleware 40 understanding the type or structure of the data that is being acted upon. This flows easily with the functioning of the client 10 and the database 50, which is, to move the data back and forth from one to the other, with the client 10 accepting the data from the user (not shown) and displaying the database data 50 to the user, and the database storing the client data 10 or any data. The client data 10 or the database data 50, according to the invention are generic, also named as “opaque bags” of key value pairs, where the “keys” have the “attribute names”, and the “values” have a current state of each datum. This is similar to the general software data structure called a “HashMap” well known in the art. The specific implementation of this invention, described here, appears very similar in structure to a HashMap with the exception that the invention also provides a self-contained manipulation code for its contents.

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. FIG. 2 gives an example of the model objects used in the implementation of the invention. They are in no way required by it and implementers may very well have their own set of model objects. These objects serve as examples of model objects.

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 FIG. 3. For these “Client Command” objects to be executed without knowledge of the types of data they contain, a generic addressing scheme was created and is employed such that the client can formulate complex action requests in a chain.

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 onAssignorAssigneeConveyanceFrameReelDoc
Feb 05 2001America Online, Inc.(assignment on the face of the patent)
Jul 01 2002BERNSTEIN, KEITHAMERICA ONLINE, INC ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS 0138010042 pdf
Jul 02 2002KIEFFER, ROBERTAMERICA ONLINE, INC ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS 0138010042 pdf
Apr 03 2006AMERICA ONLINE, INC AOL LLC, a Delaware Limited Liability CompanyASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS 0197110316 pdf
Apr 03 2006AMERICA ONLINE, INC AOL LLC, a Delaware Limited Liability CompanyCORRECTIVE 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 0224510186 pdf
Dec 04 2009AOL LLCAOL IncASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS 0237500210 pdf
Dec 09 2009AOL ADVERTISING INC BANK OF AMERICAN, N A AS COLLATERAL AGENTSECURITY AGREEMENT0236490061 pdf
Dec 09 2009AOL IncBANK OF AMERICAN, N A AS COLLATERAL AGENTSECURITY AGREEMENT0236490061 pdf
Dec 09 2009YEDDA, INC BANK OF AMERICAN, N A AS COLLATERAL AGENTSECURITY AGREEMENT0236490061 pdf
Dec 09 2009TRUVEO, INC BANK OF AMERICAN, N A AS COLLATERAL AGENTSECURITY AGREEMENT0236490061 pdf
Dec 09 2009Tacoda LLCBANK OF AMERICAN, N A AS COLLATERAL AGENTSECURITY AGREEMENT0236490061 pdf
Dec 09 2009SPHERE SOURCE, INC BANK OF AMERICAN, N A AS COLLATERAL AGENTSECURITY AGREEMENT0236490061 pdf
Dec 09 2009Quigo Technologies LLCBANK OF AMERICAN, N A AS COLLATERAL AGENTSECURITY AGREEMENT0236490061 pdf
Dec 09 2009BEBO, INC BANK OF AMERICAN, N A AS COLLATERAL AGENTSECURITY AGREEMENT0236490061 pdf
Dec 09 2009ICQ LLCBANK OF AMERICAN, N A AS COLLATERAL AGENTSECURITY AGREEMENT0236490061 pdf
Dec 09 2009GOING, INC BANK OF AMERICAN, N A AS COLLATERAL AGENTSECURITY AGREEMENT0236490061 pdf
Dec 09 2009Lightningcast LLCBANK OF AMERICAN, N A AS COLLATERAL AGENTSECURITY AGREEMENT0236490061 pdf
Dec 09 2009MAPQUEST, INC BANK OF AMERICAN, N A AS COLLATERAL AGENTSECURITY AGREEMENT0236490061 pdf
Dec 09 2009Netscape Communications CorporationBANK OF AMERICAN, N A AS COLLATERAL AGENTSECURITY AGREEMENT0236490061 pdf
Sep 30 2010BANK OF AMERICA, N A YEDDA, INC TERMINATION AND RELEASE OF SECURITY INTEREST IN PATENT RIGHTS0253230416 pdf
Sep 30 2010BANK OF AMERICA, N A TRUVEO, INC TERMINATION AND RELEASE OF SECURITY INTEREST IN PATENT RIGHTS0253230416 pdf
Sep 30 2010BANK OF AMERICA, N A Tacoda LLCTERMINATION AND RELEASE OF SECURITY INTEREST IN PATENT RIGHTS0253230416 pdf
Sep 30 2010BANK OF AMERICA, N A SPHERE SOURCE, INC TERMINATION AND RELEASE OF SECURITY INTEREST IN PATENT RIGHTS0253230416 pdf
Sep 30 2010BANK OF AMERICA, N A Quigo Technologies LLCTERMINATION AND RELEASE OF SECURITY INTEREST IN PATENT RIGHTS0253230416 pdf
Sep 30 2010BANK OF AMERICA, N A Netscape Communications CorporationTERMINATION AND RELEASE OF SECURITY INTEREST IN PATENT RIGHTS0253230416 pdf
Sep 30 2010BANK OF AMERICA, N A MAPQUEST, INC TERMINATION AND RELEASE OF SECURITY INTEREST IN PATENT RIGHTS0253230416 pdf
Sep 30 2010BANK OF AMERICA, N A Lightningcast LLCTERMINATION AND RELEASE OF SECURITY INTEREST IN PATENT RIGHTS0253230416 pdf
Sep 30 2010BANK OF AMERICA, N A GOING INCTERMINATION AND RELEASE OF SECURITY INTEREST IN PATENT RIGHTS0253230416 pdf
Sep 30 2010BANK OF AMERICA, N A AOL ADVERTISING INC TERMINATION AND RELEASE OF SECURITY INTEREST IN PATENT RIGHTS0253230416 pdf
Sep 30 2010BANK OF AMERICA, N A AOL IncTERMINATION AND RELEASE OF SECURITY INTEREST IN PATENT RIGHTS0253230416 pdf
Jun 14 2012AOL IncFacebook, IncASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS 0284870602 pdf
Oct 28 2021Facebook, IncMeta Platforms, IncCHANGE OF NAME SEE DOCUMENT FOR DETAILS 0589610436 pdf
Date Maintenance Fee Events
Jun 09 2010M1551: Payment of Maintenance Fee, 4th Year, Large Entity.
Jun 04 2014M1552: Payment of Maintenance Fee, 8th Year, Large Entity.
Jun 29 2018M1553: Payment of Maintenance Fee, 12th Year, Large Entity.


Date Maintenance Schedule
Jan 02 20104 years fee payment window open
Jul 02 20106 months grace period start (w surcharge)
Jan 02 2011patent expiry (for year 4)
Jan 02 20132 years to revive unintentionally abandoned end. (for year 4)
Jan 02 20148 years fee payment window open
Jul 02 20146 months grace period start (w surcharge)
Jan 02 2015patent expiry (for year 8)
Jan 02 20172 years to revive unintentionally abandoned end. (for year 8)
Jan 02 201812 years fee payment window open
Jul 02 20186 months grace period start (w surcharge)
Jan 02 2019patent expiry (for year 12)
Jan 02 20212 years to revive unintentionally abandoned end. (for year 12)