added reset parameters
git-svn-id: http://svn.d4science-ii.research-infrastructures.eu/gcube/trunk/portlets/user/uri-resolver-manager@100816 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
parent
982b70f25a
commit
025ac2c19b
|
@ -3,10 +3,11 @@
|
||||||
*/
|
*/
|
||||||
package org.gcube.portlets.user.uriresolvermanager;
|
package org.gcube.portlets.user.uriresolvermanager;
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.Timer;
|
||||||
|
import java.util.TimerTask;
|
||||||
|
|
||||||
import org.gcube.common.scope.api.ScopeProvider;
|
import org.gcube.common.scope.api.ScopeProvider;
|
||||||
import org.gcube.portlets.user.uriresolvermanager.entity.ServiceParameter;
|
import org.gcube.portlets.user.uriresolvermanager.entity.ServiceParameter;
|
||||||
|
@ -27,12 +28,35 @@ import org.slf4j.LoggerFactory;
|
||||||
public class UriResolverManager {
|
public class UriResolverManager {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static int RESET_DELAY = 10*60*1000; //10 MINUTES
|
||||||
|
public static int RESET_TIME = RESET_DELAY; //10 MINUTES
|
||||||
|
|
||||||
private UriResolverMapReader uriResolverMapReader;
|
private UriResolverMapReader uriResolverMapReader;
|
||||||
private Map<String, String> applicationTypes;
|
private Map<String, String> applicationTypes;
|
||||||
private String scope;
|
private String scope;
|
||||||
private String applicationType;
|
private String applicationType;
|
||||||
private RuntimeResourceReader reader;
|
private RuntimeResourceReader reader;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A lock to prevent reader = null;
|
||||||
|
*/
|
||||||
|
private int usingReader = 0;
|
||||||
|
|
||||||
|
public synchronized void lockReader() {
|
||||||
|
usingReader++;
|
||||||
|
}
|
||||||
|
|
||||||
|
public synchronized void releaseReader() {
|
||||||
|
usingReader--;
|
||||||
|
}
|
||||||
|
|
||||||
|
public synchronized int countReaders() {
|
||||||
|
return usingReader;
|
||||||
|
}
|
||||||
|
|
||||||
public static final Logger logger = LoggerFactory.getLogger(UriResolverManager.class);
|
public static final Logger logger = LoggerFactory.getLogger(UriResolverManager.class);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -62,7 +86,7 @@ public class UriResolverManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
this.applicationType = applicationType;
|
this.applicationType = applicationType;
|
||||||
|
this.reloadRuntimeResourceParameter(RESET_DELAY, RESET_TIME);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -85,6 +109,8 @@ public class UriResolverManager {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
|
lockReader();
|
||||||
|
|
||||||
if(reader==null){
|
if(reader==null){
|
||||||
logger.info("Runtime Resource Reader is null, istancing...");
|
logger.info("Runtime Resource Reader is null, istancing...");
|
||||||
ScopeProvider.instance.set(this.scope);
|
ScopeProvider.instance.set(this.scope);
|
||||||
|
@ -104,6 +130,8 @@ public class UriResolverManager {
|
||||||
|
|
||||||
String baseURI = reader.getServiceBaseURI();
|
String baseURI = reader.getServiceBaseURI();
|
||||||
|
|
||||||
|
releaseReader();
|
||||||
|
|
||||||
String params = UrlEncoderUtil.encodeQuery(parameters);
|
String params = UrlEncoderUtil.encodeQuery(parameters);
|
||||||
link = baseURI+"?"+params;
|
link = baseURI+"?"+params;
|
||||||
logger.info("Created HTTP URI request (link): "+link);
|
logger.info("Created HTTP URI request (link): "+link);
|
||||||
|
@ -142,4 +170,26 @@ public class UriResolverManager {
|
||||||
public Map<String, String> getCapabilities(){
|
public Map<String, String> getCapabilities(){
|
||||||
return this.applicationTypes;
|
return this.applicationTypes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public void reloadRuntimeResourceParameter(long delay, long period) {
|
||||||
|
Timer timer = new Timer(true);
|
||||||
|
|
||||||
|
timer.schedule(new TimerTask() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
logger.info("Timer Reset Runtime Resource running..");
|
||||||
|
int counters = countReaders();
|
||||||
|
if(counters==0){
|
||||||
|
logger.info("Reader not locked, resetting");
|
||||||
|
reader = null;
|
||||||
|
}else
|
||||||
|
logger.info("Reader locked, counters is/are:"+counters+", skipping");
|
||||||
|
|
||||||
|
}
|
||||||
|
}, delay, period);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,7 +18,7 @@ import org.junit.Test;
|
||||||
*/
|
*/
|
||||||
public class UriResolverTest {
|
public class UriResolverTest {
|
||||||
|
|
||||||
@Test
|
// @Test
|
||||||
public void test() {
|
public void test() {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -37,5 +37,56 @@ public class UriResolverTest {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Thread safe
|
||||||
|
*/
|
||||||
|
// @Test
|
||||||
|
public void test2(){
|
||||||
|
|
||||||
|
|
||||||
|
//create thread to print counter value
|
||||||
|
Thread t = new Thread(new Runnable() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
while (true) {
|
||||||
|
try {
|
||||||
|
|
||||||
|
ScopeProvider.instance.set("/gcube/devsec/devVRE");
|
||||||
|
UriResolverManager resolver;
|
||||||
|
resolver = new UriResolverManager("GIS");
|
||||||
|
|
||||||
|
Map<String, String> params = new HashMap<String, String>();
|
||||||
|
params.put("gis-UUID", "eb1a1b63-f324-47ee-9522-b8f5803e19ec");
|
||||||
|
params.put("scope", "/gcube/devsec/devVRE");
|
||||||
|
String shortLink = resolver.getLink(params, true);
|
||||||
|
System.out.println(shortLink); //true, link is shorted otherwise none
|
||||||
|
|
||||||
|
System.out.println("Thread "+Thread.currentThread().getId() +"reading counter is: " + resolver.countReaders());
|
||||||
|
Thread.sleep(1000);
|
||||||
|
} catch (InterruptedException ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}catch (UriResolverMapException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
t.start();
|
||||||
|
|
||||||
|
try {
|
||||||
|
Thread.sleep(500000);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue