Building your own registry
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 databaseThis file defines the actual implementation class of the db connection. Currently this is based on XML:DB.
uk.ac.soton.itinnovation.registry.component.xml.db.XmlDbAccessManager
= uk.ac.soton.itinnovation.registry.component.xml.db.xmldb.XmlDbAccessManagerXmlDb
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();
}
}
