NIH | National Cancer Institute | NCI Wiki  

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Most data elements will be loaded as either properties or property qualifiers:

 properties diagramImage Modified

A few will be loaded as qualifiers to associations.

...

Here is a UML representation of Value Domain within LexGrid 200901 model.

UML representation of Value Domain within LexGrid 200901 modelImage Modified

Value Domain Definition

...

Class Name

Description

VDEntryTypeServices

Class to handle Entry Type objects to and fro database .

VDEntryStateServices

Class to handle Entry State objects to and fro database.

VDPropertyServices

Class to handle Property objects to and fro database.

VDMappingServices

Class to handle supported Mappings objects to and fro database.

VDServiceHelper

Helper class containing methods that are commonly used.

VDBaseSQLServices

Class to handle SQL Services.

VDBaseService

Base service class to handle all Value Domain and Pick List related objects to and fro from database.

!value_domain_CommonClassDiagram.jpg.alt\="value domain CommonClassDiagram"!

...

Class Name

Description

PickListsServices

Class to handle list of Pick List Definitions.

PickListServices

Class to handle individual Pick List Definition objects to and fro database.

PLEntryServices

Class to handle Pick List Entry objects to and fro database.

LexEVSPickListServices

Primary interface for LexEVS Pick List API.

LexEVSPickListServicesImpl

Implementation of LexEVSPickListServices which is primary interface for LexEVS Pick List API.

LoadPickList

Imports the Pick List Definitions in the source file, provided in LexGrid canonical format, to the LexBIG repository.

ResolvedPickListEntyList

Class to hold list of resolved pick list entries.

ResolvedPickListEntry

Bean for resolved pick list entries.

”value domain PLClassDiagram”Image Modified

LexBIG Services Class Diagram

...

Information

listValueDomains(String valueDomainName)

Description:

Return the URI's for the value domain definition(s) for the supplied domain name. If the name is null, returns everything. If the name is not null, returns the value domain(s) that have the assigned name.
Note: plural because there is no guarantee of valueDomain uniqueness. If the name is the empty string "", returns all unnamed valueDomains.

Input:

java.lang.String

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="393159051edc0c7f-ebacfabd-40c3477e-a5caa1e8-31aee7cfea7fe7be78915c42"><ac:plain-text-body><![CDATA[

Output:

java.net.URI[]

]]></ac:plain-text-body></ac:structured-macro>

Exception:

org.LexGrid.LexBIG.Exceptions.LBException

Implementation Details:

Implementation:
Step 1: Call this method on the associated LexEVS Value Domain Service instance to get the list of Value Domain URI that matches the supplied name.
 
Sample Call:
Step 1 : Using LexBIGService instance, get the LexEVSValueDomainServices interface org.lexgrid.valuedomain.LexEVSValueDomainServices vds = lbs.getValueDomainService();
Step 2 :Call listValueDomains  method:
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="a968de3a16cb98ff-38a19854-43944b87-9f5bb82f-63939523f77313052adf5b5d"><ac:plain-text-body><![CDATA[URI[] uris  =  vds.listValueDomains("someValueDomainName");

]]></ac:plain-text-body></ac:structured-macro>

...

Information

getAllValueDomainsWithNoNames()

Description:

Return the URI's of all unnamed value domain definition(s).

Input:

none

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="358a6b9d31dfe548-5ecc349b-401747a4-947bb506-2778892628b7a4d6afa18463"><ac:plain-text-body><![CDATA[

Output:

java.net.URI[]

]]></ac:plain-text-body></ac:structured-macro>

Exception:

org.LexGrid.LexBIG.Exceptions.LBException

Implementation Details:

Implementation:
Step 1: Call this method on the associated LexEVS Value Domain Service instance to get the list of Value Domain URI that have no names.
 
Sample Call:
Step 1 : Using LexBIGService instance, get the LexEVSValueDomainServices interface org.lexgrid.valuedomain.LexEVSValueDomainServices vds = lbs.getValueDomainService();
Step 2 :Call getAllValueDomainsWithNoNames  method:
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="a2dc5381a709d446-763b6760-490343e5-864694a8-b3858b81154aa7eeaa27a2d9"><ac:plain-text-body><![CDATA[URI[] uris  =  vds.getAllValueDomainsWithNoNames();

]]></ac:plain-text-body></ac:structured-macro>

...

Information

getPickListDefinitionsForDomain(URI valueDomainURI)

Description:

Returns all the pickList definitions that represents supplied valueDomain URI.

Input:

java.net.URI

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="1386a3f3bb0a4e31-8b36db61-4b454ed4-b8949377-4a074cac6eb7853cf208f92c"><ac:plain-text-body><![CDATA[

Output:

org.LexGrid.emf.valueDomains.PickListDefinition[]

]]></ac:plain-text-body></ac:structured-macro>

Exception:

org.LexGrid.LexBIG.Exceptions.LBException

Implementation Details:

Implementation:
Step 1: Call this method on the associated LexEVS Pick List Service instance to get all the Pick List Definitions that are represented by supplied Value Domain URI.
 
Sample Call:
Step 1 : Using LexBIGService instance, get the LexEVSPickListServices interface org.lexgrid.valuedomain.LexEVSPickListServices pls = lbs.getPickListService();
Step 2 :Call getPickListDefinitionsForDomain method:
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="4b7e19f0b9ace9bc-f845b4c7-4b984b7e-a38cbac2-ac9557fbfab70e4526b42d9e"><ac:plain-text-body><![CDATA[PickListDefinition[] plDefs  =  pls.getPickListDefinitionsForDomain(valueDomainURI);

]]></ac:plain-text-body></ac:structured-macro>

...

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="e681ed06642b0f78-d6cccdb7-4e2d4569-ac2b9a3b-a5e67099282d90b3922383dc"><ac:plain-text-body><![CDATA[

Information

resolvePickListForTerm(String pickListId, String term, String matchAlgorithm, String language, String[] context, boolean sortByText)

]]></ac:plain-text-body></ac:structured-macro>

Description:

Resolves pickList definition by applying  supplied arguments.

Input:

java.lang.String,
java.lang.String,
java.lang.String,
java.lang.String,
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="245d3fddeef6bdb8-aa08d287-4ad244ac-a05d999f-80aaf2aacb11792f37e9d1e8"><ac:plain-text-body><![CDATA[java.lang.String[],
]]></ac:plain-text-body></ac:structured-macro>
boolean

Output:

org.lexgrid.valuedomain.dto.ResolvedPickListEntryList

Exception:

org.LexGrid.LexBIG.Exceptions.LBException

Implementation Details:

Implementation:
Step 1: Call this method on the associated LexEVS Pick List Service instance to get list of Pick List Entries that  matches the term supplied and meets other supplied restrictions.
 
Sample Call:
Step 1 : Using LexBIGService instance, get the LexEVSPickListServices interface org.lexgrid.valuedomain.LexEVSPickListServices pls = lbs.getPickListService();
Step 2 :Call resolvePickListForTerm  method:
ResolvedPickListEntryList pleList  =  pls.resolvePickListForTerm ("AUTO:DomesticAutoMakers","Jaguar", MatchAlgorithms.exactMatch.name(), "en", null, true);

...

Database structure

Value Domain Tables

”value domain VDTablesDiagram"Image Modified

Table Name

Description

valueDomain

Will contain Value Domain Definition information

vdEntry

Contains Value Domain Entries information and its rules

entryState

Contains entry state details of every entry

mappings

Contains supported mapping information for a Value Domain Definition

property

Contains Property informations for Value Domain Definition

...

The LexEVS Loaders Framework extend the functionality of LexBIG 5.0 . For more information on LexBIG, see https://cabig-kc.nci.nih.gov/Vocab/KC/index.php/LexEVS_Version_refer to LexEVS 5.0.

High Level Overview

The following figure shows the major components of the Loader Framework (A) in relation to a hypothetical new loader and what expected API usage would be. Ideally, the new loader can find make most if its API calls through the utilities provided by the Loader Framework API (B). Some work will need to be done with Spring (C) such as configuration of a Spring config file. Also it may or may not be necessary for a loader to use Hibernate (D) or use the LexBIG API (E). However, again, the hope is that much of the work a new loader may need to do can be accomplished by the Loader Framework API.

...

  • This Loader Framework requires LexEVS release 5.0 or above.
  • Development system are required to install the Sun Java Development Kit (SDK) or Java Runtime Environment (JRE) version 1.5.0_11 or above.
  • Maven 2.1 or greater.
  • For software and hardware dependencies for the system hosting the LexEVS runtime, refer to https://cabig-kc.nci.nih.gov/Vocab/KC/index.php/LexEVS_the LexEVS 5.0 _ Documentation.
Issues
  • None
Third Party Tools

...

Enter Spring. The Loader Framework uses Spring Batch to manage the reading, processing and writing of data. Spring provides classes and interfaces to help do this work and the Loader Framework also provides utilities to help loader developers. In our example, we will write a class that will use the Spring ItemReader interface. It will take a line of text and return an ICD9SourceObject (1 and 2). Next we'll want to process that data into a LexEVS object such as an Entity object. So we'll write class that implements Spring's ItemProcessor interface. It will take our ICD9SourceObject and output a LexEVS Entity object (3,4). Finally, we'll want to write the data to the database (5). Note that the LexEVS model objects provided in the Loader Framework are generated by Hibernate and utilize Hibernate to write the data to the database. This will free us from having to write SQL.

flow diagram of loader framework processing as described in the preceding paragraphImage Modified

Spring
You will need to configure Spring to be aware of your objects and how to manage them. This is done via a XML configuration file. More details on the Spring config file below.

...

From the Maven documentation:

image of text documenting Eclipse project structureImage Modified

For more information on the Maven project refer to the documentation on apache.org.

...

Spring is a lightweight bean management container and among other things it contains a batch function which is utilized by the Loader Framework. A loader using the framework will need to work closely with Spring Batch and the way it does that is through Spring's configuration file where you configure beans (your loader code) and how the loader code should be utilized by Spring Batch (by configuring a Job, Step and other Spring Batch stuff in the spring config file). What follows is a brief overview of those tags related to the LoaderFramework. For more detail refer to the Spring documentation.

image of loader codeImage Modified

Beans

The 'beans:beans' tag is the all-encompassing tag. You define all your other tags in here. You can also define an import within this tag to import an external Spring config file. Not shown in figure 3.

...

Below is an image of the loader-framework-core project in Eclipse which shows the key directories of the Loader Framework. The following is a summary of the contents of those directories.

”screenshot of directories in loader-framework-core project”Image Modified Figure 4

Directory

Summary

connection

Connect to LexBIG and do LexBIG tasks such as register and activate.

constants

Assorted constants.

dao

Access to the LexBIG database.

data

Directly related to data going into the LexBIG database tables.

database

Database specific tasks not related to data, such as finding out the database type (MySQL, Oracle)

fieldsetter

Spring related classes for helping to write to the database.

lexbigadmin

Common tasks you want LexBIG to do for you such as indexing.

listener

You can attach listeners to a load so that the code will execute and certain points in the load such as a cleanup listener that runs when the load is finished or a setup listener etc...

logging

Gives you access to the LexBIG logger.

processor

Important directory. Contains classes that you can pass your domain specific object to and will return a LexBIG object.

properties

Code used internally by the Loader Framework.

reader

Readers and reader-related tools for loader developers.

rowmapper

Classes for reading from a database. Currently experimental code.

setup

Classes such as JobRepositoryManager that help Spring do its work. As Spring hums along it keeps tables of its internal workings. Loader developers should not need to dive into this directory.

staging

If your loader needs to load data to the database temporarlily you can find helper classes in this directory.

wrappers

Helper classes and data strucutres such as a Code/CodingScheme class.

writer

Miscellanous Miscellaneous classes that write to the database. These are not the same ones you'd use in your loader, i.e the LexBIG model objects that use Hibernate. Those classes are contained in the PersistanceLayer PersistenceLayer project (next figure 5, below). Its It is by using those classes in the PersistenceLayer that you let the Loader Framework do some of the heavy lifting for you.

”screenshot of PersistenceLayer project classes”Image Modified Figure 5

Algorithms

None

Batch Processes

None

Error Handling

Spring Batch gives the Loader Framework some degree of recovery from errors. Like the other features of Spring it is something the Loader developer would need to configure in their Spring config file. Basically, Spring will keep track of the steps it has executed and make note of any step that has failed. Those failed steps can be re-run at a later time. The Spring documentation provides additional information on this function. See http://static.springsource.org/spring-batch/reference/html/configureJob.html and http://static.springsource.org/spring-batch/reference/html/configureStep.htmlRefer to the configure job documentation and configure step documentation.

Database Changes

None

Client

Currently, the LexBIG GUI does not provide a framework to dynamically load extendable GUI components. While not impossible to extend the GUI functionality especially for those working closely with the LexBIG code, loaders written to use the new framework should expect that their loader will be called via the command line or script.

JSP/HTML

None

Servlet

None.

Security Issues

None.

Performance

Spring can accommodate parallel processing to enhance performance. The Spring documentation provides a good discussion of this topic. See http://static.Refer to scalability on springsource.org/spring-batch/reference/html/scalability.html.

Internationalization

Not internationalized.

Installation / Packaging

The Loader Framework is packaged as a LexBIG extension and thus is not included in the LexBIG jar.

Migration

None.

Documentation Considerations

The Loader Framework will also be described in the knowledge centerKnowledge Center.

Testing

Automated test tests are run via Maven. As mentioned earlier the projects containing the Loader Framework code are configured to work with Maven. Figure 6 (below), shows how The following figure shows the PersistenceLayer project and its standard Maven layout. Notice the structure of the test code mirrors the structure of the application code. To run the automated test in our Eclipse environment we select the project, right click, select 'Run As' and select 'Maven test'. Maven will do the rest.

”screenshot of PersistenceLayer project classes and the standard maven layout”Image Modified Figure 6

Test Guidelines

The test cases are also integrated into the LexBIG 5.1 build environment and are run with each build.

Test Cases

See System Testing.

Test Results

See System Testing.

Custom Loader Feasibility Report and Recommendation

Persistence Layer Feasibility

...

  1. Group Readers
  2. Group Writers
  3. Writers configurable to skip certain records
  4. Partitionable readers to break up large source files
  5. Error checking Readers and Writers
  6. A Validating framework for inspecting content before it is inserted into the database.
  7. etc.

BDA Support Detailed Design

LexEVS uses the BDA (Build and Deployment Automation) system to build and deploy artifacts. This build script that produces these artifacts and deploys them is kicked off via a build server (an instance of Anthill pro).

...

Each of these is produced as a separate artifact via a single build call. The local java Java application is built and integrated into the web application. The data service is also integrated into the web application. Separate analytical and data grid services are also created.

...

In this case two separate JBoss server instances are required. In one instance the web enabled application (lexevsapi) is copied to the remote server as a war file, it is accompanied by a grid data service zip file that is unzipped into a typical war file directory structure. In the other instance the LexEVS grid analytical service is deployed. In every case the server is stopped, configured as necessary, receives the new war file or directory and is started again. The BDA process is considered to be successful when all project builds are complete, all artifacts are deployed, and each public interface of these services is verified.

Implementation Plan

This will include the technical environment (HW,OS, Middleware), external dependencies, teams/locations performing development and procedures for development (e.g. lifecycle model,CM), and a detailed schedule. 

Technical environment

No new environment requirements exist for the the LexEVS 5.1, with the exception of additional storage to accommodate larger content loads.

Software (Technology Stack)

Operating System

  • Linux (though no operating system dependencies currently exist)

...

  • caGrid 1.3 / Globus 4.0.3

Server Hardware

Server

  • NCI standard hardware.

...

  • Minimum required by JBoss.

Storage

Expected file server disk storage (in MB)

...

  • 100GB (May increase due to additional RRF content load)

Networking

Application specific port assignments

...

  • Grid services can NOT be in the same JBoss container because of naming - they both need to be named /wsrf in the container. This results in the use of 1 JBoss container for LexEVS 5.0 and 1 JBoss container for LexEVS 5.1.

External dependencies

N/A

Team/Location performing development

  • Traci St. Martin / Mayo Clinic
  • Craig Stancl / Mayo Clinic
  • Scott Bauer / Mayo Clinic
  • Kevin Peterson / Mayo Clinic
  • Sridhar Dwarkanath / Mayo Clinic
  • Michael Turk / Mayo Clinic

Procedures for Development

Development will follow procedures as defined by NCI.

Detailed schedule

The LexEVS 5.1 project plan is located in Gforge at: LexEVS 5.1 Project Plan and LexEVS 5.1 Project Plan (PDF)on Gforge in MS Project format and PDF format

The LexEVS 5.1 BDA Project plan is located at LexEVS 5.1 BDA Project Plan (login required).

Training and documentation requirements

Documentation for LexEVS 5.1 will be located on provided by the Vocabulary Knowledge Center Wiki https://cabig-kc.nci.nih.gov/Vocab/KC/index.php/LexBig_and_LexEVS: LexEVS Documentation.

Download center changes

Downloads for LexEVS 5.1 will be located on the Vocabulary Knowledge Center Wiki https://cabig-kc.nci.nih.gov/Vocab/KC/index.php/LexBig_and_LexEVS LexEVS wiki.

Scrollbar
iconsfalse