View Source

h3. Guide

For developers (please click this link if you are a developer for tDAR)
# [Configure tDAR development server|http://www.tdar.org/confluence/pages/viewpage.action?pageId=36110344] (NECESSARY for new developer in this group)
# [tDAR functionality|http://www.tdar.org/confluence/display/TDAR/tDAR+functionality]
# [Design database scheme|http://www.tdar.org/confluence/display/TDAR/tDAR+database+scheme]
# [Source codes structure|http://www.tdar.org/confluence/pages/viewpage.action?pageId=37158931]
# [Data integration test environment|http://www.tdar.org/confluence/display/TDAR/Data+Integration+test+case+files]
# [Tests to be done (white box)|http://www.tdar.org/confluence/display/TDAR/tDAR+test+(white+box)]
# [Deploying tDAR on a server|TDAR:deploying tDAR]
# [Eclipse Setup / Configuration|TDAR:Eclipse]

h3. Set up the development environment

# Download and install Maven 2 from [http://maven.apache.org]
# check out the codebase from our SVN repository
# set up the database by performing the following:
## make sure you have a tdar user with CREATEDB permissions on postgres
## in {{src/main/resources}} copy all {{\*.template}} files, removing their {{.template}} extension, e.g.,
{code}
cd src/main/resources; for i in *.template; do cp $i `basename $i .template`; done; cd -;
{code}.
Customize as necessary, but the template files should work for most cases.
## set up the tdarmetadata and tdardata databases (this step should be managed automatically if possible)
# use {{mvn eclipse:eclipse}} to generate Eclipse's {{.project}} & {{.classpath}} files, then add {{M2_REPO}} to the variables via {{Build Path \-> Add Variable}} and set it to your local Maven 2 repository. On Unix-ish machines, this should be {{\~/.m2/repository}}. If you're using the [m2eclipse plugin | http://m2eclipse.sonatype.org/], this step usually isn't necessary.
# to make google maps work on your development box, copy {{src/main/webapp/includes/googlemaps-api-key.js.template}} to {{src/main/webapp/includes/googlemaps-api-key.js}} and then customize it by changing the gmapsKey variable to the google maps api key for your host. You can get a google maps api key at [http://code.google.com/apis/maps/signup.html]
\#Important maven targets include:
## {{mvn compile}}
## {{mvn test}}
## {{mvn jetty:run}} to deploy the webapp on the port specified in {{pom.xml}}
## {{mvn verify}} to run the unit and integration tests

{note:title=Maven dependencies}
To add new library dependencies, you can look them up via a repository search engine like [http://mvnrepository.com] or [http://mavensearch.net] (see [http://maven.apache.org/general.html#How_to_find_dependencies] for more repository search engines). If so, add the pom snippet to the pom.xml, otherwise you may need to install it manually in our [local maven staging repository|http://dev.tdar.org/archiva]. You can also add maven repositories to Archiva as a proxy connector, which will keep our pom.xml simpler.
{note}

h3. Resources and Links

h5. [Development Infrastructure]


h5. [Coding Standards]


h5. [Design Document]


h3. Technology stack


h5. Hibernate: [http://hibernate.org]

We currently use Hibernate 3 for object relational mapping. Relationships are specified via [JPA annotations|http://java.sun.com/javaee/overview/faq/persistence.jsp] though the actual DAOs used to store, retrieve, and update persistent entities use a hibernate SessionFactory behind the scenes instead of an EntityManager, which would be the most framework-agnostic way of object relational mapping.

More information about the tDAR hibernate implementation can be found at the [tDAR Hibernate Documentation Page|Hibernate Documentation]

h5. Spring: [http://www.springframework.org]

We are currently using Spring to make Hibernate easier to use, for dependency injection/IoC purposes (managing our beans/services/daos/data sources/hibernate sessions) and for transaction management.

h5. Struts 2: [http://struts.apache.org]

We are currently using Struts 2.2.1 as the web application framework. More information about the Struts implementation can be found at the [tDAR Struts Documentation Page|Struts Documentation].
* A quick primer on the web technologies used by struts: [http://struts.apache.org/primer.html]

h5. Protege

* Protege web tool: [http://bmir-protege-dev1.stanford.edu/webprotege/]

h5. [Other Web Frameworks]


h5. URL Rewriting: [http://tuckey.org/urlrewrite/]


h3. Performance tuning

* [http://httpd.apache.org/docs/2.2/mod/mod_proxy_balancer.html]
* [http://www.hibernate.org/hib_docs/reference/en/html/performance.html]
* [http://struts.apache.org/2.x/docs/performance-tuning.html]

h3. Massively parallel data stores

* [Hadoop+HBase vs RDBMS |http://www.docstoc.com/docs/2996433/Hadoop-and-HBase-vs-RDBMS]
* [Hadoop applicability |http://www.cloudera.com/blog/2009/05/5-common-questions-about-hadoop/]
We should look into Hadoop for ideas about scaling data integration and/or representation of datasets

h3. Other documents and miscellany

* [Interesting ppt presentation on integrating ontologies with application development (out of date though) |http://ebiquity.umbc.edu/get/a/resource/15.ppt]
* Older Gridsphere docs: [GridSphere] and [Gridsphere Infrastructure]
* [Many Eyes|http://services.alphaworks.ibm.com/manyeyes/home]
* [Swivel|http://www.swivel.com/]
* interesting dataset visualization possibilities - [http://googlegeodevelopers.blogspot.com/2009/01/timemap-helping-you-add-4th-dimension.html]