private SingleScenarioResult runScenario(String packageName,
Scenario scenario,
RuleCoverageListener coverage) throws SerializationException {
PackageItem item = this.repository.loadPackage( packageName );
SingleScenarioResult result = null;
// nasty classloader needed to make sure we use the same tree the whole
// time.
ClassLoader originalCL = Thread.currentThread().getContextClassLoader();
try {
final RuleBase rb = loadCacheRuleBase( item );
// if ( item.isBinaryUpToDate() && this.ruleBaseCache.containsKey( item.getUUID() ) ) {
// rb = this.ruleBaseCache.get( item.getUUID() );
// } else {
// // load up the classloader we are going to use
// List<JarInputStream> jars = BRMSPackageBuilder.getJars( item );
// ClassLoader buildCl = BRMSPackageBuilder.createClassLoader( jars );
//
// // we have to build the package, and try again.
// if ( item.isBinaryUpToDate() ) {
// rb = loadRuleBase( item,
// buildCl );
// this.ruleBaseCache.put( item.getUUID(),
// rb );
// } else {
// BuilderResult[] errs = this.buildPackage( null,
// false,
// item );
// if ( errs == null || errs.length == 0 ) {
// rb = loadRuleBase( item,
// buildCl );
// this.ruleBaseCache.put( item.getUUID(),
// rb );
// } else {
// SingleScenarioResult r = new SingleScenarioResult();
// r.result = new ScenarioRunResult( errs,
// null );
// return r;
// }
// }
// }
ClassLoader cl = ((InternalRuleBase) this.ruleBaseCache.get( item.getUUID() )).getRootClassLoader();
Thread.currentThread().setContextClassLoader( cl );
result = runScenario( scenario,
item,
cl,
rb,
coverage );
} catch ( Exception e ) {
if ( e instanceof DetailedSerializationException ) {
DetailedSerializationException err = (DetailedSerializationException) e;
result = new SingleScenarioResult();
if ( err.getErrs() != null ) {
result.result = new ScenarioRunResult( err.getErrs(),
null );
} else {
throw err;