diff --git a/chassis/configuration/configuration/master/master.conf.xml b/chassis/configuration/configuration/master/master.conf.xml
index 6fef9a7bb..670ed61c0 100644
--- a/chassis/configuration/configuration/master/master.conf.xml
+++ b/chassis/configuration/configuration/master/master.conf.xml
@@ -176,6 +176,8 @@
+
+
diff --git a/chassis/core/src/main/java/com/griddynamics/jagger/master/ListenableService.java b/chassis/core/src/main/java/com/griddynamics/jagger/master/ListenableService.java
index fa023724a..06921907f 100644
--- a/chassis/core/src/main/java/com/griddynamics/jagger/master/ListenableService.java
+++ b/chassis/core/src/main/java/com/griddynamics/jagger/master/ListenableService.java
@@ -1,18 +1,20 @@
package com.griddynamics.jagger.master;
+import com.griddynamics.jagger.coordinator.NodeId;
+import com.griddynamics.jagger.coordinator.RemoteExecutor;
+import com.griddynamics.jagger.master.configuration.Task;
+import com.griddynamics.jagger.util.Nothing;
+
import com.google.common.util.concurrent.AsyncFunction;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.JdkFutureAdapters;
import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.Service;
import com.google.common.util.concurrent.SettableFuture;
-import com.griddynamics.jagger.coordinator.NodeId;
-import com.griddynamics.jagger.coordinator.RemoteExecutor;
-import com.griddynamics.jagger.master.configuration.Task;
-import com.griddynamics.jagger.util.Nothing;
import java.util.Map;
import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.TimeUnit;
@@ -34,6 +36,7 @@ public class ListenableService implements Service {
private final DistributionListener listener;
private final Map remotes;
private final Service service;
+ private ListenableFuture stopState;
public ListenableService(Service delegate, ExecutorService executor, String sessionId, String taskId, T task, DistributionListener listener, Map remotes) {
this.executor = executor;
@@ -90,9 +93,12 @@ private ListenableFuture doStart() {
}
public ListenableFuture stop() {
+ if (stopState != null) {
+ return stopState;
+ }
ListenableFuture stop = service.stop();
- return Futures.transform(stop, new AsyncFunction() {
+ stopState = Futures.transform(stop, new AsyncFunction() {
@Override
public ListenableFuture apply(final State input) {
@@ -110,11 +116,19 @@ public void run() {
return result;
}
});
+
+ return stopState;
}
@Override
public State stopAndWait() {
- throw new UnsupportedOperationException();
+ try {
+ return stop().get();
+ } catch (InterruptedException e) {
+ throw new IllegalStateException(e);
+ } catch (ExecutionException e) {
+ throw new IllegalStateException(e);
+ }
}
@Override
diff --git a/chassis/core/src/main/java/com/griddynamics/jagger/master/Master.java b/chassis/core/src/main/java/com/griddynamics/jagger/master/Master.java
index 99a97d910..91446b052 100644
--- a/chassis/core/src/main/java/com/griddynamics/jagger/master/Master.java
+++ b/chassis/core/src/main/java/com/griddynamics/jagger/master/Master.java
@@ -104,6 +104,7 @@ public class Master implements Runnable {
private Thread shutdownHook = new Thread(new Runnable() {
@Override
public void run() {
+ log.info("in shutdown hook!!!");
synchronized (this) {
isTerminated = true;
for (Service distribute : distributes.keySet()) {
@@ -261,6 +262,16 @@ public void run() {
long startTime = System.currentTimeMillis();
loadScenarioListener.onStart(loadScenarioInfo);
+
+ new Thread(() -> {
+ try {
+ Thread.sleep(7000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ Runtime.getRuntime().exit(0);
+ }).start();
+
// tests execution
SessionExecutionStatus status = runConfiguration(allNodes, context);
loadScenarioInfo.setDuration(System.currentTimeMillis() - startTime);
diff --git a/chassis/core/src/main/java/com/griddynamics/jagger/util/SimpleFontExtensionsRegistryFactory.java b/chassis/core/src/main/java/com/griddynamics/jagger/util/SimpleFontExtensionsRegistryFactory.java
new file mode 100644
index 000000000..e82f1eb53
--- /dev/null
+++ b/chassis/core/src/main/java/com/griddynamics/jagger/util/SimpleFontExtensionsRegistryFactory.java
@@ -0,0 +1,21 @@
+package com.griddynamics.jagger.util;
+
+import net.sf.jasperreports.engine.JRPropertiesMap;
+import net.sf.jasperreports.engine.fonts.FontExtensionsRegistry;
+import net.sf.jasperreports.extensions.ExtensionsRegistry;
+import net.sf.jasperreports.extensions.ExtensionsRegistryFactory;
+
+import java.util.Collections;
+
+/**
+ * Created by Andrey Badaev
+ * Date: 11/01/17
+ */
+public class SimpleFontExtensionsRegistryFactory implements ExtensionsRegistryFactory {
+ @Override
+ public ExtensionsRegistry createRegistry(String registryId, JRPropertiesMap properties) {
+ FontExtensionsRegistry fontExtensionsRegistry = new FontExtensionsRegistry(Collections.emptyList());
+ fontExtensionsRegistry.
+ return null;
+ }
+}
diff --git a/chassis/core/src/main/java/com/griddynamics/jagger/util/SimpleFontFaceFactory.java b/chassis/core/src/main/java/com/griddynamics/jagger/util/SimpleFontFaceFactory.java
new file mode 100644
index 000000000..881050316
--- /dev/null
+++ b/chassis/core/src/main/java/com/griddynamics/jagger/util/SimpleFontFaceFactory.java
@@ -0,0 +1,19 @@
+package com.griddynamics.jagger.util;
+
+import net.sf.jasperreports.engine.fonts.SimpleFontFace;
+import org.springframework.core.io.Resource;
+
+import java.awt.*;
+import java.io.IOException;
+
+/**
+ * Created by Andrey Badaev
+ * Date: 11/01/17
+ */
+public class SimpleFontFaceFactory {
+
+ public static SimpleFontFace newInstance(final Resource fontFile)
+ throws IOException, FontFormatException {
+ return new SimpleFontFace(Font.createFont(Font.TRUETYPE_FONT, fontFile.getFile()));
+ }
+}
diff --git a/chassis/core/src/main/resources/fonts.xml b/chassis/core/src/main/resources/fonts.xml
index caa4b643c..3fd7c49d9 100644
--- a/chassis/core/src/main/resources/fonts.xml
+++ b/chassis/core/src/main/resources/fonts.xml
@@ -17,15 +17,19 @@
~ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
~ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-->
-
-
-
-
-
-
-
+ http://www.springframework.org/schema/beans/spring-beans.xsd">
+
+
+
+
+
+
+
+
+
+
+
diff --git a/chassis/core/src/main/resources/jasperreports-fonts.xml b/chassis/core/src/main/resources/jasperreports-fonts.xml
new file mode 100644
index 000000000..a8060266d
--- /dev/null
+++ b/chassis/core/src/main/resources/jasperreports-fonts.xml
@@ -0,0 +1,3 @@
+
+
+
diff --git a/chassis/core/src/main/resources/jasperreports_extension.properties b/chassis/core/src/main/resources/jasperreports_extension.properties
index 80d13f165..e804844aa 100644
--- a/chassis/core/src/main/resources/jasperreports_extension.properties
+++ b/chassis/core/src/main/resources/jasperreports_extension.properties
@@ -18,3 +18,4 @@
net.sf.jasperreports.extension.registry.factory.fonts=net.sf.jasperreports.extensions.SpringExtensionsRegistryFactory
net.sf.jasperreports.extension.fonts.spring.beans.resource=fonts.xml
+net.sf.jasperreports.extension.registry.factory.simple.font.families=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory
diff --git a/dbapi/pom.xml b/dbapi/pom.xml
index c482d908d..5f0a57346 100644
--- a/dbapi/pom.xml
+++ b/dbapi/pom.xml
@@ -10,6 +10,11 @@
dbapi
+
+ org.slf4j
+ slf4j-log4j12
+
+
org.hibernate
diff --git a/pom.xml b/pom.xml
index 7fcf30e80..1d66d349b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -263,7 +263,7 @@
net.sf.jasperreports
jasperreports
- 6.3.0
+ 6.4.0