perfsonar-dev - [pS-dev] [GEANT/SA2/ps-java-services] r6438 - in trunk: parent perfsonar-base/apt/src/test/java/net/ge ant/perfsonar/annotations/selftest perfsonar-base/base/src /main/java/net/geant/perfsonar perfsonar-base/base/src/mai n/java/net/geant/perfsonar/response perfsonar-base/base/sr c/main/java/net/geant/perfsonar/selftest perfsonar-base/ls /src/main/java/net/geant/perfsonar/ls perfsonar-base/ls/sr c/test/java/net/geant/perfsonar/ls perfsonar-base/messagin g perfsonar-base/messaging/src/main/java/net/geant/perfson ar/messaging perfsonar-base/messaging/src/main/java/net/ge ant/perfsonar/templates perfsonar-base/messaging/src/test/ java/net/geant/perfsonar perfsonar-base/messaging/src/test /java/net/geant/perfsonar/templates perfsonar-base/sample- service/src/test/java/net/geant/perfsonar/mp/sshtelnet per fsonar-java-rrd-ma-base3 perfsonar-java-rrd-ma-base3/src/m ain/java/net/geant/perfsonar/ma perfsonar-java-web-admin/w eb-admin-component perfsonar-java-web-admin/web-admin-exam pleservice
Subject: perfsonar development work
List archive
[pS-dev] [GEANT/SA2/ps-java-services] r6438 - in trunk: parent perfsonar-base/apt/src/test/java/net/ge ant/perfsonar/annotations/selftest perfsonar-base/base/src /main/java/net/geant/perfsonar perfsonar-base/base/src/mai n/java/net/geant/perfsonar/response perfsonar-base/base/sr c/main/java/net/geant/perfsonar/selftest perfsonar-base/ls /src/main/java/net/geant/perfsonar/ls perfsonar-base/ls/sr c/test/java/net/geant/perfsonar/ls perfsonar-base/messagin g perfsonar-base/messaging/src/main/java/net/geant/perfson ar/messaging perfsonar-base/messaging/src/main/java/net/ge ant/perfsonar/templates perfsonar-base/messaging/src/test/ java/net/geant/perfsonar perfsonar-base/messaging/src/test /java/net/geant/perfsonar/templates perfsonar-base/sample- service/src/test/java/net/geant/perfsonar/mp/sshtelnet per fsonar-java-rrd-ma-base3 perfsonar-java-rrd-ma-base3/src/m ain/java/net/geant/perfsonar/ma perfsonar-java-web-admin/w eb-admin-component perfsonar-java-web-admin/web-admin-exam pleservice
Chronological Thread
- From:
- To:
- Subject: [pS-dev] [GEANT/SA2/ps-java-services] r6438 - in trunk: parent perfsonar-base/apt/src/test/java/net/ge ant/perfsonar/annotations/selftest perfsonar-base/base/src /main/java/net/geant/perfsonar perfsonar-base/base/src/mai n/java/net/geant/perfsonar/response perfsonar-base/base/sr c/main/java/net/geant/perfsonar/selftest perfsonar-base/ls /src/main/java/net/geant/perfsonar/ls perfsonar-base/ls/sr c/test/java/net/geant/perfsonar/ls perfsonar-base/messagin g perfsonar-base/messaging/src/main/java/net/geant/perfson ar/messaging perfsonar-base/messaging/src/main/java/net/ge ant/perfsonar/templates perfsonar-base/messaging/src/test/ java/net/geant/perfsonar perfsonar-base/messaging/src/test /java/net/geant/perfsonar/templates perfsonar-base/sample- service/src/test/java/net/geant/perfsonar/mp/sshtelnet per fsonar-java-rrd-ma-base3 perfsonar-java-rrd-ma-base3/src/m ain/java/net/geant/perfsonar/ma perfsonar-java-web-admin/w eb-admin-component perfsonar-java-web-admin/web-admin-exam pleservice
- Date: Sat, 29 Jun 2013 20:57:17 +0100 (BST)
- Authentication-results: sfpop-ironport04.merit.edu; dkim=neutral (message not signed) header.i=none
Author: dante.delvaux
Date: 2013-06-29 20:57:17 +0100 (Sat, 29 Jun 2013)
New Revision: 6438
Added:
trunk/perfsonar-base/messaging/src/main/java/net/geant/perfsonar/templates/VelocityEngineSingleton.java
trunk/perfsonar-base/messaging/src/test/java/net/geant/perfsonar/AsynchTester.java
Removed:
trunk/perfsonar-java-rrd-ma-base3/src/main/java/net/geant/perfsonar/ma/RRDMAService.java
trunk/perfsonar-java-rrd-ma-base3/src/main/java/net/geant/perfsonar/ma/RRDMAServiceController.java
Modified:
trunk/parent/pom.xml
trunk/perfsonar-base/apt/src/test/java/net/geant/perfsonar/annotations/selftest/SelfTestProcessorTest.java
trunk/perfsonar-base/base/src/main/java/net/geant/perfsonar/PerfSONAR.java
trunk/perfsonar-base/base/src/main/java/net/geant/perfsonar/response/EchoResponse.java
trunk/perfsonar-base/base/src/main/java/net/geant/perfsonar/response/SelfTestResponse.java
trunk/perfsonar-base/base/src/main/java/net/geant/perfsonar/selftest/SelfTest.java
trunk/perfsonar-base/ls/src/main/java/net/geant/perfsonar/ls/LSRegistrationTask.java
trunk/perfsonar-base/ls/src/test/java/net/geant/perfsonar/ls/LSRegisterTestBase.java
trunk/perfsonar-base/messaging/
trunk/perfsonar-base/messaging/src/main/java/net/geant/perfsonar/messaging/SelfTestResult.java
trunk/perfsonar-base/messaging/src/main/java/net/geant/perfsonar/messaging/XPathDeserializer.java
trunk/perfsonar-base/messaging/src/main/java/net/geant/perfsonar/templates/TemplateEngine.java
trunk/perfsonar-base/messaging/src/test/java/net/geant/perfsonar/templates/TemplateEngineTest.java
trunk/perfsonar-base/sample-service/src/test/java/net/geant/perfsonar/mp/sshtelnet/ConfigurationFileCheckerTest.java
trunk/perfsonar-java-rrd-ma-base3/pom.xml
trunk/perfsonar-java-web-admin/web-admin-component/pom.xml
trunk/perfsonar-java-web-admin/web-admin-exampleservice/pom.xml
Log:
pSbase3:
- removing all static TemplateEngine references, only the VelocityEngine
should be a singleton (adding a new enum class for it)
- adding an AsynchTester class to test pSbase3 components under different
concurrent threads (only used in for the TemplateEngine test for now, but to
be generalised)
Modified: trunk/parent/pom.xml
===================================================================
--- trunk/parent/pom.xml 2013-06-27 20:35:43 UTC (rev 6437)
+++ trunk/parent/pom.xml 2013-06-29 19:57:17 UTC (rev 6438)
@@ -549,6 +549,7 @@
<scope>test</scope>
</dependency>
<dependency>
+ <!-- This one needs to be inline with the httpcore and
httpclient in web-admin-component -->
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-bundle</artifactId>
<version>2.7.5</version>
Modified:
trunk/perfsonar-base/apt/src/test/java/net/geant/perfsonar/annotations/selftest/SelfTestProcessorTest.java
===================================================================
---
trunk/perfsonar-base/apt/src/test/java/net/geant/perfsonar/annotations/selftest/SelfTestProcessorTest.java
2013-06-27 20:35:43 UTC (rev 6437)
+++
trunk/perfsonar-base/apt/src/test/java/net/geant/perfsonar/annotations/selftest/SelfTestProcessorTest.java
2013-06-29 19:57:17 UTC (rev 6438)
@@ -48,8 +48,10 @@
}
};
+ // To collect SelfTest results
private final SelfTestLoggerHelper mySTLogger = new
SelfTestLoggerHelper();
+ // To get class path for annotations generated classes
private static String[] getClassPath() {
final List<String> result = new ArrayList<String>();
for (String path :
System.getProperty("java.class.path").split(File.pathSeparator)) {
Modified:
trunk/perfsonar-base/base/src/main/java/net/geant/perfsonar/PerfSONAR.java
===================================================================
---
trunk/perfsonar-base/base/src/main/java/net/geant/perfsonar/PerfSONAR.java
2013-06-27 20:35:43 UTC (rev 6437)
+++
trunk/perfsonar-base/base/src/main/java/net/geant/perfsonar/PerfSONAR.java
2013-06-29 19:57:17 UTC (rev 6438)
@@ -44,7 +44,6 @@
private static int defaultThreadPoolSize = 10;
protected Logger logger = LoggerFactory.getLogger(getClass());
-
protected Scheduler scheduler = createThreadPool();
protected boolean usingAPT = false;
@@ -213,21 +212,22 @@
}
logger.trace("Preparing the response: adding service info and
request Id");
- TemplateEngine.put("serviceType", getServiceType());
- TemplateEngine.put("serviceName", getServiceName());
- TemplateEngine.put("requestId", msg.getId());
+ final TemplateEngine te = new TemplateEngine();
+ te.put("serviceType", getServiceType());
+ te.put("serviceName", getServiceName());
+ te.put("requestId", msg.getId());
try {
if (m.getParameterTypes().length < 1) {
logger.trace("Computing the response: invoking the handler
{}", m.getDeclaringClass());
- TemplateEngine.put("result",
m.invoke(m.getDeclaringClass().newInstance()));
+ te.put("result",
m.invoke(m.getDeclaringClass().newInstance()));
} else {
final List<Object> result = new ArrayList<Object>();
for (Object obj :
deserializer.getObjects(m.getParameterTypes()[0], objects)) {
logger.trace("Computing the response: invoking the
handler {} for {}", m.getDeclaringClass(), obj);
result.add(m.invoke(m.getDeclaringClass().newInstance(),
obj));
}
- TemplateEngine.put("result", result);
+ te.put("result", result);
}
} catch (InvocationTargetException ex) {
logger.error("Cannot invoke " + msgType + " on " +
m.getDeclaringClass());
@@ -242,7 +242,7 @@
try {
final String myTemplate = msgType.replace("Request",
"Response.template");
logger.trace("Building the response: evaluating {} of {}",
myTemplate, m.getDeclaringClass());
- TemplateEngine.evaluate(writer, m.getDeclaringClass(),
myTemplate);
+ te.evaluate(writer, m.getDeclaringClass(), myTemplate);
writer.flush();
writer.close();
logger.trace("Full response is built: \n{}", writer.toString());
Modified:
trunk/perfsonar-base/base/src/main/java/net/geant/perfsonar/response/EchoResponse.java
===================================================================
---
trunk/perfsonar-base/base/src/main/java/net/geant/perfsonar/response/EchoResponse.java
2013-06-27 20:35:43 UTC (rev 6437)
+++
trunk/perfsonar-base/base/src/main/java/net/geant/perfsonar/response/EchoResponse.java
2013-06-29 19:57:17 UTC (rev 6438)
@@ -17,8 +17,9 @@
}
public static void writeEcho(Writer writer, String requestId) throws
PerfSONARException {
- TemplateEngine.put("requestId", requestId);
- TemplateEngine.evaluate(writer, EchoResponse.class,
"EchoResponse.template");
+ final TemplateEngine te = new TemplateEngine();
+ te.put("requestId", requestId);
+ te.evaluate(writer, EchoResponse.class, "EchoResponse.template");
}
}
Modified:
trunk/perfsonar-base/base/src/main/java/net/geant/perfsonar/response/SelfTestResponse.java
===================================================================
---
trunk/perfsonar-base/base/src/main/java/net/geant/perfsonar/response/SelfTestResponse.java
2013-06-27 20:35:43 UTC (rev 6437)
+++
trunk/perfsonar-base/base/src/main/java/net/geant/perfsonar/response/SelfTestResponse.java
2013-06-29 19:57:17 UTC (rev 6438)
@@ -16,32 +16,33 @@
*/
public class SelfTestResponse implements SelfTestLogger {
private Writer writer;
+ private final TemplateEngine te = new TemplateEngine();
public SelfTestResponse(ServiceType serviceType, String serviceName)
throws Exception {
- TemplateEngine.put("serviceType", serviceType);
- TemplateEngine.put("serviceName", serviceName);
+ te.put("serviceType", serviceType);
+ te.put("serviceName", serviceName);
}
public void begin(Writer writer, String requestId) throws
PerfSONARException {
this.writer = writer;
- TemplateEngine.put("requestId", requestId);
- TemplateEngine.evaluate(writer, SelfTestResponse.class,
"SelfTest_header.template");
+ te.put("requestId", requestId);
+ te.evaluate(writer, SelfTestResponse.class,
"SelfTest_header.template");
}
public void end() throws PerfSONARException {
- TemplateEngine.evaluate(writer, SelfTestResponse.class,
"SelfTest_footer.template");
+ te.evaluate(writer, SelfTestResponse.class,
"SelfTest_footer.template");
writer = null;
}
public void success(String name, String successMessage, Logger logger)
throws PerfSONARException {
- TemplateEngine.put("name", name);
- TemplateEngine.put("message", successMessage);
- TemplateEngine.evaluate(writer, SelfTestResponse.class,
"SelfTest_success.template");
+ te.put("name", name);
+ te.put("message", successMessage);
+ te.evaluate(writer, SelfTestResponse.class,
"SelfTest_success.template");
}
public void failure(String name, String message, Logger logger) throws
PerfSONARException {
- TemplateEngine.put("name", name);
- TemplateEngine.put("message", message);
- TemplateEngine.evaluate(writer, SelfTestResponse.class,
"SelfTest_failure.template");
+ te.put("name", name);
+ te.put("message", message);
+ te.evaluate(writer, SelfTestResponse.class,
"SelfTest_failure.template");
}
}
Modified:
trunk/perfsonar-base/base/src/main/java/net/geant/perfsonar/selftest/SelfTest.java
===================================================================
---
trunk/perfsonar-base/base/src/main/java/net/geant/perfsonar/selftest/SelfTest.java
2013-06-27 20:35:43 UTC (rev 6437)
+++
trunk/perfsonar-base/base/src/main/java/net/geant/perfsonar/selftest/SelfTest.java
2013-06-29 19:57:17 UTC (rev 6438)
@@ -61,9 +61,10 @@
}
private String fillInTemplate(String template, int i, Object arg) {
- TemplateEngine.put("index", i);
- TemplateEngine.put("arg", arg);
- return TemplateEngine.evaluate(template);
+ final TemplateEngine te = new TemplateEngine();
+ te.put("index", i);
+ te.put("arg", arg);
+ return te.evaluate(template);
}
private Object newInstance(Method m) throws InstantiationException,
IllegalAccessException {
Modified:
trunk/perfsonar-base/ls/src/main/java/net/geant/perfsonar/ls/LSRegistrationTask.java
===================================================================
---
trunk/perfsonar-base/ls/src/main/java/net/geant/perfsonar/ls/LSRegistrationTask.java
2013-06-27 20:35:43 UTC (rev 6437)
+++
trunk/perfsonar-base/ls/src/main/java/net/geant/perfsonar/ls/LSRegistrationTask.java
2013-06-29 19:57:17 UTC (rev 6438)
@@ -145,10 +145,11 @@
try {
if (keys != null && keys.get(address) == null) {
logger.debug("Registering {} to {}",
service.getServiceName(), address);
- TemplateEngine.put("requestId", "request1");
- TemplateEngine.put("result",
m.invoke(m.getDeclaringClass().newInstance()));
- TemplateEngine.put("service", service);
- TemplateEngine.evaluate(writer,
m.getDeclaringClass(), "LSRegister.template");
+ final TemplateEngine te = new TemplateEngine();
+ te.put("requestId", "request1");
+ te.put("result",
m.invoke(m.getDeclaringClass().newInstance()));
+ te.put("service", service);
+ te.evaluate(writer, m.getDeclaringClass(),
"LSRegister.template");
} else {
logger.debug("Sending KeepAlive for {} to {}",
service.getServiceName(), address);
writer.write(getKeepAliveMessage(keys.get(address)));
Modified:
trunk/perfsonar-base/ls/src/test/java/net/geant/perfsonar/ls/LSRegisterTestBase.java
===================================================================
---
trunk/perfsonar-base/ls/src/test/java/net/geant/perfsonar/ls/LSRegisterTestBase.java
2013-06-27 20:35:43 UTC (rev 6437)
+++
trunk/perfsonar-base/ls/src/test/java/net/geant/perfsonar/ls/LSRegisterTestBase.java
2013-06-29 19:57:17 UTC (rev 6438)
@@ -53,12 +53,13 @@
@Test
public void shouldRegisterToLookupService() throws Exception {
//FIXME: this *sometimes* throws IOExceptions and sometimes the test
fails because no keepAlive are being sent
- logger.debug("•••• Checking registration to LS.");
- //FIXME: we sleep 10 times we need to do a registration, that should
be enough, still, the registration thread can get stuck...
- Thread.sleep(getLSInterval() * 10);
+ logger.info("•••• Checking registration to LS.");
+ //FIXME: we sleep 5 times we need to do a registration and sending a
keep alives
+ //that should be enough, but still, the registration thread could
get stuck...
+ Thread.sleep(getLSInterval() * 5);
assertEquals(1, ls.getRegisterCount());
assertTrue("Keep alive should be sent at least 2x but was " +
ls.getKeepAliveCount(),
ls.getKeepAliveCount() >= 2);
- logger.debug("••• Test passed");
+ logger.debug("•• Test passed");
}
}
Property changes on: trunk/perfsonar-base/messaging
___________________________________________________________________
Modified: svn:ignore
- .settings
.project
.classpath
.pmd
.pmdruleset
logs
target
+ .settings
.project
.classpath
.pmd
.pmdruleset
logs
target
.checkstyle
Modified:
trunk/perfsonar-base/messaging/src/main/java/net/geant/perfsonar/messaging/SelfTestResult.java
===================================================================
---
trunk/perfsonar-base/messaging/src/main/java/net/geant/perfsonar/messaging/SelfTestResult.java
2013-06-27 20:35:43 UTC (rev 6437)
+++
trunk/perfsonar-base/messaging/src/main/java/net/geant/perfsonar/messaging/SelfTestResult.java
2013-06-29 19:57:17 UTC (rev 6438)
@@ -8,8 +8,7 @@
import org.slf4j.LoggerFactory;
/**
- * This class is used in unit tests to check the behavior of a service wrt
self
- * tests
+ * This class represents SelfTest results returned by a perfSONAR service
*
* @author Blazej Pietrzak -
* @author Antoine Delvaux -
Modified:
trunk/perfsonar-base/messaging/src/main/java/net/geant/perfsonar/messaging/XPathDeserializer.java
===================================================================
---
trunk/perfsonar-base/messaging/src/main/java/net/geant/perfsonar/messaging/XPathDeserializer.java
2013-06-27 20:35:43 UTC (rev 6437)
+++
trunk/perfsonar-base/messaging/src/main/java/net/geant/perfsonar/messaging/XPathDeserializer.java
2013-06-29 19:57:17 UTC (rev 6438)
@@ -159,20 +159,6 @@
public XPathDeserializer() {
}
- // FIXME: where is this used?
- public static String validate(String xpath) {
- final XMLDog dog = new XMLDog(CONTEXT);
- try {
- dog.addXPath(xpath);
- } catch (XPathSyntaxException ex) {
- return "Invalid XPath: " + ex.getMultilineMessage();
- } catch (SAXPathException ex) {
- return "Invalid XPath: " + ex.getMessage();
- }
-
- return null;
- }
-
/**
* Deserializes objects from XML stream using streaming XPath
expressions.
*
Modified:
trunk/perfsonar-base/messaging/src/main/java/net/geant/perfsonar/templates/TemplateEngine.java
===================================================================
---
trunk/perfsonar-base/messaging/src/main/java/net/geant/perfsonar/templates/TemplateEngine.java
2013-06-27 20:35:43 UTC (rev 6437)
+++
trunk/perfsonar-base/messaging/src/main/java/net/geant/perfsonar/templates/TemplateEngine.java
2013-06-29 19:57:17 UTC (rev 6438)
@@ -9,11 +9,9 @@
import net.geant.perfsonar.PerfSONARException;
import org.apache.velocity.VelocityContext;
-import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.exception.MethodInvocationException;
import org.apache.velocity.exception.ParseErrorException;
import org.apache.velocity.exception.ResourceNotFoundException;
-import org.apache.velocity.runtime.RuntimeConstants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -22,69 +20,68 @@
* Velocity engine.
*
* @author <a
href="mailto:">Blazej
Pietrzak</a>
+ * @author Antoine Delvaux - DANTE
*
*/
-public final class TemplateEngine {
- private static final Logger LOGGER =
LoggerFactory.getLogger(TemplateEngine.class);
- private static final VelocityEngine TEMPLATE_ENGINE = new
VelocityEngine();
- private static final VelocityContext CONTEXT = new VelocityContext();
+public class TemplateEngine {
+ protected Logger logger = LoggerFactory.getLogger(getClass());
+ // The Velocity template engine is a singleton shared between threads
+ private static final VelocityEngineSingleton TEMPLATE_ENGINE =
VelocityEngineSingleton.INSTANCE;
+ // But the Velocity context must be different for each executing thread
+ private final VelocityContext context;
- private TemplateEngine() {
- // Utility class, we block external instantiation
+ public TemplateEngine() {
+ logger.info("Initialising a new context for the template engine.");
+ context = new VelocityContext();
}
-
- static {
- LOGGER.info("Initialising the Velocity template engine.");
- // We set correct defaults to use Log4J for the velocity log
("velocity" category)
-
TEMPLATE_ENGINE.setProperty(RuntimeConstants.RUNTIME_LOG_LOGSYSTEM_CLASS,
- "org.apache.velocity.runtime.log.Log4JLogChute");
- TEMPLATE_ENGINE.setProperty(RuntimeConstants.RUNTIME_LOG_LOGSYSTEM +
".log4j.logger",
- "velocity");
- TEMPLATE_ENGINE.init();
- }
- private static InputStreamReader getTemplate(Class<?> homeDir, String
name) throws IOException {
+ /**
+ * Tries to read the template from the class package
+ */
+ private InputStreamReader getTemplate(Class<?> homeDir, String name)
throws IOException {
final InputStream in = homeDir.getResourceAsStream(name);
-
if (in == null) {
String msg = "Template " + name + " cannot be found in " +
homeDir + ".";
- LOGGER.warn(msg);
+ logger.warn(msg);
throw new IOException(msg);
}
- LOGGER.trace("Reading {} in {} as stream.", name, homeDir);
+ logger.trace("Reading {} in {} as stream.", name, homeDir);
return new InputStreamReader(in);
}
/**
- * Parses the template found in the class directory and writes the
evaluated
+ * Parses the template found in the class package and writes the
evaluated
* template directly to the provided Writer
*/
- public static void evaluate(Writer writer, Class<?> homeDir, String
name) throws PerfSONARException {
+ public void evaluate(Writer out, Class<?> homeDir, String name) throws
PerfSONARException {
try {
- TEMPLATE_ENGINE.evaluate(CONTEXT, writer, "successMessage",
getTemplate(homeDir, name));
+ TEMPLATE_ENGINE.evaluate(context, out, "successMessage",
getTemplate(homeDir, name));
} catch (ParseErrorException e) {
- throw new PerfSONARException(LOGGER, "Error parsing the
template " + homeDir + name, e);
+ throw new PerfSONARException(logger, "Error parsing the
template " + homeDir + name, e);
} catch (MethodInvocationException e) {
- throw new PerfSONARException(LOGGER, "Velocity error when
calling invoke " + homeDir + name, e);
+ throw new PerfSONARException(logger, "Velocity error when
calling invoke " + homeDir + name, e);
} catch (ResourceNotFoundException e) {
- throw new PerfSONARException(LOGGER, "Velocity couldn't find
a resource for " + homeDir + name, e);
+ throw new PerfSONARException(logger, "Velocity couldn't find
a resource for " + homeDir + name, e);
} catch (IOException e) {
- throw new PerfSONARException(LOGGER, "IOException when try
to evaluate " + homeDir + name, e);
+ throw new PerfSONARException(logger, "IOException when
trying to evaluate " + homeDir + name, e);
}
}
- public static String evaluate(String template) {
+ /**
+ * Parses the template from the class package and returns it as a string
+ */
+ public String evaluate(String template) {
final StringWriter out = new StringWriter();
- TEMPLATE_ENGINE.evaluate(CONTEXT, out, "successMessage", template);
+ TEMPLATE_ENGINE.evaluate(context, out, "successMessage", template);
return out.toString();
}
/**
- * Put data to the CONTEXT. Data can be used in templates with a macro
- * ${identifier} where identifier is the name put in the CONTEXT. More on
+ * Put data to the context. Data can be used in templates with a macro
+ * ${identifier} where identifier is the name put in the context. More on
* template engine can be found at Apache Velocity website.
*/
- public static void put(String name, Object value) {
- CONTEXT.put(name, value);
+ public void put(String name, Object value) {
+ context.put(name, value);
}
}
Added:
trunk/perfsonar-base/messaging/src/main/java/net/geant/perfsonar/templates/VelocityEngineSingleton.java
===================================================================
---
trunk/perfsonar-base/messaging/src/main/java/net/geant/perfsonar/templates/VelocityEngineSingleton.java
(rev 0)
+++
trunk/perfsonar-base/messaging/src/main/java/net/geant/perfsonar/templates/VelocityEngineSingleton.java
2013-06-29 19:57:17 UTC (rev 6438)
@@ -0,0 +1,44 @@
+package net.geant.perfsonar.templates;
+
+import java.io.InputStreamReader;
+import java.io.StringWriter;
+import java.io.Writer;
+
+import org.apache.velocity.VelocityContext;
+import org.apache.velocity.app.VelocityEngine;
+import org.apache.velocity.runtime.RuntimeConstants;
+
+/**
+ * Singleton instance of the apache VelocityEngine
+ * @author Antoine Delvaux -
+ */
+public enum VelocityEngineSingleton {
+ // We want to ensure this will always be a singleton
+ // @see
http://stackoverflow.com/questions/70689/what-is-an-efficient-way-to-implement-a-singleton-pattern-in-java
+ INSTANCE;
+ private final VelocityEngine templateEngine = new VelocityEngine();
+
+ // Constructor is private so it is never called directly (ensure it
stays a singleton)
+ private VelocityEngineSingleton() {
+
templateEngine.setProperty(RuntimeConstants.RUNTIME_LOG_LOGSYSTEM_CLASS,
+ "org.apache.velocity.runtime.log.Log4JLogChute");
+ templateEngine.setProperty(RuntimeConstants.RUNTIME_LOG_LOGSYSTEM +
".log4j.logger",
+ "velocity");
+ templateEngine.init();
+ }
+
+ /**
+ * Wrapper around the original/parent VelocityEngine evaluate
+ */
+ public void evaluate(VelocityContext context, Writer out, String string,
InputStreamReader template) {
+ templateEngine.evaluate(context, out, string, template);
+ }
+
+ /**
+ * Wrapper around the original/parent VelocityEngine evaluate
+ */
+ public void evaluate(VelocityContext context, StringWriter out, String
string, String template) {
+ templateEngine.evaluate(context, out, string, template);
+ }
+
+}
Property changes on:
trunk/perfsonar-base/messaging/src/main/java/net/geant/perfsonar/templates/VelocityEngineSingleton.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added:
trunk/perfsonar-base/messaging/src/test/java/net/geant/perfsonar/AsynchTester.java
===================================================================
---
trunk/perfsonar-base/messaging/src/test/java/net/geant/perfsonar/AsynchTester.java
(rev 0)
+++
trunk/perfsonar-base/messaging/src/test/java/net/geant/perfsonar/AsynchTester.java
2013-06-29 19:57:17 UTC (rev 6438)
@@ -0,0 +1,41 @@
+package net.geant.perfsonar;
+
+/**
+ * Asynchronous tester class meant to be run in a threaded testing
environment
+ *
+ * Reports the errors and exceptions up to the parent thread
+ *
+ * @author Antoine Delvaux -
+ */
+public class AsynchTester {
+ private Thread thread;
+ private volatile Throwable exception;
+
+ public AsynchTester(final Runnable runnable) {
+ thread = new Thread(new Runnable() {
+ public void run() {
+ try {
+ runnable.run();
+ // CHECKSTYLE IGNORE IllegalCatch FOR NEXT 3 LINES
+ } catch (Throwable e) {
+ exception = e;
+ }
+ }
+ });
+ }
+
+ public void start() {
+ thread.start();
+ }
+
+ /**
+ * Wait for the thread to ends before throwing the exceptions
+ * @throws InterruptedException
+ */
+ public void test() throws Throwable {
+ thread.join();
+ if (exception != null) {
+ throw exception;
+ }
+ }
+}
Property changes on:
trunk/perfsonar-base/messaging/src/test/java/net/geant/perfsonar/AsynchTester.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified:
trunk/perfsonar-base/messaging/src/test/java/net/geant/perfsonar/templates/TemplateEngineTest.java
===================================================================
---
trunk/perfsonar-base/messaging/src/test/java/net/geant/perfsonar/templates/TemplateEngineTest.java
2013-06-27 20:35:43 UTC (rev 6437)
+++
trunk/perfsonar-base/messaging/src/test/java/net/geant/perfsonar/templates/TemplateEngineTest.java
2013-06-29 19:57:17 UTC (rev 6438)
@@ -2,23 +2,76 @@
import static org.junit.Assert.assertEquals;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import java.io.StringWriter;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import net.geant.perfsonar.AsynchTester;
+import net.geant.perfsonar.PerfSONARException;
import net.geant.perfsonar.messaging.data.Dummy;
-import org.junit.Test;
/**
+ * @author Antoine Delvaux - DANTE
* @author <a
href="mailto:">Blazej
Pietrzak</a>
*/
public class TemplateEngineTest {
+ protected Logger logger = LoggerFactory.getLogger(getClass());
+ // Singleton counters shared between threads
+ private final AtomicInteger aInt = new AtomicInteger(0);
+ private final AtomicInteger count = new AtomicInteger(0);
+ private static final int THREADS_COUNT = 500;
+
// This test relies on a template being present in an external jar (@see
net.geant.perfsonar.messaging.data)
@Test
public void shouldProcessTemplateFromJar() throws Exception {
final StringWriter out = new StringWriter();
- TemplateEngine.put("name", "John Doe");
- TemplateEngine.evaluate(out, Dummy.class, "Hello.template");
+ final TemplateEngine te = new TemplateEngine();
+ te.put("name", "John Doe");
+ te.evaluate(out, Dummy.class, "Hello.template");
assertEquals("Hello John Doe!", out.toString());
}
+
+ @Test
+ public void processTemplateInThreads() throws Throwable {
+ aInt.set(0);
+ count.set(0);
+ AsynchTester[] testers = new AsynchTester[THREADS_COUNT];
+ logger.info("•••• Testing threaded TemplateEngine calls with {}
threads", THREADS_COUNT);
+ for (int i = count.get(); i < THREADS_COUNT; i++) {
+ testers[i] = new AsynchTester(new Runnable() {
+ public void run() {
+ // Each thread gets its own copy of the counter value
and its own StringWriter
+ final Integer myInt = aInt.incrementAndGet();
+ final StringWriter out = new StringWriter();
+ final TemplateEngine te = new TemplateEngine();
+ te.put("name", "John Doe " + myInt);
+ try {
+ te.evaluate(out, Dummy.class, "Hello.template");
+ } catch (PerfSONARException e) {
+ logger.error("Error when evaluating Hello.template:
" + e.getMessage());
+ }
+ assertEquals("Hello John Doe " + myInt + "!",
out.toString());
+ logger.debug("{} finished, {} thread(s) complete, {}
currently running threads.",
+ Thread.currentThread().getName(),
count.incrementAndGet(), Thread.activeCount());
+ }
+ });
+ logger.debug("Starting thread {} and evaluating template", i +
1);
+ testers[i].start();
+ }
+
+ for (AsynchTester tester : testers) {
+ tester.test();
+ }
+
+ // Check that we have evaluated the template in each thread
+ assertEquals(aInt.get(), THREADS_COUNT);
+ assertEquals(count.get(), THREADS_COUNT);
+ logger.info("•• TemplateEngine is thread safe.");
+ }
}
Modified:
trunk/perfsonar-base/sample-service/src/test/java/net/geant/perfsonar/mp/sshtelnet/ConfigurationFileCheckerTest.java
===================================================================
---
trunk/perfsonar-base/sample-service/src/test/java/net/geant/perfsonar/mp/sshtelnet/ConfigurationFileCheckerTest.java
2013-06-27 20:35:43 UTC (rev 6437)
+++
trunk/perfsonar-base/sample-service/src/test/java/net/geant/perfsonar/mp/sshtelnet/ConfigurationFileCheckerTest.java
2013-06-29 19:57:17 UTC (rev 6438)
@@ -38,7 +38,7 @@
config.run();
assertEquals(2, service.getLookupServiceInterval());
- logger.info("•• Test passed!");
+ logger.debug("•• Test passed!");
}
}
Modified: trunk/perfsonar-java-rrd-ma-base3/pom.xml
===================================================================
--- trunk/perfsonar-java-rrd-ma-base3/pom.xml 2013-06-27 20:35:43 UTC (rev
6437)
+++ trunk/perfsonar-java-rrd-ma-base3/pom.xml 2013-06-29 19:57:17 UTC (rev
6438)
@@ -101,13 +101,13 @@
<dependency>
<groupId>net.geant.perfsonar</groupId>
<artifactId>web-admin-component</artifactId>
- <version>1.1.1</version>
+ <version>1.1.2-SNAPSHOT</version>
<classifier>classes</classifier>
</dependency>
<dependency>
<groupId>net.geant.perfsonar</groupId>
<artifactId>web-admin-component</artifactId>
- <version>1.1.1</version>
+ <version>1.1.2-SNAPSHOT</version>
<type>war</type>
</dependency>
Deleted:
trunk/perfsonar-java-rrd-ma-base3/src/main/java/net/geant/perfsonar/ma/RRDMAService.java
===================================================================
---
trunk/perfsonar-java-rrd-ma-base3/src/main/java/net/geant/perfsonar/ma/RRDMAService.java
2013-06-27 20:35:43 UTC (rev 6437)
+++
trunk/perfsonar-java-rrd-ma-base3/src/main/java/net/geant/perfsonar/ma/RRDMAService.java
2013-06-29 19:57:17 UTC (rev 6438)
@@ -1,36 +0,0 @@
-package net.geant.perfsonar.ma;
-
-import javax.xml.ws.WebServiceProvider;
-
-import net.geant.perfsonar.PerfSONAR;
-import net.geant.perfsonar.ServiceType;
-
-/**
- * RRD MA perfSONAR service implementation
- * Based on psBase3 streaming framework
- *
- * @author Antoine Delvaux
<>
- *
- */
-
-@WebServiceProvider
-public class RRDMAService extends PerfSONAR {
-
- /**
- *
- */
- public RRDMAService() {
- super();
- }
-
- @Override
- public final ServiceType getServiceType() {
- return ServiceType.MA;
- }
-
- @Override
- public final String getServiceName() {
- return "RRD_MA";
- }
-
-}
Deleted:
trunk/perfsonar-java-rrd-ma-base3/src/main/java/net/geant/perfsonar/ma/RRDMAServiceController.java
===================================================================
---
trunk/perfsonar-java-rrd-ma-base3/src/main/java/net/geant/perfsonar/ma/RRDMAServiceController.java
2013-06-27 20:35:43 UTC (rev 6437)
+++
trunk/perfsonar-java-rrd-ma-base3/src/main/java/net/geant/perfsonar/ma/RRDMAServiceController.java
2013-06-29 19:57:17 UTC (rev 6438)
@@ -1,33 +0,0 @@
-package net.geant.perfsonar.ma;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import net.geant.perfsonar.annotations.request.MetadataKey;
-import net.geant.perfsonar.ma.rrd.Interface;
-
-/**
- * @author Antoine Delvaux -
- *
- */
-public class RRDMAServiceController {
- protected Logger logger = LoggerFactory.getLogger(getClass());
- public RRDMAServiceController() { }
-
- @MetadataKey
- public String listRRDFiles(Interface iface) {
- logger.debug("Request received");
- return "return an RRD files list";
- }
-
- /*
- @MetadataKey
- public void testAnnotations(Interface iface) {
- logger.warn("Request received");
- }
-
- @MetadataKey
- public void invalidHandler() {
- }
-*/
-}
Modified: trunk/perfsonar-java-web-admin/web-admin-component/pom.xml
===================================================================
--- trunk/perfsonar-java-web-admin/web-admin-component/pom.xml 2013-06-27
20:35:43 UTC (rev 6437)
+++ trunk/perfsonar-java-web-admin/web-admin-component/pom.xml 2013-06-29
19:57:17 UTC (rev 6438)
@@ -9,7 +9,6 @@
</parent>
<artifactId>web-admin-component</artifactId>
- <version>1.1.2-SNAPSHOT</version>
<packaging>war</packaging>
<name>perfSONAR Web Admin Component</name>
@@ -125,12 +124,12 @@
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
- <version>4.0.3</version>
+ <version>4.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
- <version>4.0.1</version>
+ <version>4.2.2</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
Modified: trunk/perfsonar-java-web-admin/web-admin-exampleservice/pom.xml
===================================================================
--- trunk/perfsonar-java-web-admin/web-admin-exampleservice/pom.xml
2013-06-27 20:35:43 UTC (rev 6437)
+++ trunk/perfsonar-java-web-admin/web-admin-exampleservice/pom.xml
2013-06-29 19:57:17 UTC (rev 6438)
@@ -9,7 +9,6 @@
</parent>
<artifactId>web-admin-exampleservice</artifactId>
- <version>1.1.2-SNAPSHOT</version>
<packaging>war</packaging>
<name>perfSONAR Web Admin Example Service</name>
- [pS-dev] [GEANT/SA2/ps-java-services] r6438 - in trunk: parent perfsonar-base/apt/src/test/java/net/ge ant/perfsonar/annotations/selftest perfsonar-base/base/src /main/java/net/geant/perfsonar perfsonar-base/base/src/mai n/java/net/geant/perfsonar/response perfsonar-base/base/sr c/main/java/net/geant/perfsonar/selftest perfsonar-base/ls /src/main/java/net/geant/perfsonar/ls perfsonar-base/ls/sr c/test/java/net/geant/perfsonar/ls perfsonar-base/messagin g perfsonar-base/messaging/src/main/java/net/geant/perfson ar/messaging perfsonar-base/messaging/src/main/java/net/ge ant/perfsonar/templates perfsonar-base/messaging/src/test/ java/net/geant/perfsonar perfsonar-base/messaging/src/test /java/net/geant/perfsonar/templates perfsonar-base/sample- service/src/test/java/net/geant/perfsonar/mp/sshtelnet per fsonar-java-rrd-ma-base3 perfsonar-java-rrd-ma-base3/src/m ain/java/net/geant/perfsonar/ma perfsonar-java-web-admin/w eb-admin-component perfsonar-java-web-admin/web-admin-exam pleservice, svn-noreply, 06/29/2013
Archive powered by MHonArc 2.6.16.