diff --git a/.classpath b/.classpath index c44a168..efe22b7 100644 --- a/.classpath +++ b/.classpath @@ -1,7 +1,8 @@ - + + diff --git a/etc/deploy-jndi-config.xml b/etc/deploy-jndi-config.xml index 0c0ce26..351118b 100644 --- a/etc/deploy-jndi-config.xml +++ b/etc/deploy-jndi-config.xml @@ -48,7 +48,7 @@ mode - pull + push fileName @@ -69,12 +69,7 @@ resourceClass org.gcube.informationsystem.registry.impl.state.ProfileResource - - - persistenceDelegateClass - org.gcube.informationsystem.registry.impl.persistence.RegistryPersistenceDelegate - - + sweeperDelay 10000 @@ -106,12 +101,7 @@ resourceClass org.gcube.informationsystem.registry.impl.state.RegistryFactoryResource - - - persistenceDelegateClass - org.gcube.informationsystem.registry.impl.persistence.RegistryFactoryPersistenceDelegate - - + diff --git a/etc/deploy-server.wsdd b/etc/deploy-server.wsdd index c69f2bc..cc7174f 100644 --- a/etc/deploy-server.wsdd +++ b/etc/deploy-server.wsdd @@ -12,7 +12,7 @@ - + diff --git a/etc/security-descriptor-Factory.xml b/etc/security-descriptor-Factory.xml deleted file mode 100644 index fdcf9ad..0000000 --- a/etc/security-descriptor-Factory.xml +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/etc/security-descriptor-Service.xml b/etc/security-descriptor-Service.xml deleted file mode 100755 index 065b95a..0000000 --- a/etc/security-descriptor-Service.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/schema/ResourceRegistration.wsdl b/schema/ResourceRegistration.wsdl new file mode 100644 index 0000000..2e80d4f --- /dev/null +++ b/schema/ResourceRegistration.wsdl @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/org/gcube/informationsystem/registry/impl/contexts/ServiceContext.java b/src/org/gcube/informationsystem/registry/impl/contexts/ServiceContext.java index f8d1e0e..0938362 100644 --- a/src/org/gcube/informationsystem/registry/impl/contexts/ServiceContext.java +++ b/src/org/gcube/informationsystem/registry/impl/contexts/ServiceContext.java @@ -158,7 +158,10 @@ public class ServiceContext extends GCUBEServiceContext { - + /** + * Listeners for local events + * @throws Exception + */ private void subscribeToLocalRegistrationEvents() throws Exception{ ISLocalPublisher pub = GHNContext.getImplementation(ISLocalPublisher.class); LocalProfileConsumer cons = new LocalProfileConsumer() { @@ -167,21 +170,29 @@ public class ServiceContext extends GCUBEServiceContext { * @see org.gcube.common.core.informationsystem.publisher.ISLocalPublisher.LocalProfileConsumer#onProfileRegistered(org.gcube.common.core.resources.GCUBEResource) */ @Override - protected void onProfileRegistered(GCUBEResource resource, GCUBEScope scope) { - logger.debug("onProfileRegistered event received" ); - RegistryFactory factory= new RegistryFactory(); - try { - ServiceContext.getContext().setScope(scope); - CreateResourceMessage crm = new CreateResourceMessage(); - StringWriter writer = new StringWriter(); - resource.store(writer); - crm.setProfile(writer.toString()); - crm.setType(resource.getType()); - factory.createResource(crm); - logger.trace("create Event handled"); - } catch (Exception e) { - logger.error("cannot handle the create resource event"+e); - } + protected void onProfileRegistered(final GCUBEResource resource, final GCUBEScope scope) { + logger.debug("onProfileRegistered event received in scope " + scope ); + new Thread() { + @Override + public void run() { + ServiceContext.this.waitUntilReady(); + RegistryFactory factory= new RegistryFactory(); + try { + ServiceContext.getContext().setScope(scope); + CreateResourceMessage crm = new CreateResourceMessage(); + StringWriter writer = new StringWriter(); + resource.store(writer); + crm.setProfile(writer.toString()); + crm.setType(resource.getType()); + //crm.setScopes(new String[] {scope.toString()}); + factory.createResource(crm); + } catch (Exception e) { + logger.error("cannot handle the create resource event"+e); + } + } + + }.start(); + } @@ -189,19 +200,25 @@ public class ServiceContext extends GCUBEServiceContext { * @see org.gcube.common.core.informationsystem.publisher.ISLocalPublisher.LocalProfileConsumer#onProfileRemoved(java.lang.String, java.lang.String) */ @Override - protected void onProfileRemoved(String resourceID, String type, GCUBEScope scope) { - ServiceContext.getContext().setScope(scope); - RegistryFactory factory= new RegistryFactory(); - RemoveResourceMessage rrm= new RemoveResourceMessage(); - rrm.setType(type); - rrm.setUniqueID(resourceID); - logger.trace("remove Event handled"); - try { - factory.removeResource(rrm); - } catch (Exception e) { - logger.error("cannot handle the remove resource event"+e); - - } + protected void onProfileRemoved(final String resourceID, final String type, final GCUBEScope scope) { + logger.debug("onProfileRemoved event received" ); + new Thread() { + @Override + public void run() { + ServiceContext.this.waitUntilReady(); + ServiceContext.getContext().setScope(scope); + RegistryFactory factory= new RegistryFactory(); + RemoveResourceMessage rrm= new RemoveResourceMessage(); + rrm.setType(type); + rrm.setUniqueID(resourceID); + try { + factory.removeResource(rrm); + } catch (Exception e) { + logger.error("cannot handle the remove resource event"+e); + + } + } + }.start(); } @@ -209,28 +226,46 @@ public class ServiceContext extends GCUBEServiceContext { * @see org.gcube.common.core.informationsystem.publisher.ISLocalPublisher.LocalProfileConsumer#onProfileUpdated(org.gcube.common.core.resources.GCUBEResource) */ @Override - protected void onProfileUpdated(GCUBEResource resource, GCUBEScope scope) { + protected void onProfileUpdated(final GCUBEResource resource, final GCUBEScope scope) { logger.debug("onProfileUpdated event received" ); - ServiceContext.getContext().setScope(scope); - RegistryFactory factory= new RegistryFactory(); - try { - UpdateResourceMessage urm= new UpdateResourceMessage(); - StringWriter writer = new StringWriter(); - resource.store(writer); - urm.setXmlProfile(writer.toString()); - urm.setType(resource.getType()); - urm.setUniqueID(resource.getID()); - factory.updateResource(urm); - logger.trace("Update Event handled"); - } catch (Exception e) { - logger.error("cannot handle the update resource event"+e); - } + new Thread() { + @Override + public void run() { + ServiceContext.this.waitUntilReady(); + ServiceContext.getContext().setScope(scope); + RegistryFactory factory= new RegistryFactory(); + try { + UpdateResourceMessage urm= new UpdateResourceMessage(); + StringWriter writer = new StringWriter(); + resource.store(writer); + urm.setXmlProfile(writer.toString()); + urm.setType(resource.getType()); + urm.setUniqueID(resource.getID()); + factory.updateResource(urm); + } catch (Exception e) { + logger.error("cannot handle the update resource event"+e); + } + } + }.start(); } - - + + }; pub.subscribeLocalProfileEvents(cons); } + + private void waitUntilReady() { + while (true) { + if (ServiceContext.getContext().getStatus() != Status.READIED) + break; + else + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + break; + } + } + } } \ No newline at end of file diff --git a/src/org/gcube/informationsystem/registry/impl/persistence/RegistryFactoryPersistenceDelegate.java b/src/org/gcube/informationsystem/registry/impl/persistence/RegistryFactoryPersistenceDelegate.java deleted file mode 100644 index a33d592..0000000 --- a/src/org/gcube/informationsystem/registry/impl/persistence/RegistryFactoryPersistenceDelegate.java +++ /dev/null @@ -1,59 +0,0 @@ -package org.gcube.informationsystem.registry.impl.persistence; - -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; - -import org.gcube.common.core.persistence.GCUBEWSFilePersistenceDelegate; -import org.gcube.informationsystem.registry.impl.state.RegistryFactoryResource; -import org.gcube.informationsystem.registry.stubs.RegistryProperty; -import org.globus.wsrf.utils.SubscriptionPersistenceUtils; - -public class RegistryFactoryPersistenceDelegate extends GCUBEWSFilePersistenceDelegate{ - - - protected void onLoad(RegistryFactoryResource resource, ObjectInputStream ois) throws Exception { - - super.onLoad(resource, ois); - resource.setGLiteCE((RegistryProperty)ois.readObject()); - resource.setGLiteSE((RegistryProperty)ois.readObject()); - resource.setGLiteService((RegistryProperty)ois.readObject()); - resource.setGLiteSite((RegistryProperty)ois.readObject()); - resource.setCollection((RegistryProperty)ois.readObject()); - resource.setCS((RegistryProperty)ois.readObject()); - resource.setCSInstance((RegistryProperty)ois.readObject()); - resource.setGHN((RegistryProperty)ois.readObject()); - resource.setExternalRunningInstance((RegistryProperty)ois.readObject()); - resource.setMetadataCollection((RegistryProperty)ois.readObject()); - resource.setRunningInstance((RegistryProperty)ois.readObject()); - resource.setService((RegistryProperty)ois.readObject()); - resource.setVRE((RegistryProperty)ois.readObject()); - resource.setGenericResource((RegistryProperty)ois.readObject()); - SubscriptionPersistenceUtils.loadSubscriptionListeners( - resource.getTopicList(), ois); - - } - - protected void onStore(RegistryFactoryResource resource,ObjectOutputStream oos) throws Exception { - - super.onStore(resource, oos); - oos.writeObject(resource.getGLiteCE()); - oos.writeObject(resource.getGLiteSE()); - oos.writeObject(resource.getGLiteService()); - oos.writeObject(resource.getGLiteSite()); - oos.writeObject(resource.getCollection()); - oos.writeObject(resource.getCS()); - oos.writeObject(resource.getCSInstance()); - oos.writeObject(resource.getGHN()); - oos.writeObject(resource.getExternalRunningInstance()); - oos.writeObject(resource.getMetadataCollection()); - oos.writeObject(resource.getRunningInstance()); - oos.writeObject(resource.getService()); - oos.writeObject(resource.getVRE()); - oos.writeObject(resource.getGenericResource()); - - - SubscriptionPersistenceUtils.storeSubscriptionListeners( - resource.getTopicList(), oos); - - } -} diff --git a/src/org/gcube/informationsystem/registry/impl/persistence/RegistryPersistenceDelegate.java b/src/org/gcube/informationsystem/registry/impl/persistence/RegistryPersistenceDelegate.java deleted file mode 100644 index 99ac312..0000000 --- a/src/org/gcube/informationsystem/registry/impl/persistence/RegistryPersistenceDelegate.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.gcube.informationsystem.registry.impl.persistence; - -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import org.gcube.common.core.persistence.GCUBEWSFilePersistenceDelegate; -import org.gcube.informationsystem.registry.impl.state.ProfileResource; -import org.w3c.dom.Document; - -public class RegistryPersistenceDelegate extends GCUBEWSFilePersistenceDelegate { - - - protected void onLoad(ProfileResource resource, ObjectInputStream ois) throws Exception { - - super.onLoad(resource, ois); - resource.setProfile((Document)ois.readObject()); - //resource.setNotificationProfile(resource.getProfile()); - } - - protected void onStore(ProfileResource resource,ObjectOutputStream oos) throws Exception { - - super.onStore(resource, oos); - oos.writeObject((Document)resource.getProfile()); - - } -} diff --git a/src/org/gcube/informationsystem/registry/impl/porttypes/RegistryFactory.java b/src/org/gcube/informationsystem/registry/impl/porttypes/RegistryFactory.java index 8cca0fc..95eeab7 100644 --- a/src/org/gcube/informationsystem/registry/impl/porttypes/RegistryFactory.java +++ b/src/org/gcube/informationsystem/registry/impl/porttypes/RegistryFactory.java @@ -20,6 +20,7 @@ import org.gcube.common.core.porttypes.GCUBEPortType; import org.gcube.common.core.resources.GCUBEHostingNode; import org.gcube.common.core.resources.GCUBEResource; import org.gcube.common.core.scope.GCUBEScope; +import org.gcube.common.core.state.GCUBEWSResourceKey; import org.gcube.common.core.utils.events.GCUBEEvent; import org.gcube.common.core.utils.logging.GCUBELog; import org.gcube.informationsystem.registry.impl.contexts.FactoryContext; @@ -41,7 +42,8 @@ import org.gcube.informationsystem.registry.stubs.ResourceNotAcceptedFault; import org.gcube.informationsystem.registry.stubs.SchemaValidationFault; import org.gcube.informationsystem.registry.stubs.UpdateResourceMessage; import org.gcube.informationsystem.registry.stubs.UpdateResourceResponse; -import static org.gcube.informationsystem.registry.impl.core.RegistryConfiguration.ResourceType; + +import static org.gcube.informationsystem.registry.impl.state.Definitions.ResourceType; /** * Implementation of the Registry Factory portType @@ -112,7 +114,7 @@ public class RegistryFactory extends GCUBEPortType { GCUBEResource resource = null; - logger.info("CreateResource operation invoked"); + logger.info("CreateResource operation invoked in scope " + ServiceContext.getContext().getScope()); // logSecurityInfo("createResource"); String profile = mess.getProfile(); @@ -173,9 +175,9 @@ public class RegistryFactory extends GCUBEPortType { // try to create resource try { logger.debug("Creating the stateful resource N."+ ++resourceCounter + " for " + resource.getID()); - - ProfileResource presource = (ProfileResource) ProfileContext - .getContext().getWSHome().create(ProfileContext.getContext().makeKey(resource.getID()), resource); + GCUBEWSResourceKey key = ProfileContext.getContext().makeKey(resource.getID()); + logger.trace("Resource key is " + key); + ProfileResource presource = (ProfileResource) ProfileContext.getContext().getWSHome().create(key, resource); presource.store(); // Deleting the WSResource created if != from GHN || RI @@ -202,14 +204,15 @@ public class RegistryFactory extends GCUBEPortType { StringWriter writer = new StringWriter(); try { - logger.debug("Persisting the stateful resource for " + resource.getID()); resource.store(writer); + logger.info("Profile " + resource.getID() + " created "); + return writer.toString(); } catch (Exception e) { logger.error("Persistence failed for " + resource.getID(), e); + return null; } - logger.info("Profile " + resource.getID() + " created "); - return writer.toString(); + } /** @@ -324,25 +327,19 @@ public class RegistryFactory extends GCUBEPortType { String ID = inputMessage.getUniqueID(); String type = inputMessage.getType(); - logger.info("RemoveResource operation invoked on resource ID=" + ID - + ", type=" + type); + logger.info("RemoveResource operation invoked on resource ID=" + ID + ", type=" + type); if (ID == null || ID.compareTo("") == 0) { logger.warn("Resource ID is missing, cannot manage the resource"); - throw new RemoteException( - "Resource ID is missing, cannot manage the resource"); + throw new RemoteException("Resource ID is missing, cannot manage the resource"); } - + //TODO: delete the profile with the GCUBEPublisher try { logger.debug("Trying to remove the resource from the IS-IC"); - new ProfileManager().removeFromISIC(ID, type, ServiceContext - .getContext().getScope(), ServiceContext.getContext()); + new ProfileManager().remove(ID, type, ServiceContext.getContext().getScope(), ServiceContext.getContext()); logger.info("Resource removed from the IS-IC"); } catch (Exception e) { logger.error("Unable to remove the resource", e); - throw ServiceContext - .getContext() - .getDefaultException("", e) - .toFault( + throw ServiceContext.getContext().getDefaultException("", e).toFault( "Unable to remove the resource: the remote IS-IC returned an error"); } // if the resource is a GHN, remove also the related RIs @@ -354,16 +351,14 @@ public class RegistryFactory extends GCUBEPortType { logger.debug("Related RIs removed"); } } catch (Exception e) { - logger.error("Error while removing RI profiles related to the GHN", - e); + logger.error("Error while removing RI profiles related to the GHN", e); } if (this.isResourceCreated(ID)) { // destroy the resource try { logger.debug("Destroying the local stateful Resoruce"); - ProfileContext.getContext().getWSHome().remove( - ProfileContext.getContext().makeKey(ID)); + ProfileContext.getContext().getWSHome().remove(ProfileContext.getContext().makeKey(ID)); logger.info(" Resource Destroyed"); } catch (Exception e) { logger.error("Error removing resource for ID ", e); @@ -371,14 +366,11 @@ public class RegistryFactory extends GCUBEPortType { } try { GCUBEEvent event = new GCUBEEvent(); - GCUBEResource resource = ResourceType.valueOf(type) - .getResourceClass(); + GCUBEResource resource = ResourceType.valueOf(type).getResourceClass(); resource.setID(ID); event.setPayload(resource); - ServiceContext.getContext().getTopicProducer().notify( - ServiceContext.RegistryTopic.REMOVE, event); - updateCounterInfo(ID, ResourceType.valueOf(type), - OperationType.destroy, Calendar.getInstance(), null); + ServiceContext.getContext().getTopicProducer().notify(ServiceContext.RegistryTopic.REMOVE, event); + updateCounterInfo(ID, ResourceType.valueOf(type),OperationType.destroy, Calendar.getInstance(), null); } catch (Exception e) { logger.warn( "Error updating counting info for resource with ID " diff --git a/src/org/gcube/informationsystem/registry/impl/porttypes/ResourceRegistration.java b/src/org/gcube/informationsystem/registry/impl/porttypes/ResourceRegistration.java new file mode 100644 index 0000000..19835c3 --- /dev/null +++ b/src/org/gcube/informationsystem/registry/impl/porttypes/ResourceRegistration.java @@ -0,0 +1,14 @@ +package org.gcube.informationsystem.registry.impl.porttypes; + +import org.gcube.common.core.contexts.GCUBEServiceContext; +import org.gcube.common.core.porttypes.GCUBEPortType; +import org.gcube.informationsystem.registry.impl.contexts.ServiceContext; + +public class ResourceRegistration extends GCUBEPortType { + + @Override + protected GCUBEServiceContext getServiceContext() { + return ServiceContext.getContext(); + } + +} diff --git a/src/org/gcube/informationsystem/registry/impl/profilemanagement/ProfileManager.java b/src/org/gcube/informationsystem/registry/impl/profilemanagement/ProfileManager.java index 6759e08..527769d 100644 --- a/src/org/gcube/informationsystem/registry/impl/profilemanagement/ProfileManager.java +++ b/src/org/gcube/informationsystem/registry/impl/profilemanagement/ProfileManager.java @@ -11,6 +11,7 @@ import org.apache.axis.message.addressing.EndpointReferenceType; import org.apache.axis.types.URI; import org.gcube.common.core.contexts.GCUBERemotePortTypeContext; +import org.gcube.common.core.resources.GCUBEResource; import org.gcube.common.core.scope.GCUBEScope; import org.gcube.common.core.scope.GCUBEScopeNotSupportedException; import org.gcube.common.core.scope.ServiceMap; @@ -57,20 +58,21 @@ public class ProfileManager { VOMapName = scope.getName(); } + + public void add(GCUBEResource resource, GCUBEScope scope, GCUBEServiceSecurityManager manager) throws Exception { + + } + /** - * Removes from IS-IC a GCUBEResource profile ( not knowing the Resurce Type - * the removal has been done once for every type of GCUBE Resource + * Removes a {@link GCUBEResource} from the IS * - * @param uniqueID - * the uniqueID to of the GCUBEResource to remove - * @param type - * the type of Profile + * @param uniqueID the uniqueID to of the GCUBEResource to remove + * @param type the type of Profile * - * @throws Exception - * if the unregistration fails + * @throws Exception if the unregistration fails */ - public void removeFromISIC(String uniqueID, String type, GCUBEScope scope, + public void remove(String uniqueID, String type, GCUBEScope scope, GCUBEServiceSecurityManager manager) throws Exception { for (EndpointReferenceType sink : this.ICEprs) { @@ -94,7 +96,8 @@ public class ProfileManager { // all the resource types logger.debug(" trying to remove profile with UniqueID" + uniqueID); for (int n = 0; n < ResourceTypes.values().length; n++) { - this.removeDocuments(isIcAddress, scope, new URI("gcube://resource"), new URI("gcube://Profiles/"+ ResourceTypes.values()[n].toString()), uniqueID); + this.removeDocuments(isIcAddress, scope, new URI("gcube://resource"), + new URI("gcube://Profiles/"+ ResourceTypes.values()[n].toString()), uniqueID); } } catch (Exception e) { logger.error( @@ -131,7 +134,7 @@ public class ProfileManager { stubs = new WsdaixServiceAddressingLocator().getXMLCollectionAccessPTPort(new URL(serviceURL)); stubs = GCUBERemotePortTypeContext.getProxy(stubs, scope); } catch (Exception e) { - logger.error("Failed to get documentes", e); + logger.error("Failed to get documents", e); } return stubs.removeDocuments(request); } diff --git a/src/org/gcube/informationsystem/registry/impl/core/RegistryConfiguration.java b/src/org/gcube/informationsystem/registry/impl/state/Definitions.java similarity index 51% rename from src/org/gcube/informationsystem/registry/impl/core/RegistryConfiguration.java rename to src/org/gcube/informationsystem/registry/impl/state/Definitions.java index 63e0840..5b69152 100644 --- a/src/org/gcube/informationsystem/registry/impl/core/RegistryConfiguration.java +++ b/src/org/gcube/informationsystem/registry/impl/state/Definitions.java @@ -1,4 +1,4 @@ -package org.gcube.informationsystem.registry.impl.core; +package org.gcube.informationsystem.registry.impl.state; import org.gcube.common.core.contexts.GHNContext; import org.gcube.common.core.resources.GCUBECS; @@ -14,24 +14,13 @@ import org.gcube.common.core.resources.GCUBEService; /** * -* Local Configuration of the IS-Registry -* -* @author Andrea Manzi, Manuele Simi (CNR) +* Collection of definitions * */ -public class RegistryConfiguration { +public class Definitions { - /** The root service to take care at service's startup */ - public static enum ROOT_SERVICES { - ISIC() { public String getClazz() {return "InformationSystem";} public String getName() {return "IS-IC";}}, - ISNOTIFIER() {public String getClazz() {return "InformationSystem";} public String getName() {return "IS-Notifier";}}, - GHNMANAGER() {public String getClazz() {return "VREManagement";} public String getName() {return "GHNManager";}}, - DEPLOYER() {public String getClazz() {return "VREManagement";} public String getName() {return "Deployer";}}; - abstract public String getName(); - abstract public String getClazz(); - } /** The Resource Type */ public static enum ResourceType { @@ -53,89 +42,6 @@ public class RegistryConfiguration { }; - - /** - * - */ - private String profilesBase = null; - /** - * - */ - private String propertiesFile = null; - /** - * - */ - private String registrationType = null; - /** - * - */ - private int registrationRemovalInterval = 140; - /** - * Constructor - */ - public RegistryConfiguration () {} - /** - * Get the profile base folder - * @return the profile base folder - */ - public String getProfilesBase() { - return profilesBase; - } - - /** - * Set the profile base folder - * - * @param b the profile base folder - */ - public void setProfilesBase(String b) { - profilesBase = b; - } - - /** - * The propertie file dir - * @return The propertie file dir - */ - public String getPropertiesFile() { - return propertiesFile; - } - /** - * Set the propertyFile dir - * @param file the file - */ - public void setPropertiesFile(String file) { - propertiesFile = file; - } - - /** - * Get The Registration Type - * @return The registration Type - */ - public String getRegistrationType() { - return registrationType; - } - - /** - * Set registration Type - * @param type the registration Type - */ - public void setRegistrationType(String type) { - registrationType = type; - } - - /** - * Set the Registration time - * @param sec the interval - */ - public void setRegistrationRemovalInterval(int sec) { - registrationRemovalInterval = sec; - } - /** - * Get the registration time interval - * @return The Registration time - */ - public int getRegistrationRemovalInterval() { - return registrationRemovalInterval; - } }