The v0.3 RESTful interface will be implemented in comformance to the Coordinating Node Application Programming Interface for v.03 as described in REST Interface documenent (http://mule1.dataone.org/ArchitectureDocs/REST_interface.html) 0.3 CN_query_0_3.getLogRecords() GET /log/ 0.3 CN_health_0_3.generateReport() GET /log/report 0.3 CN_query_0_3.search() GET /object/ 0.3 CN_crud_0_3.get() GET /object/ 0.3 CN_crud_0_3.getSystemMetadata() GET /object//meta/ 0.3 CN_crud_0_3.resolve() GET /object//locate/ Not listed in the above document is the following operation: 0.3 CN_crud_0_3.create() POST /object/ The supporting Interfaces in the business service layer will implement the following methods in support of the above REST calls as described in the Coordinating Node APIs for V0.3 (http://mule1.dataone.org/ArchitectureDocs/CN_APIs_v0_3.html) Query API getLogRecords(token, fromDate, toDate) -> logRecords search(token, query) -> list of GUIDs CRUD API getSystemMetadata(token, GUID) -> systemMetadata get(token, GUID) -> metadata resolve(token, GUID) -> systemMetadata??? create(systemMetadataGUID, systemMetadata, scienceMetadataGUID, scienceMetadata) Health API generateReport(token) -> statusReport *token parameter will be ignored for v.03 implementations The REST interface will be developed by use of Spring 3 MVC. Dependency injection will take advantage of Springs XML, Annotiation based and Java-based configuration models. Aspects will not fully be implemented during this phase, but should be used in future development to handle logging, validation, authentication/authorization cutpoints. Although it would be more uniform to create separate servlets based on the various APIs servicing the calls, due to the REST vocabulary splitting query methods into two separate paths, log and object will be the initial implemented servlets. Upon a request to a servlet, Spring will have mapped the incoming call to the correct controller as indicated by annotations within a POJO (@Controller and @RequestMapping). The controller will have the business layer services injected via @Autowiring annotiation. The log servlet will receive the getLogRecords() and generateReport() method calls. These calls will be handled by two separate service implementations representing the query and health service layer APIs respectively. The method getLogRecords() initially will be a simple interface to a function that will read a file as an InputStream. Since the log format is not yet specified, I plan simply to return the local tomcat logs, most likely in wrapper xml, for the date range specified. The method generateReport() will interface to a rest client that iteratively calls MN_health_0_3.heartbeat() on each of the configured MemberNodes and wrap the results in an XML format. Similar to the log servlet, the object servlet will receive calls for methods in the Query and CRUD APIs. The method search() will interface to a rest client that will return a result set from a call to Solr. The CRUD methods will interface to the Metacat API for persistence. The domain model objects will be generated where possible via xsd definitions using Jibx generation tool in maven. These generated objects will be compiled into their own project space, CnDomain, and packaged as a jar to be uploaded into a local maven repository. RestClient will most likely be its own project, similar to the CnDomain project, upon which Solr and MnHealth will be dependent. The final code base should include two servlets, three service layer interfaces representing the three APIs, three separate service layer implementions of the API, DOA layers and implementations for Solr, MnHealth, Metacat and file based operataions. Views produced by the servlets will produce XML, JSON or CSV based on the http accept header of the request. Spring's ContentNegotiatingViewResolver will decide whether a quest should be formated by JibX mashaller for XML or Jackson Mapping for JSON. CSV will most likely be implemented as an XSLT view using an stylesheet to trasform content from one type to another. However, Jasper Reporting may replace this functionality in the future given the more expressive nature by Jasper (CSV/PDF/Excel/HTML). Framework and Component Technologies Used Use of Spring Core, Spring MVC, Spring Web, Spring OXM and Spring AOP for dependency injection and Web interface include Spring OXM for xml bindings include cglib for Jackson dependcy include Jackson core and mapper asl for Json implementation Use of SpringIDE (SpringSource Tool Suite) editor for Software editing AntRun plugin Subversive Connector - http://community.polarion.com/projects/subversive/download/eclipse/2.0/galileo-site/ SVNKit 1.3.0 Implementation SVN Team Edition Use of Subversion repository for software revision control Use of Maven repository for dependency management Use of Jibx for Xml bindings Use of Metacat for storage and Mercury/Solr for indexing javax.mail mail 1.4.1 org.apache.maven.plugins maven-antrun-plugin 1.3 org.apache.maven.plugins maven-compiler-plugin 2.0.2 org.springframework spring-aop 3.0.0.RELEASE org.springframework spring-webmvc 3.0.0.RELEASE org.springframework spring-oxm 3.0.0.RELEASE org.jibx jibx-bind 1.2.1 org.jibx jibx-extras 1.2.1 org.jibx jibx-run 1.2.1 org.jibx jibx-schema 1.2.1 org.jibx jibx-tools 1.2.1 org.jibx maven-jibx-plugin 1.2.1.1 cglib cglib-nodep 2.2 org.codehaus.jackson jackson-core-asl 1.4.0 org.codehaus.jackson jackson-mapper-asl 1.4.0