Revision: 5578 http://jnode.svn.sourceforge.net/jnode/?rev=5578&view=rev Author: fduminy Date: 2009-06-16 22:22:58 +0000 (Tue, 16 Jun 2009)
Log Message: ----------- split of responsabilities in 2 classes : TestManager for running the tests and ServerProcessManager for maintaining a pool of alive servers Modified Paths: -------------- trunk/core/src/test/org/jtestserver/client/TestDriver.java Added Paths: ----------- trunk/core/src/test/org/jtestserver/client/TestManager.java trunk/core/src/test/org/jtestserver/client/process/ServerProcessManager.java Removed Paths: ------------- trunk/core/src/test/org/jtestserver/client/TestDriverInstance.java trunk/core/src/test/org/jtestserver/client/router/MultipleClientTestRouter.java trunk/core/src/test/org/jtestserver/client/router/SingleClientTestRouter.java trunk/core/src/test/org/jtestserver/client/router/TestRouter.java trunk/core/src/test/org/jtestserver/client/router/TestRouterResult.java Modified: trunk/core/src/test/org/jtestserver/client/TestDriver.java =================================================================== --- trunk/core/src/test/org/jtestserver/client/TestDriver.java 2009-06-16 22:17:14 UTC (rev 5577) +++ trunk/core/src/test/org/jtestserver/client/TestDriver.java 2009-06-16 22:22:58 UTC (rev 5578) @@ -44,10 +44,8 @@ import net.sourceforge.nanoxml.XMLParseException; -import org.jtestserver.client.process.ServerProcess; -import org.jtestserver.client.router.MultipleClientTestRouter; -import org.jtestserver.client.router.TestRouter; -import org.jtestserver.client.router.TestRouterResult; +import org.jtestserver.client.TestManager.Result; +import org.jtestserver.client.process.ServerProcessManager; import org.jtestserver.client.utils.ConfigurationUtils; import org.jtestserver.client.utils.TestListRW; import org.jtestserver.common.protocol.Client; @@ -80,25 +78,25 @@ Client<?, ?> client = protocol.createClient(serverAddress, serverPort); client.setTimeout(config.getClientTimeout()); - ServerProcess process = config.getVMConfig().createServerProcess(); - return new TestDriver(config, client, process); + return new TestDriver(config, client); } private final Config config; private final TestListRW testListRW; - private final TestRouter instance; - private final String processClassName; + private final TestManager testManager; + private final ServerProcessManager processManager; + private final String vmType; - private TestDriver(Config config, Client<?, ?> client, ServerProcess process) { + private TestDriver(Config config, Client<?, ?> client) { this.config = config; testListRW = new TestListRW(config); - //instance = new SingleClientTestRouter(config, client, process); - instance = new MultipleClientTestRouter(config, client, process); - processClassName = process.getClass().getName(); + testManager = new TestManager(client); + processManager = new ServerProcessManager(config); + vmType = config.getVMConfig().getVmType(); } public void start() throws Exception { - instance.start(); + processManager.startAll(); try { Run latestRun = Run.getLatest(config); @@ -111,13 +109,13 @@ if (latestRun == null) { LOGGER.info("running list of all tests"); runResult = runTests(null, true, workingList, crashingList, newRun.getTimestampString()); - runResult.setSystemProperty("jtestserver.process", processClassName); + runResult.setSystemProperty("jtestserver.process", vmType); } else { LOGGER.info("running list of working tests"); File workingTests = latestRun.getWorkingTests(); runResult = runTests(workingTests, true, workingList, crashingList, newRun.getTimestampString()); - runResult.setSystemProperty("jtestserver.process", processClassName); + runResult.setSystemProperty("jtestserver.process", vmType); LOGGER.info("running list of crashing tests"); File crashingTests = latestRun.getCrashingTests(); @@ -134,7 +132,7 @@ compareRuns(latestRun, newRun, runResult); } finally { - instance.stop(); + processManager.stopAll(); } } @@ -187,19 +185,19 @@ } LOGGER.info("adding test " + test); - instance.addTest(test); + testManager.runTest(test); } RunResult result = new RunResult(timestamp); boolean firstTest = true; - while (instance.hasPendingTests()) { + while (testManager.hasPendingTests()) { boolean working = false; RunResult delta = null; String test = null; try { LOGGER.info("getting a result"); - TestRouterResult runnerResult = instance.getResult(); + Result runnerResult = testManager.getResult(); delta = runnerResult.getRunResult(); test = runnerResult.getTest(); LOGGER.info("got a result for " + test); Deleted: trunk/core/src/test/org/jtestserver/client/TestDriverInstance.java =================================================================== --- trunk/core/src/test/org/jtestserver/client/TestDriverInstance.java 2009-06-16 22:17:14 UTC (rev 5577) +++ trunk/core/src/test/org/jtestserver/client/TestDriverInstance.java 2009-06-16 22:22:58 UTC (rev 5578) @@ -1,101 +0,0 @@ -/* - -JTestServer is a client/server framework for testing any JVM implementation. - -Copyright (C) 2009 Fabien DUMINY (fdum...@jnode.org) - -JTestServer is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -JTestServer is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -*/ -package org.jtestserver.client; - -import gnu.testlet.runner.RunResult; - -import java.io.IOException; -import java.util.logging.Level; -import java.util.logging.Logger; - -import org.jtestserver.client.process.WatchDog; -import org.jtestserver.client.process.ServerProcess; -import org.jtestserver.common.protocol.Client; -import org.jtestserver.common.protocol.ProtocolException; -import org.jtestserver.common.protocol.TimeoutException; - -public class TestDriverInstance { - private static final Logger LOGGER = Logger.getLogger(TestDriverInstance.class.getName()); - - private final TestClient client; - private final ServerProcess process; - private final WatchDog watchDog; - - public TestDriverInstance(Config config, Client<?, ?> client, ServerProcess process, WatchDog watchDog) { - this.client = new DefaultTestClient(client); - this.process = process; - this.watchDog = watchDog; - } - - public void startInstance() throws IOException, ProtocolException { - process.start(); - watchDog.watch(process); - } - - public void stopInstance() throws IOException, ProtocolException { - // stop the watch dog before actually stop the process - watchDog.unwatch(process); - - LOGGER.info("killing running servers"); - boolean killed = false; - try { - // kill server that might still be running - client.close(); - } catch (ProtocolException pe) { - // assume that exception means the server has been killed - killed = true; - } - - while (!killed) { - try { - client.getStatus(); - } catch (ProtocolException pe) { - // assume that exception means the server has been killed - killed = true; - } catch (TimeoutException e) { - // assume that exception means the server has been killed - killed = true; - } - } - - LOGGER.info("all servers are killed"); - - try { - process.stop(); - } catch (IOException e) { - LOGGER.log(Level.SEVERE, "an error happened while stopping", e); - } - } - - public RunResult runTest(String test) throws ProtocolException, IOException { - - RunResult delta = null; - LOGGER.info("running test " + test); - - try { - delta = client.runMauveTest(test); - } catch (TimeoutException e) { - LOGGER.log(Level.SEVERE, "a timeout happened", e); - } - - return delta; - } -} Copied: trunk/core/src/test/org/jtestserver/client/TestManager.java (from rev 5576, trunk/core/src/test/org/jtestserver/client/TestDriverInstance.java) =================================================================== --- trunk/core/src/test/org/jtestserver/client/TestManager.java (rev 0) +++ trunk/core/src/test/org/jtestserver/client/TestManager.java 2009-06-16 22:22:58 UTC (rev 5578) @@ -0,0 +1,97 @@ +/* + +JTestServer is a client/server framework for testing any JVM implementation. + +Copyright (C) 2009 Fabien DUMINY (fdum...@jnode.org) + +JTestServer is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +JTestServer is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ +package org.jtestserver.client; + +import gnu.testlet.runner.RunResult; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; + +import org.jtestserver.common.protocol.Client; +import org.jtestserver.common.protocol.ProtocolException; +import org.jtestserver.common.protocol.TimeoutException; + +public class TestManager { + private static final Logger LOGGER = Logger.getLogger(TestManager.class.getName()); + + private final TestClient client; + private final List<Result> results; + + public TestManager(Client<?, ?> client) { + this.client = new DefaultTestClient(client); + results = new ArrayList<Result>(); + } + + public void runTest(String test) throws ProtocolException, IOException { + + LOGGER.info("running test " + test); + + try { + RunResult delta = client.runMauveTest(test); + results.add(new Result(test, delta)); + } catch (TimeoutException e) { + LOGGER.log(Level.SEVERE, "a timeout happened", e); + } + } + + /** + * @return + */ + public boolean hasPendingTests() { + return !results.isEmpty(); + } + + /** + * @return + */ + public Result getResult() { + return results.remove(0); + } + + public static class Result { + private final String test; + private final RunResult runResult; + + public Result(String test, RunResult runResult) { + super(); + this.test = test; + this.runResult = runResult; + } + + /** + * @return + */ + public RunResult getRunResult() { + return runResult; + } + + /** + * @return + */ + public String getTest() { + return test; + } + + } +} Added: trunk/core/src/test/org/jtestserver/client/process/ServerProcessManager.java =================================================================== --- trunk/core/src/test/org/jtestserver/client/process/ServerProcessManager.java (rev 0) +++ trunk/core/src/test/org/jtestserver/client/process/ServerProcessManager.java 2009-06-16 22:22:58 UTC (rev 5578) @@ -0,0 +1,96 @@ +/* + +JTestServer is a client/server framework for testing any JVM implementation. + +Copyright (C) 2009 Fabien DUMINY (fdum...@jnode.org) + +JTestServer is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +JTestServer is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ +package org.jtestserver.client.process; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; + +import org.jtestserver.client.Config; +import org.jtestserver.common.protocol.ProtocolException; + +public class ServerProcessManager { + private static final Logger LOGGER = Logger.getLogger(ServerProcessManager.class.getName()); + +// private final TestClient client; + private final List<ServerProcess> processes; + private final WatchDog watchDog; + + public ServerProcessManager(Config config) { +// this.client = new DefaultTestClient(client); + watchDog = new WatchDog(config); + processes = new ArrayList<ServerProcess>(); + + ServerProcess process; + for (int i = 0; i < 10; i++) { // TODO read number of processes from config + process = config.getVMConfig().createServerProcess(); + processes.add(process); + } + } + + public void startAll() throws IOException, ProtocolException { + watchDog.startWatching(); + + for (ServerProcess process : processes) { + process.start(); + watchDog.watch(process); + } + } + + public void stopAll() throws IOException, ProtocolException { + for (ServerProcess process : processes) { + // stop the watch dog before actually stop the process + watchDog.unwatch(process); + + LOGGER.info("killing running servers"); +// boolean killed = false; +// try { +// // kill server that might still be running +// client.close(); +// } catch (ProtocolException pe) { +// // assume that exception means the server has been killed +// killed = true; +// } +// +// while (!killed) { +// try { +// client.getStatus(); +// } catch (ProtocolException pe) { +// // assume that exception means the server has been killed +// killed = true; +// } catch (TimeoutException e) { +// // assume that exception means the server has been killed +// killed = true; +// } +// } + + LOGGER.info("all servers are killed"); + + try { + process.stop(); + } catch (IOException e) { + LOGGER.log(Level.SEVERE, "an error happened while stopping", e); + } + } + } +} Deleted: trunk/core/src/test/org/jtestserver/client/router/MultipleClientTestRouter.java =================================================================== --- trunk/core/src/test/org/jtestserver/client/router/MultipleClientTestRouter.java 2009-06-16 22:17:14 UTC (rev 5577) +++ trunk/core/src/test/org/jtestserver/client/router/MultipleClientTestRouter.java 2009-06-16 22:22:58 UTC (rev 5578) @@ -1,176 +0,0 @@ -/* - -JTestServer is a client/server framework for testing any JVM implementation. - -Copyright (C) 2009 Fabien DUMINY (fdum...@jnode.org) - -JTestServer is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -JTestServer is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -*/ -package org.jtestserver.client.router; - -import gnu.testlet.runner.RunResult; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.Callable; -import java.util.concurrent.CompletionService; -import java.util.concurrent.ExecutorCompletionService; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.logging.Level; -import java.util.logging.Logger; - -import org.jtestserver.client.Config; -import org.jtestserver.client.TestDriverInstance; -import org.jtestserver.client.process.WatchDog; -import org.jtestserver.client.process.ServerProcess; -import org.jtestserver.common.protocol.Client; -import org.jtestserver.common.protocol.ProtocolException; - -/** - * @author Fabien DUMINY (fdum...@jnode.org) - * - */ -public class MultipleClientTestRouter implements TestRouter { - private static final Logger LOG = Logger.getLogger(MultipleClientTestRouter.class.getName()); - - private final List<TestDriverInstance> instances; - private final AtomicInteger currentInstance = new AtomicInteger(0); - private final AtomicInteger numberOfTests = new AtomicInteger(0); - private final CompletionService<TestRouterResult> completionService; - private final ExecutorService executorService; - private final WatchDog watchDog; - - public MultipleClientTestRouter(Config config, Client<?, ?> client, ServerProcess process) { - watchDog = new WatchDog(config); - int nbInstances = 10; - instances = new ArrayList<TestDriverInstance>(nbInstances); - for (int i = 0; i < nbInstances; i++) { - instances.add(new TestDriverInstance(config, client, process, watchDog)); - } - - executorService = Executors.newFixedThreadPool(instances.size()); - completionService = new ExecutorCompletionService<TestRouterResult>(executorService); - } - - /** - * {...@inheritdoc} - */ - @Override - public void addTest(String test) throws ProtocolException, IOException { - completionService.submit(new TestCallable(test)); - numberOfTests.incrementAndGet(); - } - - /** - * {...@inheritdoc} - */ - @Override - public void start() throws IOException, ProtocolException { - int nbStarted = 0; - - for (TestDriverInstance instance : instances) { - try { - instance.startInstance(); - nbStarted++; - } catch (Exception e) { - LOG.log(Level.SEVERE, "can't start instance", e); - } - } - - if (nbStarted == 0) { - throw new IOException("no instance can be started"); - } - } - - /** - * {...@inheritdoc} - */ - @Override - public void stop() throws IOException, ProtocolException { - int nbStopped = 0; - - for (TestDriverInstance instance : instances) { - try { - instance.stopInstance(); - nbStopped++; - } catch (Exception e) { - LOG.log(Level.SEVERE, "can't stop instance", e); - } - } - - executorService.shutdown(); - - if (nbStopped != instances.size()) { - throw new IOException("some instances haven't stopped"); - } - } - - /** - * {...@inheritdoc} - */ - @Override - public TestRouterResult getResult() throws Exception { - TestRouterResult result = null; - if (hasPendingTests()) { - TestRouterResult r = completionService.take().get(); - result = new TestRouterResult(r.getTest(), r.getRunResult()); - } - return result; - } - - /** - * {...@inheritdoc} - */ - @Override - public boolean hasPendingTests() { - int pendingTests = numberOfTests.get(); - LOG.info(pendingTests + " pending tests"); - return (pendingTests > 0); - } - - - private TestDriverInstance getTestDriverInstance() { - int index; - synchronized (instances) { - index = currentInstance.getAndIncrement(); - if (currentInstance.compareAndSet(instances.size(), 0)) { - index = 0; - } - } - - return instances.get(index); - } - - private class TestCallable implements Callable<TestRouterResult> { - private final Logger LOG = Logger.getLogger(TestCallable.class.getName()); - - private final String test; - - TestCallable(String test) { - this.test = test; - } - - @Override - public TestRouterResult call() throws Exception { - LOG.info("call: test=" + test); - RunResult runResult = getTestDriverInstance().runTest(test); - numberOfTests.decrementAndGet(); - return new TestRouterResult(test, runResult); - } - } -} Deleted: trunk/core/src/test/org/jtestserver/client/router/SingleClientTestRouter.java =================================================================== --- trunk/core/src/test/org/jtestserver/client/router/SingleClientTestRouter.java 2009-06-16 22:17:14 UTC (rev 5577) +++ trunk/core/src/test/org/jtestserver/client/router/SingleClientTestRouter.java 2009-06-16 22:22:58 UTC (rev 5578) @@ -1,95 +0,0 @@ -/* - -JTestServer is a client/server framework for testing any JVM implementation. - -Copyright (C) 2009 Fabien DUMINY (fdum...@jnode.org) - -JTestServer is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -JTestServer is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -*/ -package org.jtestserver.client.router; - -import java.io.IOException; -import java.util.ArrayDeque; -import java.util.Deque; - -import org.jtestserver.client.Config; -import org.jtestserver.client.TestDriverInstance; -import org.jtestserver.client.process.WatchDog; -import org.jtestserver.client.process.ServerProcess; -import org.jtestserver.common.protocol.Client; -import org.jtestserver.common.protocol.ProtocolException; - -/** - * @author Fabien DUMINY (fdum...@jnode.org) - * - */ -public class SingleClientTestRouter implements TestRouter { - private final Deque<String> tests = new ArrayDeque<String>(); - - private final TestDriverInstance instance; - private final WatchDog watchDog; - - public SingleClientTestRouter(Config config, Client<?, ?> client, ServerProcess process) { - watchDog = new WatchDog(config); - instance = new TestDriverInstance(config, client, process, watchDog); - } - - /** - * {...@inheritdoc} - */ - @Override - public void addTest(String test) throws ProtocolException, IOException { - tests.offer(test); - } - - /** - * {...@inheritdoc} - */ - @Override - public void start() throws IOException, ProtocolException { - instance.startInstance(); - watchDog.startWatching(); - } - - /** - * {...@inheritdoc} - */ - @Override - public void stop() throws IOException, ProtocolException { - watchDog.stopWatching(); - instance.stopInstance(); - } - - /** - * {...@inheritdoc} - */ - @Override - public TestRouterResult getResult() throws ProtocolException, IOException { - TestRouterResult result = null; - if (hasPendingTests()) { - String test = tests.poll(); - result = new TestRouterResult(test, instance.runTest(test)); - } - return result; - } - - /** - * {...@inheritdoc} - */ - @Override - public boolean hasPendingTests() { - return !tests.isEmpty(); - } -} Deleted: trunk/core/src/test/org/jtestserver/client/router/TestRouter.java =================================================================== --- trunk/core/src/test/org/jtestserver/client/router/TestRouter.java 2009-06-16 22:17:14 UTC (rev 5577) +++ trunk/core/src/test/org/jtestserver/client/router/TestRouter.java 2009-06-16 22:22:58 UTC (rev 5578) @@ -1,69 +0,0 @@ -/* - -JTestServer is a client/server framework for testing any JVM implementation. - -Copyright (C) 2009 Fabien DUMINY (fdum...@jnode.org) - -JTestServer is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -JTestServer is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -*/ -package org.jtestserver.client.router; - -import java.io.IOException; - -import org.jtestserver.common.protocol.ProtocolException; - -/** - * @author Fabien DUMINY (fdum...@jnode.org) - * - */ -public interface TestRouter { - - /** - * @throws ProtocolException - * @throws IOException - * - */ - void start() throws IOException, ProtocolException; - - /** - * @throws ProtocolException - * @throws IOException - * - */ - void stop() throws IOException, ProtocolException; - - /** - * @param test - * @return - * @throws IOException - * @throws ProtocolException - */ - void addTest(String test) throws ProtocolException, IOException; - - - /** - * - * @return - * @throws IOException - * @throws ProtocolException - * @throws Exception - */ - TestRouterResult getResult() throws ProtocolException, IOException, Exception; - - /** - * @return - */ - boolean hasPendingTests(); -} Deleted: trunk/core/src/test/org/jtestserver/client/router/TestRouterResult.java =================================================================== --- trunk/core/src/test/org/jtestserver/client/router/TestRouterResult.java 2009-06-16 22:17:14 UTC (rev 5577) +++ trunk/core/src/test/org/jtestserver/client/router/TestRouterResult.java 2009-06-16 22:22:58 UTC (rev 5578) @@ -1,45 +0,0 @@ -/* - -JTestServer is a client/server framework for testing any JVM implementation. - -Copyright (C) 2009 Fabien DUMINY (fdum...@jnode.org) - -JTestServer is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -JTestServer is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -*/ -package org.jtestserver.client.router; - -import gnu.testlet.runner.RunResult; - -/** - * @author Fabien DUMINY (fdum...@jnode.org) - * - */ -public class TestRouterResult { - private final String test; - private final RunResult runResult; - public TestRouterResult(String test, RunResult runResult) { - super(); - this.test = test; - this.runResult = runResult; - } - public String getTest() { - return test; - } - public RunResult getRunResult() { - return runResult; - } - - -} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------------ Crystal Reports - New Free Runtime and 30 Day Trial Check out the new simplified licensing option that enables unlimited royalty-free distribution of the report engine for externally facing server and web deployment. http://p.sf.net/sfu/businessobjects _______________________________________________ Jnode-svn-commits mailing list Jnode-svn-commits@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jnode-svn-commits