Merge pull request #3 from mchid/develop
Adding fix for Map of science visualization problem
This commit is contained in:
commit
9ada4eb84f
2 changed files with 58 additions and 15 deletions
|
@ -9,9 +9,14 @@ import edu.cornell.mannlib.vitro.webapp.visualization.modelconstructor.Organizat
|
||||||
import edu.cornell.mannlib.vitro.webapp.visualization.valueobjects.ConstructedModelTracker;
|
import edu.cornell.mannlib.vitro.webapp.visualization.valueobjects.ConstructedModelTracker;
|
||||||
import edu.cornell.mannlib.vitro.webapp.visualization.visutils.ModelConstructor;
|
import edu.cornell.mannlib.vitro.webapp.visualization.visutils.ModelConstructor;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import java.util.concurrent.locks.Lock;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.visualization.visutils.CustomLock;
|
||||||
|
|
||||||
public class OrganizationToPublicationsForSubOrganizationsFactory implements
|
public class OrganizationToPublicationsForSubOrganizationsFactory implements
|
||||||
ModelFactoryInterface {
|
ModelFactoryInterface {
|
||||||
|
private static final Log log = LogFactory.getLog(OrganizationToPublicationsForSubOrganizationsFactory.class.getName());
|
||||||
@Override
|
@Override
|
||||||
public Model getOrCreateModel(String uri, Dataset dataset)
|
public Model getOrCreateModel(String uri, Dataset dataset)
|
||||||
throws MalformedQueryParametersException {
|
throws MalformedQueryParametersException {
|
||||||
|
@ -21,26 +26,36 @@ public class OrganizationToPublicationsForSubOrganizationsFactory implements
|
||||||
.generateModelIdentifier(
|
.generateModelIdentifier(
|
||||||
uri,
|
uri,
|
||||||
OrganizationToPublicationsForSubOrganizationsModelConstructor.MODEL_TYPE));
|
OrganizationToPublicationsForSubOrganizationsModelConstructor.MODEL_TYPE));
|
||||||
|
|
||||||
if (candidateModel != null) {
|
if (candidateModel != null) {
|
||||||
|
|
||||||
return candidateModel;
|
return candidateModel;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
Lock customLock = CustomLock.getInstance().getLock();
|
||||||
ModelConstructor model = new OrganizationToPublicationsForSubOrganizationsModelConstructor(uri, dataset);
|
if (customLock.tryLock()) //Acquiring lock if available to construct the model
|
||||||
|
{
|
||||||
Model constructedModel = model.getConstructedModel();
|
customLock.lock();
|
||||||
ConstructedModelTracker.trackModel(
|
ModelConstructor model = new OrganizationToPublicationsForSubOrganizationsModelConstructor(uri, dataset);
|
||||||
ConstructedModelTracker
|
|
||||||
.generateModelIdentifier(
|
Model constructedModel = model.getConstructedModel();
|
||||||
uri,
|
ConstructedModelTracker.trackModel(
|
||||||
OrganizationToPublicationsForSubOrganizationsModelConstructor.MODEL_TYPE),
|
ConstructedModelTracker
|
||||||
constructedModel);
|
.generateModelIdentifier(
|
||||||
|
uri,
|
||||||
return constructedModel;
|
OrganizationToPublicationsForSubOrganizationsModelConstructor.MODEL_TYPE),
|
||||||
|
constructedModel);
|
||||||
|
customLock.unlock();
|
||||||
|
return constructedModel;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
log.info("The Model construction process is going on");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
package edu.cornell.mannlib.vitro.webapp.visualization.visutils;
|
||||||
|
|
||||||
|
import java.util.concurrent.locks.ReentrantLock;
|
||||||
|
import java.util.concurrent.locks.Lock;
|
||||||
|
|
||||||
|
|
||||||
|
/* This class is a singleton implementation for locking the concurrent
|
||||||
|
construction of the models to resolve concurrency issue*/
|
||||||
|
|
||||||
|
public final class CustomLock{
|
||||||
|
private static final CustomLock instance = new CustomLock();
|
||||||
|
private static Lock lock;
|
||||||
|
private CustomLock()
|
||||||
|
{
|
||||||
|
this.lock = new ReentrantLock();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static CustomLock getInstance()
|
||||||
|
{
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Lock getLock()
|
||||||
|
{
|
||||||
|
return lock;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue