Personal tools
You are here: Home GRIA Documentation Documentation 5.3 Tutorials Building your own contextualised B2B registry Building your own registry

Building your own registry

This section explains how to install, configure and use the registry component for building your own registry applications.
This tutorial explains how to configure, install and write applications using GRIA's contextualised registry component
Page 3 of 6.

Initialisation

Install eXist

Install eXist in Tomcat or standalone, following the instructions of the eXist documentation. It is recommended to change and memorize the “admin” password using the eXist admin HTML client.


Registry Properties

After installing eXist you have to create and setup a ‘registry.properties’ file. This file contains information about the eXist database location, administrator details and standard access rules applied by the registry on concepts and entities registered with the registry. See the appendix for an example of the properties file.


Implementation Factory Properties

The ‘implementationfactory.properties’ file used MUST contain the following setting:

# Communication channel to registry database

uk.ac.soton.itinnovation.registry.component.xml.db.XmlDbAccessManager
= uk.ac.soton.itinnovation.registry.component.xml.db.xmldb.XmlDbAccessManagerXmlDb
This file defines the actual implementation class of the db connection. Currently this is based on XML:DB.

Write an Install Client

Having the ‘registry.properties’ file correctly defined, you now can write a simple Java client for installing the registry. You have to start the client by providing the location where to find the properties file. This is done by using the command line parameter

–Dregistry.conf.dir=<directory>

The following code is an example install client.

import java.util.Properties;
import
uk.ac.soton.itinnovation.registry.icomponent.util.PropertyConstants;
import
uk.ac.soton.itinnovation.registry.icomponent.util.PropertyManagement;
import
uk.ac.soton.itinnovation.registry.management.runtime.Install;

public
class InstallRegistryClient {
/**
* Install the registry...
*/
public static void main(String[] args){
/*
* Setup registry properties...
*/
Properties systemProps = System.getProperties();
String configDir = systemProps.getProperty(PropertyConstants.registryConfigurationDir);
if(configDir==null){
String msg = "Configuration directory is not specified, "+
"e.g. -Dregistry.conf.dir=... ";
throw new RuntimeException(msg);
}
PropertyManagement.configurationDirectory = configDir;

System.out.println("Installation the registry...");
Install.init();
System.out.println("Finish installation.");

PropertyManagement.resetProperties();
}
}

Configuration

Configuration of the registry can be done before usage of the registry or dynamically during runtime. However, in principle there are two possibilities to configure the registry using the Configuration interface: using external documents (based on OWL and XML) or using the appropriate Java methods (like createConcept).


Writing a configuration client using OWL and XML

The following Java class describes an example how to use OWL and XML to configure the RDM as well as the predefined queries specified in XML. For more information see the appendix.

import java.io.File;
import
java.net.MalformedURLException;
import
java.util.Properties;
import
uk.ac.soton.itinnovation.registry.component.xml.db.XmlDatabaseConstants;
import
uk.ac.soton.itinnovation.registry.component.xml.model.RegistryDomainModelJenaConnector;
import
uk.ac.soton.itinnovation.registry.icomponent.model.RegistryDomainModel;
import
uk.ac.soton.itinnovation.registry.icomponent.search.parser.ParsingException;
import
uk.ac.soton.itinnovation.registry.icomponent.util.PropertyConstants;
import
uk.ac.soton.itinnovation.registry.icomponent.util.PropertyManagement;
import
uk.ac.soton.itinnovation.registry.management.factory.RegistryManagementFactory;
import
uk.ac.soton.itinnovation.registry.management.factory.StartupRegistryManagementFactory;
import
uk.ac.soton.itinnovation.registry.management.factory.SupportedTechnology;
import
uk.ac.soton.itinnovation.registry.management.icomponent.configuration.Configuration;
import
uk.ac.soton.itinnovation.registry.management.icomponent.configuration.ConfigurationException;

public
class ConfigurationRegistryClient {

/**
 * Configuration client...
 */
 public static void main(String[] args) throws ConfigurationException, MalformedURLException, ParsingException {
 /*
 * Setup registry properties...
 */
 Properties systemProps = System.getProperties();
 String configDir = systemProps.getProperty(PropertyConstants.registryConfigurationDir);
 if (configDir == null) {
String msg = "Configuration directory is not specified, " +
 "e.g. -Dregistry.conf.dir=...";
 throw new RuntimeException(msg);
 }
 PropertyManagement.configurationDirectory = configDir;

System.out.println("Configuration the registry...");
 /*
 * Get a configuration object...
*/
RegistryManagementFactory factory = StartupRegistryManagementFactory.createRegistryFactory(SupportedTechnology.XML);
 Configuration configuration = factory.createConfigurationFacility();

 /*
 * load predefined queries...
*/
 System.out.println(" setup predefined queries...");
 File f = new File(configDir+"/"+XmlDatabaseConstants.queriesFile);
 if (!f.canRead()) {
  System.out.println(" no predefined queries specified.");
System.out.println(" file " + f.toString() + " not found.");
 } else {
 configuration.setPredefinedQueries(configDir+ "/" +XmlDatabaseConstants.queriesFile);
 }

 /*
 * load registry domain model (RDM)...
*/
 System.out.println(" setup domain model...");
 f = new File(configDir +"/"+ XmlDatabaseConstants.registryDomainModelName);
 if (!f.canRead()) {
 System.out.println(" no registry domain model specified.");
 System.out.println(" file " + f.toString() + " not found.");
} else {
RegistryDomainModel model = RegistryDomainModelJenaConnector.loadRegistryDomainModelFromURL(f.toURL().toString());
 configuration.setRegistryDomainModel(model);
 }
 System.out.println("Finish configuration.");
 PropertyManagement.resetProperties();
 }
}

Using dynamic configuration


Using the dynamic adaptation of the RDM is illustrated in the following Java class.

import java.util.Properties; 
import uk.ac.soton.itinnovation.registry.icomponent.util.PropertyConstants;
import uk.ac.soton.itinnovation.registry.icomponent.util.PropertyManagement;
import uk.ac.soton.itinnovation.registry.management.factory.RegistryManagementFactory;
import uk.ac.soton.itinnovation.registry.management.factory.StartupRegistryManagementFactory;
import uk.ac.soton.itinnovation.registry.management.factory.SupportedTechnology;
import uk.ac.soton.itinnovation.registry.management.icomponent.configuration.Configuration;
import uk.ac.soton.itinnovation.registry.management.icomponent.configuration.ConfigurationException;

public class DynamicConfigurationRegistryClient {
/**
 * Configuration client...
 */
 public static void main(String[] args) throws ConfigurationException {
/*
 * Setup registry properties...
 */
  Properties systemProps = System.getProperties();
 String configDir = systemProps.getProperty(PropertyConstants.registryConfigurationDir);
 if (configDir == null) {
 String msg = "Configuration directory is not specified, "
 + "e.g. -Dregistry.conf.dir=... ";
 throw new RuntimeException(msg);
}
 PropertyManagement.configurationDirectory = configDir;

 System.out.println("Dynamic configuration of the registry...");
 /*
 * Get a configuration object...
 */
 RegistryManagementFactory factory = StartupRegistryManagementFactory.createRegistryFactory(SupportedTechnology.XML);
 Configuration configuration = factory.createConfigurationFacility();

 /*
 * concepts to be added under 'Reference'...
 */
 String[] billingConcepts = { "SLAConversation", "TradeAccountConversation", "RemoteSLAService" };
 for (String concept : billingConcepts) {
 if (!configuration.getRegistryDomainModel().containsConcept(concept)) {
// add concept as a sub concept of concept 'Reference'
  configuration.createConcept(concept, "Reference");
 }
 }

 /*
 * concept added under 'ManagerResource'
 */
 if (!configuration.getRegistryDomainModel().containsConcept("MegaAccount")) {
// add concept as a sub concept of concept 'Reference'
 configuration.createConcept("MegaAccount", "ManagerResource");
 }

 /*
 * add a owner/owned relationship between 'MegaAccount' and 'Account'
*/
String fromConcept = "MegaAccount";
 String toConcept = "Account";
if (!configuration.getRegistryDomainModel().containsRelationship(fromConcept, "owner", toConcept)) {
 System.out.println("add relationship...");
 configuration.insertBidirectionalRelationship(fromConcept,"owner","owned", toConcept);
 }

 /*
 * print out the XML representation of the RDM...
*/
System.out.println(configuration.getRegistryDomainModel().getXmlRepresentation());
 System.out.println("Finish configuration.");

 PropertyManagement.resetProperties();
 }
}


User Management

The user management of the registry allows dynamically adding and removing users to and from the registry. Further is supports group management of the users.

import java.util.Properties;
import uk.ac.soton.itinnovation.registry.icomponent.usermanagement.UserManagement;
import uk.ac.soton.itinnovation.registry.icomponent.usermanagement.UserManagementException;
import uk.ac.soton.itinnovation.registry.icomponent.util.PropertyConstants;
import uk.ac.soton.itinnovation.registry.icomponent.util.PropertyManagement;
import uk.ac.soton.itinnovation.registry.management.factory.RegistryManagementFactory;
import uk.ac.soton.itinnovation.registry.management.factory.StartupRegistryManagementFactory;
import uk.ac.soton.itinnovation.registry.management.factory.SupportedTechnology;
/**
 * User Management Client...
 */
public class UserManagementRegistryClient {
  public static void main(String[] args) throws UserManagementException{
     /*
      * Setup registry properties...
      */
     Properties systemProps = System.getProperties();
     String configDir = systemProps.getProperty(PropertyConstants.registryConfigurationDir);
     if(configDir==null){
       String msg = "Configuration directory is not specified, " +
            "e.g. -Dregistry.conf.dir=... ";
       throw new RuntimeException(msg);
     }   
     PropertyManagement.configurationDirectory = configDir;     

     /*
      * Get a configuration object...
      */
     RegistryManagementFactory factory = StartupRegistryManagementFactory.createRegistryFactory(SupportedTechnology.XML);
     UserManagement userManagement = factory.createUserManagementFacility(); 
   
     /*
      * Add user to the registry...
      */
     userManagement.addUser("myUser", "myPass", new String[]{"myGroup", "all"});     
     PropertyManagement.resetProperties();
  }
}