Deploying and distributing content management code
Deploying and distributing content management code is disclosed. A software object class is received at a repository. The software object class is stored at the repository. The software object class is downloaded from the repository to an application server associated with the repository.
Latest EMC Corporation Patents:
- Combining explicit and implicit feedback in self-learning fraud detection systems
- System and method to enhance phrase search with nested thesaurus parsing
- Systems and methods for bi-directional replication of cloud tiered data across incompatible clusters
- Method and system for adaptive wear leveling in solid state memory
- Handling deletes with distributed erasure coding
This application claims priority to U.S. Provisional Patent Application No. 60/787,443 entitled Deploying and Distributing Content Management Code, filed Mar. 30, 2006, which is incorporated herein by reference for all purposes.
BACKGROUND OF THE INVENTIONContent management systems have been provided that enable a developer to develop custom applications that use and/or access content stored in an associated content repository. An example of such a system is an application server on which a content management framework and/or platform has been installed. The framework/platform includes a set of reusable components each preconfigured to perform a content management function or operation that an application developer may desire his/her application to perform. However, from time to time the need may arise to update the set of components, e.g., to install and deploy new/updated components developed by the content management system/application vendor, to deploy custom components developed by a content management system user and/or a third party developer, and to ensure that two or more application servers deployed at different times are all using the same version of the components. Therefore, there is a need for an effective way to deploy and update content management code.
Various embodiments of the invention are disclosed in the following detailed description and the accompanying drawings.
The invention can be implemented in numerous ways, including as a process, an apparatus, a system, a composition of matter, a computer readable medium such as a computer readable storage medium or a computer network wherein program instructions are sent over optical or electronic communication links. In this specification, these implementations, or any other form that the invention may take, may be referred to as techniques. A component such as a processor or a memory described as being configured to perform a task includes both a general component that is temporarily configured to perform the task at a given time or a specific component that is manufactured to perform the task. In general, the order of the steps of disclosed processes may be altered within the scope of the invention.
A detailed description of one or more embodiments of the invention is provided below along with accompanying figures that illustrate the principles of the invention. The invention is described in connection with such embodiments, but the invention is not limited to any embodiment. The scope of the invention is limited only by the claims and the invention encompasses numerous alternatives, modifications and equivalents. Numerous specific details are set forth in the following description in order to provide a thorough understanding of the invention. These details are provided for the purpose of example and the invention may be practiced according to the claims without some or all of these specific details. For the purpose of clarity, technical material that is known in the technical fields related to the invention has not been described in detail so that the invention is not unnecessarily obscured.
Deploying and distributing content management code from a repository is disclosed. In some embodiments, business logic (e.g., business object classes) and/or other code is registered with a repository. For example, in some embodiments, one or more business object classes comprising a content management framework are registered with a repository. The classes are stored in a content store and associated registration data is stored in a metadata store. Upon request from an application server, one or more business object classes are downloaded to the application server. As updates, if any, are registered at the repository, in some embodiments a change record in the repository is updated. An application server checks the change record periodically to determine if new/updated business object classes have been registered at the repository. In some embodiments, the change record is a global change record set to a value indicating that a new or updated class has been registered, without implicitly or explicitly identifying which classes have changed. In some embodiments, class (or collection of class, e.g., .jar) specific change records and/or flags or other indicator reflect whether individual classes have changed. In some embodiments, upon noting a change by reading a global change record, an application server iterates through the classes it has downloaded previously and/or otherwise needs and/or anticipates needing, checking for each the class and/or collection-specific change data/indicator, and downloading any classes that have changed since they were last downloaded to the application server. In some embodiments, new and/or updated classes are “hot deployed” without requiring that the application server be restarted. In some embodiments, hot deployment includes deploying an updated class and using the updated class to instantiate subsequently-requested instances of a business object while retaining the superseded class as long as it is still necessary, e.g., so long as at least one business object instance instantiated based on the superseded class is still actively being used (e.g., has at least one reference to it).
In some embodiments, one or more objects to represent a content item in metadata store 204 are created by and/or in response to a request from an application running on an associated content management framework (e.g., foundation classes, business logic, and/or API). For example, an application may populate and/or provided data values for metadata object attributes and/or provide the associated content and/or indicate to the content server a location (e.g., on the application server and/or an associated client) where the content is located. The content server stores the content in content store 206 and associates the content as stored in content store 206 with the corresponding metadata in metadata store 204.
In some embodiments, access to content item 224 and/or other content management functions are provided at least in part by invoking one or more methods and/or using one or more attributes of implementation object 222. In some embodiments, an application running on application server 108 of
From time to time the need may arise to update the object classes comprising a business object framework such as business object framework 304. Examples of circumstances requiring such an update include deployment of new components developed by a content management system vendor or new custom components developed by a third party developer contracted by an enterprise or other user of a content management system; updates to correct software bugs, security flaws, or other problems with one or more business object classes; and the need to ensure consistency across multiple application servers deployed at different times.
In some embodiments, business logic and other software objects comprising a content management system and/or framework are deployed in and distributed from a repository, such as content system 110. An application server, such as application server 108, downloads needed business object classes from the repository, and instantiates a required business object using the locally stored class definition downloaded from the repository. In some embodiments, a base set of business objects is downloaded in connection with initial deployment and/or redeployment of an application server. In some embodiments, new and/or updated business object classes are downloaded as such new and/or updated business object classes become available and/or the need for such classes arises and/or is anticipated.
In some embodiments, class loading precedence rules are modified and/or configured to ensure applications running on a content management system framework, platform, and/or system properly download business object classes from an associated repository and that no conflicts between inconsistent versions of the same class and/or between otherwise incompatible classes result. In the JAVA 2 Platform Enterprise Edition (J2EE), for example, a class loader hierarchy is established in which a set of classes basic to the platform are loaded by a “bootstrap” class loader having no parent, and other class loaders of increasing specificity descend as children or grandchildren, etc. of that class loader. In the default configuration, a class loader has visibility in only one direction, toward its parents, grandparents, etc., and is configured to look to such parent class loaders first to find a definition to use to create a requested instance of a class. In some embodiments, the precedence rule by which a class loader looks first to its parent (which in turn looks first to its own parent, etc., as applicable) to obtain needed classes is modified to ensure that the class loader looks first to its own local cache of class definitions to service requests to create an object instance, and only delegates to a parent class loader if the class is not available locally. The J2EE standard, for example, contemplates such a precedence rule being configured at the web application level, to enable each web application to maintain its own set of classes separate from each other web application running on the application server and from the classes managed and used by the application server itself. In some embodiments, the precedence rules at a level lower than the application level are modified to configure a class loader at such a lower level to look first to its local cache prior to looking to a parent class loader. While not contemplated by the J2EE standard for other than web application class loaders, in some embodiments using this approach, e.g., at the application framework/system level, facilitates “sandboxing” at that level, making it easier to avoid so-called “jar conflicts”, such as could arise if an incompatible version of a class were loaded in a visible class loader.
Typically loading new/updated business object classes would require that at least the web application be restarted. On restart, the application typically would identify and subsequently use as required any updated software classes. However, in many cases continuous or near continuous access to applications and/or associated managed content is essential to an enterprise or other organization served by a content management system, including the enterprise's own employees, customers, vendors, suppliers, partners, contractors, etc. As a result, in some embodiments new/updated business logic and/or other software objects comprising a content management framework are downloaded from an associated repository and “hot deployed”, without requiring that the application be restarted or otherwise unavailable for any significant period of time.
Hot deployment of new/updated business object classes as described above enables updated classes downloaded from a repository to be deployed with minimal impact on application server and/or individual business object availability.
Although the foregoing embodiments have been described in some detail for purposes of clarity of understanding, the invention is not limited to the details provided. There are many alternative ways of implementing the invention. The disclosed embodiments are illustrative and not restrictive.
Claims
1. A method of deploying computer code, comprising:
- receiving at a first repository a software object class, wherein the first repository is associated with a content management system and comprises a content store and a corresponding metadata store;
- storing the software object class in the content store associated with the first repository; and
- downloading the software object class from the first repository to an application server associated with an application content data stored at the content store of the first repository and a content store of a second repository, wherein downloading the software object class from the first repository is based at least in part on a determination that the software object class has not been previously downloaded from the first repository to the application server, wherein the downloading further comprises: determining by the application server if the software object class is not available in a local cache, if it is not available, checking a shared class loader in the local cache, the shared class loader requesting the software object class from the first repository, and if the software object class is not available for download from the first repository, the shared class loader looks to its parent class loader to obtain the software object class, wherein an application at the application server is configured to use the software object class downloaded from the first repository to perform an operation with respect to the application content data stored at the content store of the first repository, and wherein the application at the application server is configured to use another software object class downloaded from a second repository to perform an operation with respect to the application content data stored at the content store of the second repository, wherein the first repository and second repository are different.
2. A method as recited in claim 1, further including receiving a registration data associated with the software object class.
3. A method as recited in claim 2, further including storing at least a part of said registration data at the first repository.
4. A method as recited in claim 3, wherein said at least a part of said registration data is stored in the metadata store associated with the first repository.
5. A method as recited in claim 1, wherein the software object class is downloaded to the application server in response to a request received from the application server.
6. A method as recited in claim 1, wherein the software object class comprises one or a plurality of software object classes received and stored at the first repository.
7. A method as recited in claim 6, wherein the software object class comprises one of at least a subset of said plurality of software object classes requested to be downloaded to the application server.
8. A method as recited in claim 1, wherein the application server comprises a first application server associated with the first repository and the method further comprises downloading the software object class to a second application server associated with the first repository.
9. A method as recited in claim 1, wherein the first repository comprises a shared repository configured to store and distribute one or more software object classes to be used by the application server to access content across two or more other repositories.
10. A method as recited in claim 1, wherein the software object class comprises a business object class.
11. A method as recited in claim 1, wherein the software object class comprises part of a content management framework.
12. A method as recited in claim 1, wherein the software object class comprises a component available to be used by an application running on the application server to perform a content management function with respect to content stored in the first repository.
13. A method as recited in claim 1, wherein the software object class is hot deployed on the application server.
14. A method as recited in claim 1, further comprising providing an indication that the software object class has been added to or updated in the first repository.
15. A method as recited in claim 14, wherein the application server requests the software object class based at least in part on the indication that the software object class has been added to or updated in the first repository.
16. A content management system, comprising:
- a data storage device; and
- a processor coupled to the data storage device and configured to: receive a software object class, wherein a first repository is associated with the content management system and comprises a content store and a corresponding metadata store; store the software object class on the data storage device in the content store associated with the first repository; and download the software object class from the first repository to an application server associated with an application content data stored at the content store of the first repository and a content store of a second repository, wherein downloading the software object class from the first repository is based at least in part on a determination that the software object class has not been previously downloaded from the first repository to the application server, wherein the downloading further comprises: determining by the application server if the software object class is not available in a local cache, if it is not available, checking a shared class loader in the local cache, the shared class loader requesting the software object class from the first repository, and if the software object class is not available for download from the first repository, the shared class loader looks to its parent class loader to obtain the software object class, wherein an application at the application server is configured to use the software object class downloaded from the first repository to perform an operation with respect to the application content data stored at the content store of the first repository, and wherein the application at the application server is configured to use another software object class downloaded from a second repository to perform an operation with respect to the application content data stored at the content store of the second repository, wherein the first repository and second repository are different.
17. A system as recited in claim 16, wherein the processor and the data storage device are associated with the first repository with which the application server is associated.
18. A computer readable storage medium for deploying computer code, the computer readable storage medium being embodied in a computer readable medium and comprising computer instructions for:
- receiving at a first repository a software object class, wherein the first repository is associated with a content management system and comprises a content store and a corresponding metadata store;
- storing the software object class in the content store associated with the first repository; and
- downloading the software object class from the first repository to an application server associated with an application content data stored at the content store of the first repository and a content store of a second repository, wherein downloading the software object class from the first repository is based at least in part on a determination that the software object class has not been previously downloaded from the first repository to the application server, wherein the downloading further comprises: determining by the application server if the software object class is not available in a local cache, if it is not available, checking a shared class loader in the local cache, the shared class loader requesting the software object class from the first repository, and if the software object class is not available for download from the first repository, the shared class loader looks to its parent class loader to obtain the software object class, wherein an application at the application server is configured to use the software object class downloaded from the first repository to perform an operation with respect to the application content data stored at the content store of the first repository, and wherein the application at the application server is configured to use another software object class downloaded from a second repository to perform an operation with respect to the application content data stored at the content store of the second repository, wherein the first repository and second repository are different.
5845077 | December 1, 1998 | Fawcett |
5873086 | February 16, 1999 | Fujii et al. |
6151643 | November 21, 2000 | Cheng et al. |
6279030 | August 21, 2001 | Britton et al. |
6374243 | April 16, 2002 | Kobayashi et al. |
6584612 | June 24, 2003 | Mueller et al. |
6684383 | January 27, 2004 | Natori et al. |
6711557 | March 23, 2004 | Palaniappan |
6874010 | March 29, 2005 | Sargent |
6889227 | May 3, 2005 | Hamilton |
7047518 | May 16, 2006 | Little et al. |
7080361 | July 18, 2006 | Aigen |
7117491 | October 3, 2006 | Ferreira Alves et al. |
7181731 | February 20, 2007 | Pace et al. |
7350185 | March 25, 2008 | Sparago et al. |
7350186 | March 25, 2008 | Coleman et al. |
7370322 | May 6, 2008 | Matena et al. |
7493613 | February 17, 2009 | D'Souza et al. |
7506308 | March 17, 2009 | Woollen et al. |
7519964 | April 14, 2009 | Islam et al. |
7822836 | October 26, 2010 | Saparoff |
20010054087 | December 20, 2001 | Flom et al. |
20020184226 | December 5, 2002 | Klicnik et al. |
20030182651 | September 25, 2003 | Secrist et al. |
20030182652 | September 25, 2003 | Custodio |
20030237081 | December 25, 2003 | Taylor |
20040031030 | February 12, 2004 | Kidder et al. |
20040068516 | April 8, 2004 | Lee et al. |
20040078495 | April 22, 2004 | Mousseau et al. |
20040133444 | July 8, 2004 | Defaix et al. |
20040162724 | August 19, 2004 | Hill et al. |
20040215789 | October 28, 2004 | Lu |
20040261126 | December 23, 2004 | Addington et al. |
20050044531 | February 24, 2005 | Chawla et al. |
20050108702 | May 19, 2005 | Baker et al. |
20050125809 | June 9, 2005 | Chessell |
20050267918 | December 1, 2005 | Gatev et al. |
20050278278 | December 15, 2005 | Petev et al. |
20060015839 | January 19, 2006 | Owens et al. |
20060015881 | January 19, 2006 | Polozoff |
20060036993 | February 16, 2006 | Buehler et al. |
20060037030 | February 16, 2006 | Kovachka-Dimitrova et al. |
20060048097 | March 2, 2006 | Doshi |
20060053410 | March 9, 2006 | Charisius et al. |
20060074994 | April 6, 2006 | Smits |
20060130038 | June 15, 2006 | Claussen et al. |
20060206890 | September 14, 2006 | Shenfield et al. |
20060288111 | December 21, 2006 | Katinsky et al. |
20060288300 | December 21, 2006 | Chambers et al. |
20070006212 | January 4, 2007 | Kawamoto |
20070016893 | January 18, 2007 | Branda et al. |
20070136242 | June 14, 2007 | Auvenshine et al. |
20070136479 | June 14, 2007 | Miller |
20070198684 | August 23, 2007 | Mizushima |
- JAVA™, Java Web Start Technology, http://java.sun.com/products/javawebstart/.
- JAVA™, Web Start Overview, White Paper, May 2005.
- Gruber et al., The Eclipse 3.0 Platform: Adopting OSGi Technology, IBM Systems Journal, vol. 44, No. 2, 2005.
- OSGi™ Alliance, About OSGi Service Platform, Technical Whitepaper, Revision 3.0, Jul. 12, 2004.
Type: Grant
Filed: May 8, 2006
Date of Patent: Jul 17, 2012
Assignee: EMC Corporation (Hopkinton, MA)
Inventors: Don Robertson (Pleasanton, CA), Meir Amiel (Pleasanton, CA), Victor Spivak (San Mateo, CA)
Primary Examiner: Insun Kang
Attorney: Van Pelt, Yi & James LLP
Application Number: 11/430,491
International Classification: G06F 9/44 (20060101); G06F 9/445 (20060101);