InstallationThis section describes how to install the Registry Service software contained in the registry-service package. The following topics can be found in this section: System RequirementsThis section details the system requirements for installing and operating the Registry Service. Java Runtime EnvironmentThe Registry Service was developed using Java and Jersey and will run on any platform with a supported Java Runtime Environment (JRE). The software was specifically developed under Java version 1.6 and has only been tested with this version. The following commands test the local Java installation in a UNIX-based environment: % which java /usr/bin/java % java -version java version "1.6.0_26" Java(TM) SE Runtime Environment (build 1.6.0_26-b03-384-10M3425) Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02-384, mixed mode) The first command above checks whether the java executable is in the environment's path and the second command reports the version. If Java is not installed or the version is not at least 1.6, Java will need to be downloaded and installed in the current environment. Consult the local system administrator for installation of this software. For the do-it-yourself crowd, the Java software can be downloaded from the Oracle Java Download page. The software package of choice is the Java Standard Edition (SE) 6, either the JDK or the JRE package. The JDK package is not necessary to run the software but could be useful if development and compilation of Java software will also occur in the current environment. Java Application ServerThe Registry Service requires a Java application server for hosting the web application. The suggested application server for this release is Apache Tomcat with a minimal version of 6.0.20 through version 7.0.X. Consult the local system administrator for installation of this software. For the do-it-yourself crowd, the Apache Tomcat software can be downloaded from the Apache Tomcat page. Choose the version to download (6.0 or 7.0) from the menu on the left. cURL UtilityAlthough it is generally a useful tool for interacting with the Registry Service, the cURL command-line application is required by the RegistryConfig script for populating the service with the supported object types. See the Configuration section for more information on configuring the service. If cURL is not installed on the local machine but Wget is, see the Using Wget section for converting cURL commands to Wget commands. If viewing this document in PDF form, see the appendix for details. Database ServerThe Registry Service comes prepackaged with the Apache Derby database. If another database solution is desired (i.e., MySQL), it should be installed and accessible by the Registry Service. See the Database Creation section if this is the first time you are installing the registry service and Configuration section for more information on configuring the service for a different database solution. Unpacking the PackageDownload the registry-service package from the PDS FTP site. The binary distribution is available in identical zip or tar/gzip packages. Unpack the selected binary distribution file with one of the following commands: % unzip registry-service-1.0.0-bin.zip or % tar -xzvf registry-service-1.0.0-bin.tar.gz Note: Depending on the platform, the native version of tar may produce an error when attempting to unpack the distribution file because many of the file paths are greater than 100 characters. If available, the GNU version of tar will resolve this problem. If that is not available or cannot be installed, the zipped package will work just fine in a UNIX environment. The commands above result in the creation of the registry-service-1.0.0 directory with the following directory structure:
Database CreationIf this is the first time the Registry Service has been installed then a new registry database must be created. If however, you already have an existing registry skip down to the Configuration section. The following is a set of instructions that are dependent on the type of database chosen. Currently, there is support for Derby and MySQL. DerbyThe Derby database comes packaged with the registry service. The following commands will create the database and install the registry schema: % cd registry-service-1.0.0 % java -Djava.ext.dirs=lib/ org.apache.derby.tools.ij ij> connect 'jdbc:derby:RegistryDB;create=true;user=user'; ij> run 'conf/derby-registry-schema.ddl'; ij> exit; The RegistryDB directory, which is the Derby, will now be present in the current working directory. The path to this directory should be used in the Configuration section. Note: Feel free to move this RegistryDB directory to anywhere on disk that is accessible by Tomcat and configured below. Deploying the ApplicationThe Registry Service web application is packaged as a WAR file and is intended for installation under a standard Java Application Server. Prior to installation, the WAR file should be renamed from registry-service-1.0.0.war to registry.war. For a Tomcat server deployment, the WAR file is normally copied directly to the $TOMCAT_HOME/webapps directory or installed via the Manager interface. Once this step is complete, the application is ready for operation. Verify a successful installation by executing the command from the Ping portion of the Operation section. When deploying the application via the Tomcat Manager interface, users have occasionally encountered a situation where the application appears to hang or generates the following stack trace: javax.servlet.ServletException: java.lang.OutOfMemoryError: PermGen space com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:424) com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:497) com.sun.jersey.spi.container.servlet.ServletContainer.doFilter(ServletContainer.java:855) com.sun.jersey.spi.container.servlet.ServletContainer.doFilter(ServletContainer.java:828) com.sun.jersey.spi.container.servlet.ServletContainer.doFilter(ServletContainer.java:789) org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal (OpenEntityManagerInViewFilter.java:113) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) If either of the above situations occur, stop and restart the Tomcat server to clear the problem. Configuring the ApplicationThe following steps configure the Registry Service for the target installation and ready the service for operation. Database ConfigurationBy default, the Registry Service comes packaged with and configured to utilize Derby as the backend database. The Derby database home directory will default to the current working directory where the Tomcat server was launched. To permanently set the home directory of the database, add the following to the CATALINA_OPTS environment variable: CATALINA_OPTS="-Dderby.system.home=/path/to/registrydb/home" The CATALINA_OPTS environment variable is loaded from the Tomcat startup scripts. The Tomcat server will need to be restarted for this configuration to take effect. The backend database can be changed from Derby to another database provider. As of the current release, MySQL is the only other supported database solution. To modify the configuration, edit the applicationContext.xml file located in the $TOMCAT_HOME/webapps/registry/WEB-INF/classes directory. The following line: <context:property-placeholder location="classpath:derby.properties"/> should be changed to: <context:property-placeholder location="classpath:mysql.properties"/> The default configuration assumes that you have MySQL installed with a database named registry and will use a default user name and password as specified below. If you want to change the URL, database name, user name, and/or password you will need to edit the mysql.properties file located in the $TOMCAT_HOME/webapps/registry/WEB-INF/classes directory. The following lines pertain to the default configuration: javax.persistence.jdbc.url=jdbc:mysql://localhost:3306/registry javax.persistence.jdbc.user=registry javax.persistence.jdbc.password=p@ssw0rd Additionally, if you are using a version of MySQL older than 5.x you will need to change the dialect. To do this simply add a "#" before the first hibernate.dialect entry and remove the "#" from the second entry. Before: # For use with MySQL 5+ hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect # For use with older versions of MySQL. See hibernate documentation. #hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect After: # For use with MySQL 5+ #hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect # For use with older versions of MySQL. See hibernate documentation. hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect No matter which database solution is configured as the backend database, the schema that supports the Registry Service is created by default when launching the service for the first time. Home ConfigurationIn a distributed environment with multiple Registry Service instances, the registry home value identifies the source of a registry entry when it has been replicated to another registry instance. By default, the registry home is configured as http://localhost:8080/registry. This should be modified to represent the Registry Service endpoint of the local installation. Meaning that instead of localhost, the fully qualified name of the local machine should be specified (e.g., node.nasa.gov). To modify the configuration, edit the applicationContext.xml file located in the $TOMCAT_HOME/webapps/registry/WEB-INF/classes directory. Modify the following line with the new endpoint: <bean id="idGenerator" class="gov.nasa.pds.registry.model.naming.DefaultIdentifierGenerator" p:home="http://localhost:8080/registry"/> should be changed to (if hosted at node.nasa.gov on port 80): <bean id="idGenerator" class="gov.nasa.pds.registry.model.naming.DefaultIdentifierGenerator" p:home="http://node.nasa.gov/registry"/> Object Type ConfigurationOnce the Registry Service is installed and running, the list of supported object types must be registered with the service. The list of objects types corresponds with the types of products that a given instance of the Registry Service will support. The RegistryConfig and RegistryConfig.bat scripts default to a Registry Service endpoint of http://localhost:8080/registry. If necessary, modify the appropriate script for the local environment so that it corresponds with the endpoint of the target installation. In addition, this script should be executed prior to applying security to the service URLs since it does not account for a secured interface. Execute the script from the bin directory in order to register the full set of object types: % cd registry-service-1.0.0/bin % ./RegistryConfig The output from this command should show the registration of the Core object types and PDS object types. Since the configuration files referenced in the configuration script are slightly larger they are sent in chunks. Each configuration will get associated with a Registry Package and can be found by following the location link that comes in the header of the response. The output from the command should look something like the following: * About to connect() to localhost port 8080 (#0) * Trying ::1... connected * Connected to localhost (::1) port 8080 (#0) > POST /registry/configure?name=Core+Objects&\ description=This+configures+the+core+set+of+registry+objects HTTP/1.1 > User-Agent: curl/7.19.7 (universal-apple-darwin10.0) libcurl/7.19.7 OpenSSL/0.9.8l zlib/1.2.3 > Host: localhost:8080 > Accept: */* > Content-type:application/xml > Content-Length: 5295 > Expect: 100-continue > < HTTP/1.1 100 Continue < HTTP/1.1 201 Created < Server: Apache-Coyote/1.1 < Location: http://localhost:8080/registry/packages/\ urn:uuid:bd6e4f7b-dfb0-443c-b845-3378077b1016 < Content-Type: text/plain < Transfer-Encoding: chunked < Date: Mon, 21 Mar 2011 19:55:52 GMT < * Connection #0 to host localhost left intact * Closing connection #0 urn:uuid:bd6e4f7b-dfb0-443c-b845-3378077b1016 * About to connect() to localhost port 8080 (#0) * Trying ::1... connected * Connected to localhost (::1) port 8080 (#0) > POST /registry/configure?name=PDS+Objects&\ description=This+configures+PDS+object+types HTTP/1.1 > User-Agent: curl/7.19.7 (universal-apple-darwin10.0) libcurl/7.19.7 OpenSSL/0.9.8l zlib/1.2.3 > Host: localhost:8080 > Accept: */* > Content-type:application/xml > Content-Length: 18320 > Expect: 100-continue > < HTTP/1.1 100 Continue < HTTP/1.1 201 Created < Server: Apache-Coyote/1.1 < Location: http://localhost:8080/registry/packages/\ urn:uuid:a07ad134-42ad-4781-9cbd-826bb9a8dfec < Content-Type: text/plain < Transfer-Encoding: chunked < Date: Mon, 21 Mar 2011 19:55:53 GMT < * Connection #0 to host localhost left intact * Closing connection #0 urn:uuid:a07ad134-42ad-4781-9cbd-826bb9a8dfec Verify successful configuration by executing the command from the Report portion of the Operation section. The output from this command should look something like the following: <ns2:report xmlns:ns2='http://registry.pds.nasa.gov' registryVersion='1.0.0' packages='2' classificationNodes='67' classificationSchemes='1' services='0' extrinsics='0' associations='68' serverStarted='2011-08-28T12:45:43.514-07:00' status='OK'/>
|