diff --git a/src/main/java/org/gcube/smartgears/configuration/application/ApplicationConfiguration.java b/src/main/java/org/gcube/smartgears/configuration/application/ApplicationConfiguration.java index 50bbaff..6b2a9ec 100644 --- a/src/main/java/org/gcube/smartgears/configuration/application/ApplicationConfiguration.java +++ b/src/main/java/org/gcube/smartgears/configuration/application/ApplicationConfiguration.java @@ -2,6 +2,7 @@ package org.gcube.smartgears.configuration.application; import java.util.Set; +import org.gcube.smartgears.configuration.ProxyAddress; import org.gcube.smartgears.persistence.PersistenceWriter; /** @@ -19,7 +20,11 @@ public interface ApplicationConfiguration { */ String context(); - boolean proxied(); + boolean proxable(); + + ProxyAddress proxyAddress(); + + ApplicationConfiguration proxyAddress(ProxyAddress proxy); /** * Sets the context path of the application diff --git a/src/main/java/org/gcube/smartgears/configuration/application/BridgedApplicationConfiguration.java b/src/main/java/org/gcube/smartgears/configuration/application/BridgedApplicationConfiguration.java index 9bea447..8028765 100644 --- a/src/main/java/org/gcube/smartgears/configuration/application/BridgedApplicationConfiguration.java +++ b/src/main/java/org/gcube/smartgears/configuration/application/BridgedApplicationConfiguration.java @@ -1,8 +1,11 @@ package org.gcube.smartgears.configuration.application; +import java.io.File; import java.util.Set; +import org.gcube.smartgears.configuration.ProxyAddress; import org.gcube.smartgears.configuration.container.ContainerConfiguration; +import org.gcube.smartgears.persistence.LocalPersistence; import org.gcube.smartgears.persistence.PersistenceWriter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -25,11 +28,20 @@ public class BridgedApplicationConfiguration implements ApplicationConfiguration if (application.persistence()==null) { - application.persistence(container.persistence()); + String location = container.persistence().getLocation()+"/"+application.name(); + File dir = new File(location); + if (!dir.exists()) + dir.mkdirs(); + + application.persistence(new LocalPersistence(location)); + + log.trace("setting persistence location for {} @ {}",application.name(), dir.getAbsolutePath()); - log.trace("setting persistence location for {} the same as the container persistence",application.name()); } + if (application.proxable() && container.proxy()!=null) + application.proxyAddress(container.proxy()); + } public ApplicationConfiguration inner() { @@ -110,8 +122,8 @@ public class BridgedApplicationConfiguration implements ApplicationConfiguration @Override - public boolean proxied() { - return application.proxied(); + public boolean proxable() { + return application.proxable(); } @Override @@ -124,4 +136,14 @@ public class BridgedApplicationConfiguration implements ApplicationConfiguration return application.includes(includes); } + @Override + public ProxyAddress proxyAddress() { + return application.proxyAddress(); + } + + @Override + public ApplicationConfiguration proxyAddress(ProxyAddress proxy) { + return proxyAddress(proxy); + } + } diff --git a/src/main/java/org/gcube/smartgears/configuration/application/DefaultApplicationConfiguration.java b/src/main/java/org/gcube/smartgears/configuration/application/DefaultApplicationConfiguration.java index e091b3b..94248e6 100644 --- a/src/main/java/org/gcube/smartgears/configuration/application/DefaultApplicationConfiguration.java +++ b/src/main/java/org/gcube/smartgears/configuration/application/DefaultApplicationConfiguration.java @@ -18,6 +18,7 @@ import org.gcube.common.validator.ValidatorFactory; import org.gcube.common.validator.annotations.IsValid; import org.gcube.common.validator.annotations.NotNull; import org.gcube.smartgears.configuration.ProxyAddress; +import org.gcube.smartgears.persistence.LocalPersistence; import org.gcube.smartgears.persistence.PersistenceWriter; /** @@ -34,8 +35,8 @@ public class DefaultApplicationConfiguration implements ApplicationConfiguration String context; - @XmlAttribute(name = "proxied") - private boolean proxied = true; + @XmlAttribute(name = "proxable") + private boolean proxable = true; @XmlElement(name="name" , required=true) @NotNull @@ -58,9 +59,13 @@ public class DefaultApplicationConfiguration implements ApplicationConfiguration @XmlElementRef Set includes= new LinkedHashSet(); + @XmlElementRef(type=LocalPersistence.class) @NotNull @IsValid private PersistenceWriter persistenceManager; + @IsValid + ProxyAddress proxyAddress; + @Override public Set excludes() { return excludes; @@ -144,10 +149,21 @@ public class DefaultApplicationConfiguration implements ApplicationConfiguration } @Override - public boolean proxied() { - return proxied; + public boolean proxable() { + return proxable; } - + + public ProxyAddress proxyAddress() { + return proxyAddress; + } + + + public ApplicationConfiguration proxyAddress(ProxyAddress proxyAddress) { + this.proxyAddress = proxyAddress; + return this; + } + + @Override public PersistenceWriter persistence() { return persistenceManager; diff --git a/src/main/java/org/gcube/smartgears/handlers/application/lifecycle/ApplicationProfileManager.java b/src/main/java/org/gcube/smartgears/handlers/application/lifecycle/ApplicationProfileManager.java index 6c28f86..742631b 100644 --- a/src/main/java/org/gcube/smartgears/handlers/application/lifecycle/ApplicationProfileManager.java +++ b/src/main/java/org/gcube/smartgears/handlers/application/lifecycle/ApplicationProfileManager.java @@ -207,8 +207,10 @@ public class ApplicationProfileManager extends ApplicationLifecycleHandler { context.events().fire(context,changed); } }; - - periodicUpdates = Utils.scheduledServicePool.scheduleAtFixedRate(updateTask, Constants.application_republish_frequency_in_minutes, Constants.application_republish_frequency_in_minutes , TimeUnit.MINUTES); + + periodicUpdates = Utils.scheduledServicePool.scheduleAtFixedRate(updateTask, + Constants.application_republish_frequency_in_minutes, + Constants.application_republish_frequency_in_minutes , TimeUnit.MINUTES); } diff --git a/src/main/java/org/gcube/smartgears/persistence/LocalPersistence.java b/src/main/java/org/gcube/smartgears/persistence/LocalPersistence.java index e298a53..49a9026 100644 --- a/src/main/java/org/gcube/smartgears/persistence/LocalPersistence.java +++ b/src/main/java/org/gcube/smartgears/persistence/LocalPersistence.java @@ -8,12 +8,19 @@ import java.io.File; import java.nio.file.Files; import java.nio.file.Paths; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlRootElement; + import org.gcube.common.validator.annotations.NotEmpty; import org.gcube.common.validator.annotations.NotNull; +@XmlRootElement(name="persistence") +@XmlAccessorType(XmlAccessType.FIELD) public class LocalPersistence implements PersistenceWriter { - @NotNull @NotEmpty + @XmlAttribute(name="location") @NotNull @NotEmpty private String location; protected LocalPersistence() {}