Code cleanup from unused portType and state. Improved purging and package reorganization.

git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/information-system/gCubeIS/Registry@36413 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Manuele Simi 2011-03-22 03:47:15 +00:00
parent 0a42a72939
commit f328250842
27 changed files with 74 additions and 618 deletions

View File

@ -11,58 +11,6 @@
override="false" />
-->
</service>
<service name="gcube/informationsystem/registry/Registry">
<environment name="name" value="Registry" type="java.lang.String"
override="false" />
<environment name="RPDName" value="ProfileResourceProperties"
type="java.lang.String" override="false" />
<resource name="publicationProfile"
type="org.gcube.common.core.state.GCUBEPublicationProfile">
<resourceParams>
<parameter>
<name>factory</name>
<value>org.globus.wsrf.jndi.BeanFactory</value>
</parameter>
<parameter>
<name>mode</name>
<value>push</value>
</parameter>
<parameter>
<name>fileName</name>
<value>registration.xml</value>
</parameter>
</resourceParams>
</resource>
<resource name="home"
type="org.gcube.informationsystem.registry.impl.state.ProfileResourceHome">
<resourceParams>
<parameter>
<name>factory</name>
<value>org.globus.wsrf.jndi.BeanFactory</value>
</parameter>
<parameter>
<name>resourceClass</name>
<value>org.gcube.informationsystem.registry.impl.state.ProfileResource
</value>
</parameter>
<parameter>
<name>sweeperDelay</name>
<value>10000</value>
</parameter>
</resourceParams>
</resource>
</service>
<service name="gcube/informationsystem/registry/ResourceRegistration">

View File

@ -5,18 +5,6 @@
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:aggr="http://mds.globus.org/aggregator/types">
<service name="gcube/informationsystem/registry/Registry" provider="Handler" use="literal" style="document">
<parameter name="className" value="org.gcube.informationsystem.registry.impl.porttypes.Registry"/>
<wsdlFile>share/schema/org.gcube.informationsystem.registry/Registry_service.wsdl</wsdlFile>
<parameter name="allowedMethods" value="*"/>
<parameter name="handlerClass" value="org.globus.axis.providers.RPCProvider"/>
<parameter name="scope" value="Application"/>
<parameter name="providers" value="GCUBEProvider SubscribeProvider DestroyProvider GetCurrentMessageProvider "/>
<parameter name="loadOnStartup" value="true"/>
<!-- <parameter name="securityDescriptor" value="@config.dir@/security-descriptor-Service.xml"/> -->
</service>
<!-- Factory service -->
<service name="gcube/informationsystem/registry/RegistryFactory" provider="Handler" use="literal" style="document">
<parameter name="className" value="org.gcube.informationsystem.registry.impl.porttypes.RegistryFactory"/>

View File

@ -18,7 +18,7 @@
<Main>
<Description>IS-Registry: validate, register and unregister GCUBE resources to/from the IS. It also publishes Topics for notifications about GCUBE resource events</Description>
<Name>IS-Registry-service</Name>
<Version>2.0.0</Version>
<Version>2.1.0</Version>
<Mandatory level="VO"/>
<Shareable level="VO"/>
<GHNRequirements>
@ -32,7 +32,7 @@
<Version>1.0.0</Version>
</Service>
<Package>IS-Registry-stubs</Package>
<Version>2.0.0</Version>
<Version>2.1.0</Version>
<Scope level="GHN"/>
<Optional>false</Optional>
</Dependency>
@ -48,16 +48,11 @@
<Security/>
<WSDL/>
</PortType>
<PortType>
<Name>gcube/informationsystem/registry/Registry</Name>
<Security/>
<WSDL/>
</PortType>
</Main>
<Software>
<Description>IS-Registry: validate, register and unregister GCUBE resources to/from the IS. It also publishes Topics for notifications about GCUBE resource events</Description>
<Name>IS-Registry-stubs</Name>
<Version>2.0.0</Version>
<Version>2.1.0</Version>
<MultiVersion value="true"/>
<Mandatory level="GHN"/>
<Shareable level="VO"/>

View File

@ -1,10 +1,5 @@
package org.gcube.informationsystem.registry.impl.contexts;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import org.gcube.common.core.contexts.GCUBEServiceContext;
import org.gcube.common.core.contexts.GHNContext;
import static org.gcube.common.core.contexts.GHNContext.Mode;
@ -16,10 +11,9 @@ import org.gcube.common.core.utils.events.GCUBEProducer;
import org.gcube.common.core.utils.events.GCUBETopic;
import org.gcube.common.core.utils.handlers.GCUBEScheduledHandler;
import org.gcube.informationsystem.registry.impl.local.LocalProfileConsumerImpl;
import org.gcube.informationsystem.registry.impl.purging.AvailablePurgers;
import org.gcube.informationsystem.registry.impl.purging.GHNPurger;
import org.gcube.informationsystem.registry.impl.purging.RIPurger;
import org.gcube.informationsystem.registry.impl.resourcemanagement.EliminatePoolingThread;
import org.gcube.informationsystem.registry.impl.postprocessing.purging.AvailablePurgers;
import org.gcube.informationsystem.registry.impl.postprocessing.purging.GHNPurger;
import org.gcube.informationsystem.registry.impl.postprocessing.purging.RIPurger;
@ -32,8 +26,6 @@ import org.gcube.informationsystem.registry.impl.resourcemanagement.EliminatePoo
public class ServiceContext extends GCUBEServiceContext {
public static final String JNDI_NAME = "gcube/informationsystem/registry";
public static Map<String, EliminatePoolingThread> threadTable = Collections.synchronizedMap(new HashMap<String, EliminatePoolingThread>());
protected static final ServiceContext cache = new ServiceContext();

View File

@ -10,10 +10,10 @@ import org.gcube.common.core.utils.logging.GCUBELog;
import org.gcube.informationsystem.registry.impl.contexts.ServiceContext;
import org.gcube.informationsystem.registry.impl.contexts.ServiceContext.RegistryTopic;
import org.gcube.informationsystem.registry.impl.local.LocalNotifier;
import org.gcube.informationsystem.registry.impl.purging.AvailablePurgers;
import org.gcube.informationsystem.registry.impl.purging.Purger;
import org.gcube.informationsystem.registry.impl.postprocessing.purging.AvailablePurgers;
import org.gcube.informationsystem.registry.impl.postprocessing.purging.Purger;
import org.gcube.informationsystem.registry.impl.state.Definitions.OperationType;
import org.gcube.informationsystem.registry.impl.state.Definitions.ResourceType;
import org.gcube.informationsystem.registry.impl.state.Definitions.ResourceMappings;
public class LocalResourceRegistration {
@ -27,7 +27,7 @@ public class LocalResourceRegistration {
LocalNotifier.notifyEvent(resource, RegistryTopic.CREATE);
StringWriter writer = new StringWriter();
resource.store(writer);
RegistryFactory.updateCounterInfo(resource.getID(), ResourceType.valueOf(
RegistryFactory.updateCounterInfo(resource.getID(), ResourceMappings.valueOf(
resource.getType()), OperationType.create,
Calendar.getInstance(), writer.toString());
}
@ -42,18 +42,22 @@ public class LocalResourceRegistration {
publisher.remove(id, type, ServiceContext.getContext().getScope(), ServiceContext.getContext());
logger.debug("Resource " + id+ " successfully removed");
// if there is a purger available, remove also the related RIs
Purger<?> purger = AvailablePurgers.getPurger(ResourceType.valueOf(type).getResourceImplementation().getClass());
if (purger != null)
logger.trace("Looking for purger for "+ type);
Purger<?> purger = AvailablePurgers.getPurger(type);
if (purger != null) {
try {
logger.debug("Applying purger for " + type);
purger.purge(id, ServiceContext.getContext().getScope());
} catch (Exception e) {
logger.error("Error while removing the profiles related to the resource", e);
}
} else
logger.trace("No purger found");
//let the notifiers know
GCUBEResource resource = ResourceType.valueOf(type).getResourceImplementation();
GCUBEResource resource = ResourceMappings.valueOf(type).getResourceImplementation();
resource.setID(id);
LocalNotifier.notifyEvent(resource, RegistryTopic.REMOVE);
RegistryFactory.updateCounterInfo(id, ResourceType.valueOf(type),OperationType.destroy, Calendar.getInstance(), null);
RegistryFactory.updateCounterInfo(id, ResourceMappings.valueOf(type),OperationType.destroy, Calendar.getInstance(), null);
}
public void update(GCUBEResource resource) throws Exception {
@ -63,7 +67,7 @@ public class LocalResourceRegistration {
LocalNotifier.notifyEvent(resource, RegistryTopic.UPDATE);
StringWriter writer = new StringWriter();
resource.store(writer);
RegistryFactory.updateCounterInfo(resource.getID(), ResourceType.valueOf(resource.getType()),
RegistryFactory.updateCounterInfo(resource.getID(), ResourceMappings.valueOf(resource.getType()),
OperationType.update, Calendar.getInstance(), writer.toString());
}

View File

@ -1,41 +0,0 @@
package org.gcube.informationsystem.registry.impl.porttypes;
import org.apache.axis.utils.XMLUtils;
import org.gcube.common.core.contexts.GCUBEServiceContext;
import org.gcube.common.core.faults.GCUBEFault;
import org.gcube.common.core.porttypes.GCUBEPortType;
import org.gcube.informationsystem.registry.impl.contexts.ProfileContext;
import org.gcube.informationsystem.registry.impl.contexts.ServiceContext;
import org.gcube.informationsystem.registry.impl.state.ProfileResource;
import org.gcube.informationsystem.registry.stubs.GetProfileString;
/**
* Implementation of the <em>Registry</em> portType
*
* @author Manuele Simi (CNR)
*
*/
public class Registry extends GCUBEPortType {
/**
* Gets a string representation of the profile
* @param voidType
* @return a string representation of the profile
* @throws GCUBEFault
*/
public String getProfileAsString(GetProfileString voidType) throws GCUBEFault{
try {
return XMLUtils.DocumentToString(((ProfileResource)ProfileContext.getContext().getWSHome().find()).getProfile());
} catch (Exception e) {
e.printStackTrace();
throw new GCUBEFault();
}
}
@Override
protected GCUBEServiceContext getServiceContext() {
return ServiceContext.getContext();
}
}

View File

@ -13,7 +13,6 @@ import org.gcube.common.core.utils.logging.GCUBELog;
import org.gcube.informationsystem.registry.impl.contexts.FactoryContext;
import org.gcube.informationsystem.registry.impl.contexts.ProfileContext;
import org.gcube.informationsystem.registry.impl.contexts.ServiceContext;
import org.gcube.informationsystem.registry.impl.state.ProfileResource;
import org.gcube.informationsystem.registry.impl.state.RegistryFactoryResource;
import org.gcube.informationsystem.registry.impl.state.Definitions.OperationType;
import org.gcube.informationsystem.registry.stubs.CreateResourceMessage;
@ -29,7 +28,7 @@ import org.gcube.informationsystem.registry.stubs.resourceregistration.CreateMes
import org.gcube.informationsystem.registry.stubs.resourceregistration.RemoveMessage;
import org.gcube.informationsystem.registry.stubs.resourceregistration.UpdateMessage;
import static org.gcube.informationsystem.registry.impl.state.Definitions.ResourceType;
import static org.gcube.informationsystem.registry.impl.state.Definitions.ResourceMappings;
/**
* Implementation of the <em>Registry Factory</em> portType
@ -173,36 +172,6 @@ public class RegistryFactory extends GCUBEPortType {
}
/**
* Gets the profile resource
*
* @param id the Resource ID
* @return the resource or <tt>null</tt> if the resource has not been created yet
*/
protected synchronized ProfileResource getProfileResource(String id) {
try {
return (ProfileResource) ProfileContext.getContext().getWSHome()
.find(ProfileContext.getContext().makeKey(id));
} catch (Exception e) {
logger.debug("A profile with the given id " + id+ " has not been created yet");
}
return null;
}
/**
* Checks whether a stateful resource with the given identifier exists
*
* @param id the resource's identifier
* @return <tt>true</tt> if the resource exists, <tt>false</tt> otherwise
*/
protected synchronized boolean isResourceCreated(String id) {
if (getProfileResource(id) != null)
return true;
else
return false;
}
/**
* Updates the RegistryFactoryResource RPs for notification
*
@ -213,7 +182,7 @@ public class RegistryFactory extends GCUBEPortType {
* @throws Exception if the update fails
*/
protected static synchronized void updateCounterInfo(String ID,
ResourceType resType, OperationType opType, Calendar updateTime,
ResourceMappings resType, OperationType opType, Calendar updateTime,
String profile) throws Exception {
//return;
RegistryProperty property = new RegistryProperty();

View File

@ -18,14 +18,14 @@ import org.gcube.common.core.resources.GCUBEResource;
import org.gcube.common.core.utils.logging.GCUBELog;
import org.gcube.informationsystem.registry.impl.contexts.ServiceContext;
import org.gcube.informationsystem.registry.impl.contexts.ServiceContext.RegistryTopic;
import org.gcube.informationsystem.registry.impl.filters.FilterManager;
import org.gcube.informationsystem.registry.impl.filters.FilterExecutor.InvalidFilterException;
import org.gcube.informationsystem.registry.impl.local.LocalNotifier;
import org.gcube.informationsystem.registry.impl.purging.AvailablePurgers;
import org.gcube.informationsystem.registry.impl.purging.GHNPurger;
import org.gcube.informationsystem.registry.impl.purging.Purger;
import org.gcube.informationsystem.registry.impl.postprocessing.purging.AvailablePurgers;
import org.gcube.informationsystem.registry.impl.postprocessing.purging.GHNPurger;
import org.gcube.informationsystem.registry.impl.postprocessing.purging.Purger;
import org.gcube.informationsystem.registry.impl.preprocessing.filters.FilterManager;
import org.gcube.informationsystem.registry.impl.preprocessing.filters.FilterExecutor.InvalidFilterException;
import org.gcube.informationsystem.registry.impl.state.Definitions.OperationType;
import org.gcube.informationsystem.registry.impl.state.Definitions.ResourceType;
import org.gcube.informationsystem.registry.impl.state.Definitions.ResourceMappings;
import org.gcube.informationsystem.registry.stubs.resourceregistration.CreateFault;
import org.gcube.informationsystem.registry.stubs.resourceregistration.CreateMessage;
import org.gcube.informationsystem.registry.stubs.resourceregistration.CreateResponse;
@ -148,7 +148,7 @@ public class ResourceRegistration extends GCUBEPortType {
}
GCUBEResource resource;
try {
resource = ResourceType.valueOf(type).getResourceImplementation();
resource = ResourceMappings.valueOf(type).getResourceImplementation();
resource.load(new BufferedReader(new InputStreamReader( new ByteArrayInputStream(profile.getBytes("UTF-8")),"UTF-8")));
//resource.addScope(ServiceContext.getContext().getScope());

View File

@ -0,0 +1,22 @@
package org.gcube.informationsystem.registry.impl.postprocessing.purging;
import java.util.HashMap;
import java.util.Map;
import org.gcube.common.core.utils.logging.GCUBELog;
public class AvailablePurgers {
private static Map<String, Purger<?>> purgers = new HashMap<String, Purger<?>>();
private static GCUBELog logger = new GCUBELog(AvailablePurgers.class);
public static void register(Purger<?> purger) {
purgers.put(purger.getName(), purger);
logger.debug ("Purger " + purger.getName() + " registered");
}
public static Purger<?> getPurger(String purgerName) {
return purgers.get(purgerName);
}
}

View File

@ -1,4 +1,4 @@
package org.gcube.informationsystem.registry.impl.purging;
package org.gcube.informationsystem.registry.impl.postprocessing.purging;
import java.rmi.RemoteException;
import java.util.HashSet;
@ -10,9 +10,7 @@ import org.gcube.common.core.informationsystem.client.ISClient;
import org.gcube.common.core.informationsystem.client.QueryParameter;
import org.gcube.common.core.informationsystem.client.XMLResult;
import org.gcube.common.core.informationsystem.client.queries.GCUBEGenericQuery;
import org.gcube.common.core.informationsystem.publisher.ISResourcePublisher;
import org.gcube.common.core.resources.GCUBEHostingNode;
import org.gcube.common.core.resources.GCUBEResource;
import org.gcube.common.core.resources.GCUBERunningInstance;
import org.gcube.common.core.scope.GCUBEScope;
import org.gcube.common.core.utils.logging.GCUBELog;
@ -61,8 +59,6 @@ public class GHNPurger implements Purger<GCUBEHostingNode> {
}
}
public void unregisterHostedRI() throws Exception {
}
@Override
public Set<String> purge(String ghnid, GCUBEScope scope) throws Exception {
@ -93,9 +89,8 @@ public class GHNPurger implements Purger<GCUBEHostingNode> {
@Override
public Class<GCUBEHostingNode> getResourceClass() {
return GCUBEHostingNode.class;
public String getName() {
return GCUBEHostingNode.TYPE;
}
}

View File

@ -1,4 +1,4 @@
package org.gcube.informationsystem.registry.impl.purging;
package org.gcube.informationsystem.registry.impl.postprocessing.purging;
import java.util.Set;
@ -25,9 +25,9 @@ public interface Purger<RESOURCE extends GCUBEResource> {
/**
* Gets the actual type of RESOURCE
* @return the type of RESOURCE
* Gets the type of resource managed by the purgerE
* @return the type
*/
public Class<RESOURCE> getResourceClass();
public String getName();
}

View File

@ -1,6 +1,5 @@
package org.gcube.informationsystem.registry.impl.purging;
package org.gcube.informationsystem.registry.impl.postprocessing.purging;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
@ -16,6 +15,8 @@ import org.gcube.common.core.scope.GCUBEScope;
import org.gcube.common.core.utils.logging.GCUBELog;
/**
* Purger for Running Instance resources. Cleanup all the resources related to
* a just-deleted RI.
*
* @author Manuele Simi (ISTI-CNR)
*
@ -68,8 +69,8 @@ public class RIPurger implements Purger<GCUBERunningInstance> {
}
@Override
public Class<GCUBERunningInstance> getResourceClass() {
return GCUBERunningInstance.class;
public String getName() {
return GCUBERunningInstance.TYPE;
}
}

View File

@ -1,4 +1,4 @@
package org.gcube.informationsystem.registry.impl.filters;
package org.gcube.informationsystem.registry.impl.preprocessing.filters;
import java.util.List;

View File

@ -1,4 +1,4 @@
package org.gcube.informationsystem.registry.impl.filters;
package org.gcube.informationsystem.registry.impl.preprocessing.filters;
public class Filter {

View File

@ -1,4 +1,4 @@
package org.gcube.informationsystem.registry.impl.filters;
package org.gcube.informationsystem.registry.impl.preprocessing.filters;
import org.gcube.common.core.resources.GCUBEResource;
import org.gcube.common.core.utils.logging.GCUBELog;

View File

@ -1,4 +1,4 @@
package org.gcube.informationsystem.registry.impl.filters;
package org.gcube.informationsystem.registry.impl.preprocessing.filters;
import java.util.ArrayList;
import java.util.Collections;

View File

@ -1,4 +1,4 @@
package org.gcube.informationsystem.registry.impl.filters;
package org.gcube.informationsystem.registry.impl.preprocessing.filters;
import java.io.BufferedReader;
import java.io.File;
@ -15,7 +15,7 @@ import org.gcube.common.core.resources.GCUBEGenericResource;
import org.gcube.common.core.scope.GCUBEScope;
import org.gcube.common.core.utils.logging.GCUBELog;
import org.gcube.informationsystem.registry.impl.contexts.ServiceContext;
import org.gcube.informationsystem.registry.impl.filters.Filter.FILTEROPERATION;
import org.gcube.informationsystem.registry.impl.preprocessing.filters.Filter.FILTEROPERATION;
import org.kxml2.io.KXmlParser;
public class FilterReader {

View File

@ -1,10 +1,10 @@
package org.gcube.informationsystem.registry.impl.filters;
package org.gcube.informationsystem.registry.impl.preprocessing.filters;
import java.util.List;
import org.gcube.common.core.resources.GCUBEHostingNode;
import org.gcube.common.core.resources.GCUBEResource;
import org.gcube.informationsystem.registry.impl.filters.Filter.FILTEROPERATION;
import org.gcube.informationsystem.registry.impl.preprocessing.filters.Filter.FILTEROPERATION;
/**
* Filter for {@link GCUBEHostingNode} resource

View File

@ -1,11 +1,11 @@
package org.gcube.informationsystem.registry.impl.filters;
package org.gcube.informationsystem.registry.impl.preprocessing.filters;
import java.util.List;
import org.gcube.common.core.resources.GCUBERunningInstance;
import org.gcube.common.core.resources.GCUBEResource;
import org.gcube.common.core.resources.runninginstance.Endpoint;
import org.gcube.informationsystem.registry.impl.filters.Filter.FILTEROPERATION;
import org.gcube.informationsystem.registry.impl.preprocessing.filters.Filter.FILTEROPERATION;
/**

View File

@ -1,18 +0,0 @@
package org.gcube.informationsystem.registry.impl.purging;
import java.util.HashMap;
import java.util.Map;
public class AvailablePurgers {
private static Map<Class<?>, Purger<?>> purgers = new HashMap<Class<?>, Purger<?>>();
public static void register(Purger<?> purger) {
purgers.put(purger.getResourceClass(), purger);
}
public static Purger<?> getPurger(Class<?> purgerClass) {
return purgers.get(purgerClass);
}
}

View File

@ -1,80 +0,0 @@
package org.gcube.informationsystem.registry.impl.resourcemanagement;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import org.gcube.common.core.utils.logging.GCUBELog;
import org.gcube.informationsystem.registry.impl.contexts.ProfileContext;
import org.gcube.informationsystem.registry.impl.contexts.ServiceContext;
/**
*
* Manages the asynchronous deletion of temporary resources
*
* @author Lucio Lelii, Manuele Simi (ISTI-CNR)
*
*/
public class EliminatePoolingThread extends Thread {
private final long sleepTime = (Long) ServiceContext.getContext().getProperty("temporaryResourceSweeperIntervalInMs");
private List<Pair> stack = Collections.synchronizedList(new LinkedList<Pair>());
private static GCUBELog logger = new GCUBELog(EliminatePoolingThread.class);
public void run() {
while (true) {
try {
Thread.sleep(sleepTime);
} catch (InterruptedException e) {}
try {
synchronized (stack) {
int numRes = stack.size();
LinkedList<Pair> undeletedResources = this.checkResources();
logger.debug("cannot destroy " + undeletedResources.size() + " resources, retrying later");
logger.debug("destroyed " + (numRes - undeletedResources.size()) + " resources ");
stack.addAll(undeletedResources);
} // end synchronized block
} catch (Exception e) {
logger.error("Cannot continue with thread Excecution " + e);
break;
}
}
}
public synchronized List<Pair> getStack() {
return this.stack;
}
/**
* Checks and deletes expired temporary resources
* @return the list of still living resources
*/
private LinkedList<Pair> checkResources() {
LinkedList<Pair> tmpStack = new LinkedList<Pair>();
long timestamp = System.currentTimeMillis();
while (stack.size() > 0) {
Pair c = stack.remove(stack.size() - 1);
logger.trace("checking resource for deletion " + c.resource.getID());
logger.trace("timenstamp now: " + timestamp + ", resource lifetime: " + c.lifetime);
if (timestamp >= c.lifetime) {
try {
logger.debug("temporary resource " + c.resource.getID() + " is going to be deleted");
ProfileContext.getContext().getWSHome().remove(c.resource.getID());
} catch (Exception e) {
logger.error(e);
tmpStack.offer(c);// re-insert the resource in the list
}
} else {
tmpStack.offer(c); // re-insert the resource in the list
}
}
return tmpStack;
}
}

View File

@ -1,28 +0,0 @@
package org.gcube.informationsystem.registry.impl.resourcemanagement;
import org.gcube.informationsystem.registry.impl.state.ProfileResource;
/**
*
* Maintain a {@link ProfileResource} and related lifetime association
*
* @author Manuele Simi (ISTI-CNR)
*
*/
public class Pair {
public long lifetime;
public ProfileResource resource;
public Pair(long lifetime, ProfileResource resource){
this.lifetime = lifetime;
this.resource = resource;
}
public boolean equals(Object o){
Pair objectCouple = (Pair) o;
return objectCouple.resource.equals(this.resource);
}
}

View File

@ -1,58 +0,0 @@
package org.gcube.informationsystem.registry.impl.resourcemanagement;
import java.util.List;
import org.gcube.common.core.informationsystem.notifier.ISNotifier;
import org.gcube.common.core.contexts.GHNContext;
import org.gcube.common.core.scope.GCUBEScope;
import org.gcube.common.core.utils.logging.GCUBELog;
import org.gcube.informationsystem.registry.impl.contexts.FactoryContext;
import org.gcube.informationsystem.registry.impl.contexts.ServiceContext;
import org.globus.wsrf.Topic;
/**
* Registration Thread class
*
* @author Andrea Manzi (ISTI-CNR)
*
*
*/
public class RegistrationThread implements Runnable {
private static GCUBELog logger = new GCUBELog(RegistrationThread.class);
private List<? extends Topic> topics;
/**
* The constructor
*
* @param qname
* an Array list of RP qname
* @throws Exception
* Exception
*/
public RegistrationThread(List<? extends Topic> topics) throws Exception {
this.topics = topics;
}
public void run() {
while (true) {
try {
// This is the time interval
Thread.sleep(10000);
} catch (InterruptedException e) {}
try {
ISNotifier notifier = GHNContext.getImplementation(ISNotifier.class);
notifier.registerISNotification(FactoryContext.getContext().getEPR(), topics, ServiceContext.getContext(),
ServiceContext.getContext().getInstance().getScopes().values().toArray(new GCUBEScope[0]));
return;
} catch (Exception e) {
logger.error("Error starting registration: Retrying in 10 seconds");
}
}
}
}

View File

@ -1,84 +0,0 @@
package org.gcube.informationsystem.registry.impl.resources;
import java.io.StringReader;
import java.io.StringWriter;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.gcube.common.core.resources.GCUBEHostingNode;
import org.gcube.common.core.resources.GCUBEResource;
/**
* A to-be-registered {@link GCUBEResource} passed to the ISRegistry
*
* @author Manuele Simi (ISTI-CNR)
*
*/
public class GCUBERegisteredResource {
protected GCUBEResource resource;
Document dom = null;
public GCUBERegisteredResource (GCUBEResource resource) throws Exception {
this.resource = resource;
this.parse();
}
public String getID() {
return this.resource.getID();
}
/**
* States if the resource is a temporary resource, i.e. must be destroyed after its registration
* @return
*/
public boolean isTemporary() {
if (resource.getType().compareTo(GCUBEHostingNode.TYPE) == 0)
return false;
else
return true;
}
private void parse() throws Exception {
StringWriter writer = new StringWriter();
try {
resource.store(writer);
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder builder = factory.newDocumentBuilder();
StringReader reader = new StringReader(writer.toString().substring(writer.toString().indexOf("?>") + 2, writer.toString().length()));
InputSource source = new InputSource(reader);
this.dom = builder.parse(source);
} catch (Exception e1) {
throw new Exception("Unable to parse the resource");
}
}
/**
* @return the XML Document representation of the resouce
*/
public Document getAsDOM() {
return this.dom;
}
/**
* @return the source resource
*/
public GCUBEResource getSource() {
return this.resource;
}
}

View File

@ -1,8 +1,6 @@
package org.gcube.informationsystem.registry.impl.state;
import org.gcube.common.core.contexts.GHNContext;
import org.gcube.common.core.resources.GCUBECS;
import org.gcube.common.core.resources.GCUBECSInstance;
import org.gcube.common.core.resources.GCUBECollection;
import org.gcube.common.core.resources.GCUBEExternalRunningInstance;
import org.gcube.common.core.resources.GCUBEGenericResource;
@ -23,7 +21,7 @@ public class Definitions {
/** The Resource Types */
public static enum ResourceType {
public static enum ResourceMappings {
RunningInstance() {public GCUBEResource getResourceImplementation() throws Exception {return GHNContext.getImplementation(GCUBERunningInstance.class);}},
ExternalRunningInstance() {public GCUBEResource getResourceImplementation() throws Exception {return GHNContext.getImplementation(GCUBEExternalRunningInstance.class);}},
Service() {public GCUBEResource getResourceImplementation() throws Exception {return GHNContext.getImplementation(GCUBEService.class);}},

View File

@ -1,127 +0,0 @@
package org.gcube.informationsystem.registry.impl.state;
import org.gcube.common.core.contexts.GHNContext;
import org.gcube.common.core.informationsystem.publisher.ISPublisher;
import org.gcube.common.core.resources.GCUBEResource;
import org.gcube.common.core.state.GCUBEWSResource;
import org.gcube.common.core.utils.logging.GCUBELog;
import org.gcube.informationsystem.registry.impl.resources.GCUBERegisteredResource;
import org.globus.wsrf.ResourceException;
import org.w3c.dom.Document;
/**
* Profile Stateful resource
*
* @author Andrea Manzi, Lucio Lelii, Manuele Simi (ISTI-CNR)
*
*/
public class ProfileResource extends GCUBEWSResource {
private static GCUBELog logger = new GCUBELog(ProfileResource.class.getName());
protected GCUBEResource gCubeResource;
protected static final String ProfileRP = "Profile";
/**
* Constructor
*
*/
public ProfileResource() {};
/**
* {@inheritDoc}
*/
@Override
protected String[] getPropertyNames() {
return new String[] { ProfileRP };
}
/**
* Initializes the resource
*
* @param params
* Object
* @throws ResourceException
* if resource is missing
*/
@Override
public void initialise(Object... params) throws ResourceException {
GCUBERegisteredResource resource;
try {
resource = new GCUBERegisteredResource((GCUBEResource) params[0]);
} catch (Exception e) {
throw new ResourceException("Invalid GCUBEResource");
}
logger.debug("initializing resource " + resource.getID());
this.setProfile(resource.getAsDOM());
// this.setNotificationProfile(dom);
this.setGCubeResource(resource.getSource());
if (resource.isTemporary())
this.setTerminationTime(null);
}
/**
* Sets Profile
*
* @param profile the profile
*/
public void setProfile(Document profile) {
this.getResourcePropertySet().get(ProfileRP).clear();
this.getResourcePropertySet().get(ProfileRP).add(profile);
}
/**
* Gets Profile
*
* @return the profile
*/
public Document getProfile() {
return (Document) this.getResourcePropertySet().get(ProfileRP).get(0);
}
/**
* Returns the source {@link GCUBEResource}
*
* @return the resource
*/
public GCUBEResource getGCubeResource() {
return this.gCubeResource;
}
/**
* Sets the source {@link GCUBEResource}
*
* @param resource the resource
*/
public void setGCubeResource(GCUBEResource resource) {
this.gCubeResource = resource;
}
/**
* Updates the resource
*
* @param resource
* the resource to update
* @throws Exception
* if something goes wrong
*/
public void updateResource(GCUBEResource resource) throws Exception {
GCUBERegisteredResource regResource = new GCUBERegisteredResource(resource);
this.setProfile(regResource.getAsDOM());
this.setGCubeResource(resource);
this.store();
}
/* (non-Javadoc)
* @see org.gcube.common.core.state.GCUBEWSResource#getPublisher()
*/
@Override
protected ISPublisher getPublisher() throws Exception {
return GHNContext.getImplementation(ISPublisher.class);
}
}

View File

@ -1,20 +0,0 @@
package org.gcube.informationsystem.registry.impl.state;
import org.gcube.common.core.contexts.GCUBEStatefulPortTypeContext;
import org.gcube.common.core.state.GCUBEWSHome;
import org.gcube.informationsystem.registry.impl.contexts.ProfileContext;
/**
*
* @author lucio
*
*/
public class ProfileResourceHome extends GCUBEWSHome {
/** {@inheritDoc}*/
public GCUBEStatefulPortTypeContext getPortTypeContext() {
return ProfileContext.getContext();
}
}