/*
* Copyright 2008-2014 the original author or authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.kaleidofoundry.core.naming;
import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;
import org.kaleidofoundry.core.config.ConfigurationFactory;
import org.kaleidofoundry.core.context.ProviderException;
import org.kaleidofoundry.core.store.ResourceException;
import org.kaleidofoundry.core.util.ThrowableHelper;
/**
* @author jraduget
*/
public class NamingServiceJndiSampler extends AbstractJavaSamplerClient {
private static final String ConfigurationUri = "configurationUri";
private static final String EchoMessage = "echoMessage";
@Override
public void setupTest(final JavaSamplerContext context) {
// load configuration & context
try {
ConfigurationFactory.provides("myConfig", context.getParameter(ConfigurationUri));
} catch (ProviderException rte) {
throw rte;
}
}
@Override
public void teardownTest(final JavaSamplerContext context) {
try {
ConfigurationFactory.unregister("myConfig");
} catch (ResourceException rse) {
throw new IllegalStateException(rse);
}
}
/*
* (non-Javadoc)
* @see org.apache.jmeter.protocol.java.sampler.JavaSamplerClient#runTest(org.apache.jmeter.protocol.java.sampler.JavaSamplerContext)
*/
@Override
public SampleResult runTest(final JavaSamplerContext context) {
// parent sampler result
SampleResult parentResults = new SampleResult();
// childs sampler result
SampleResult childResults;
// global sampler status
boolean mainSampleStatusOK = true;
// user message to process (for echo command)
String userMessage = context.getParameter(EchoMessage);
// naming service sample
NamingServiceJndiSample01 sample;
// start sample
parentResults.sampleStart();
parentResults.setThreadName("naming-service");
parentResults.setSampleLabel("naming-service-sampler");
// 1. context injection cost
childResults = new SampleResult();
childResults.sampleStart();
childResults.setSampleLabel("context injection");
sample = new NamingServiceJndiSample01();
childResults.sampleEnd();
childResults.setResponseCodeOK();
childResults.setSuccessful(true);
parentResults.addSubResult(childResults);
// 2. ejb call
childResults = new SampleResult();
try {
// context and instance injection of the naming service
childResults.sampleStart();
childResults.setSampleLabel("echoFromEJB");
childResults.setResponseMessage(sample.echoFromEJB(userMessage));
childResults.sampleEnd();
childResults.setResponseCodeOK();
childResults.setSuccessful(true);
} catch (Throwable th) {
childResults.setResponseMessage(ThrowableHelper.getStackTrace(th));
childResults.setSuccessful(false);
mainSampleStatusOK = false;
}
parentResults.addSubResult(childResults);
// 3. jdbc datasource call
childResults = new SampleResult();
try {
// context and instance injection of the naming service
childResults.sampleStart();
childResults.setSampleLabel("echoFromDatabase");
childResults.setResponseMessage(sample.echoFromDatabase(userMessage));
childResults.sampleEnd();
childResults.setResponseCodeOK();
childResults.setSuccessful(true);
} catch (Throwable th) {
childResults.setResponseMessage(ThrowableHelper.getStackTrace(th));
childResults.setSuccessful(false);
mainSampleStatusOK = false;
}
parentResults.addSubResult(childResults);
// 4. jms call
childResults = new SampleResult();
try {
// context and instance injection of the naming service
childResults.sampleStart();
childResults.setSampleLabel("echoFromJMS");
childResults.setResponseMessage(sample.echoFromJMS(userMessage).getJMSCorrelationID());
childResults.sampleEnd();
childResults.setResponseCodeOK();
childResults.setSuccessful(true);
} catch (Throwable th) {
childResults.setResponseMessage(ThrowableHelper.getStackTrace(th));
childResults.setSuccessful(false);
mainSampleStatusOK = false;
}
parentResults.addSubResult(childResults);
// global parent sampler status
parentResults.setSuccessful(mainSampleStatusOK);
if (mainSampleStatusOK) {
parentResults.setResponseCodeOK();
}
return parentResults;
}
/*
* (non-Javadoc)
* @see org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient#getDefaultParameters()
*/
@Override
public Arguments getDefaultParameters() {
Arguments args = new Arguments();
args.addArgument(ConfigurationUri, "classpath:/naming/myContext.properties");
args.addArgument(EchoMessage, "Hello world!");
return args;
}
}