Difference between revisions of "NCBO-OOR Server-Side Customization"
Benjamindai (talk | contribs) |
Benjamindai (talk | contribs) m (→Introduction) |
||
Line 1: | Line 1: | ||
=Introduction= | =Introduction= | ||
− | + | NCBO-OOR provides server-side flexibility by leveraging the enterprise pattern of "Dependency Injection." This is accomplished by applying the Spring technology which enables a partner to insert any software implementation that abides to the NCBO-defined interfaces purely by configuration. In other words, a different implementation can be deployed without a recompile or rebuild of the entire NCBO-OOR code-base. | |
This first NCBO-OOR implemntation is based on the [[NCBO-OOR Architecture|BioPortal architecture]] and code-base. Thus, the majority of the developer considerations for NCBO-OOR is generally applicable to the BioPortal (and vice-versa). The author will note differences where appropriate. | This first NCBO-OOR implemntation is based on the [[NCBO-OOR Architecture|BioPortal architecture]] and code-base. Thus, the majority of the developer considerations for NCBO-OOR is generally applicable to the BioPortal (and vice-versa). The author will note differences where appropriate. |
Revision as of 16:18, 10 February 2009
Introduction
NCBO-OOR provides server-side flexibility by leveraging the enterprise pattern of "Dependency Injection." This is accomplished by applying the Spring technology which enables a partner to insert any software implementation that abides to the NCBO-defined interfaces purely by configuration. In other words, a different implementation can be deployed without a recompile or rebuild of the entire NCBO-OOR code-base.
This first NCBO-OOR implemntation is based on the BioPortal architecture and code-base. Thus, the majority of the developer considerations for NCBO-OOR is generally applicable to the BioPortal (and vice-versa). The author will note differences where appropriate.
BioPortal Server-Side Pattern: Dependency Injection
The gist of dependency injection is that a seperate object, an assembler, populates the implementation of a defined interface that can be used by any consuming object that understands the interface. Spring which implements a specific variation of this patterns called "Setter Injection." A significant number of BioPortal server-side capabilities heavily leverage this pattern. The benefit of this approach all these capabilities can be swapped out with different implementations. To learn more about this pattern, please see [Martin Fowler's excellent exposition on this topic | http://martinfowler.com/articles/injection.html].
BioPortal OntologyLoader Walk-Through
This section walks-through an example BioPortal implements the Setter Injection model. In this scenario, we have the OntologyLoadManager interface which is consumed/used by the OntologyServiceImpl class. Since the OntologyLoadManager is an interface, it has no implementation. Here are some snippets from it's interface:
To get my OntologyServiceImpl to accept the injection of the OntologyLoadManager implementation, I define a setting method for that class:
class OntologyServiceImple ...
private Map finder; public void setOntologyLoadHandlerMap(Map<String, OntologyLoadManager> ontologyLoadHandlerMap) this.finder = finder; }
deleteOntologyBean(OntologyBean ontologyBean)