Author: giacomo Date: Sun Nov 7 04:06:55 2004 New Revision: 56841 Modified: cocoon/trunk/gump.xml cocoon/trunk/src/blocks/xsp/java/org/apache/cocoon/components/language/programming/java/JavaLanguage.java cocoon/trunk/src/blocks/xsp/java/org/apache/cocoon/components/language/programming/java/Jikes.java Log: migrated XSP block to RunnableManager
Modified: cocoon/trunk/gump.xml ============================================================================== --- cocoon/trunk/gump.xml (original) +++ cocoon/trunk/gump.xml Sun Nov 7 04:06:55 2004 @@ -1086,6 +1086,7 @@ </ant> <depend project="cocoon" inherit="all"/> + <depend project="concurrent"/> <work nested="tools/anttasks"/> <home nested="build/cocoon-@@DATE@@"/> Modified: cocoon/trunk/src/blocks/xsp/java/org/apache/cocoon/components/language/programming/java/JavaLanguage.java ============================================================================== --- cocoon/trunk/src/blocks/xsp/java/org/apache/cocoon/components/language/programming/java/JavaLanguage.java (original) +++ cocoon/trunk/src/blocks/xsp/java/org/apache/cocoon/components/language/programming/java/JavaLanguage.java Sun Nov 7 04:06:55 2004 @@ -44,7 +44,7 @@ * The Java programming language processor * * @author <a href="mailto:[EMAIL PROTECTED]">Ricardo Rocha</a> - * @version CVS $Id: JavaLanguage.java,v 1.3 2004/07/12 12:47:29 antonio Exp $ + * @version CVS $Id$ */ public class JavaLanguage extends CompiledProgrammingLanguage implements Initializable, ThreadSafe, Serviceable, Disposable { @@ -176,6 +176,10 @@ if (compiler instanceof LogEnabled) { ((LogEnabled)compiler).enableLogging(getLogger()); } + // some may be Serviceable + if (compiler instanceof Serviceable) { + ((Serviceable)compiler).service(this.manager); + } int pos = name.lastIndexOf(File.separatorChar); String filename = name.substring(pos + 1); @@ -214,6 +218,9 @@ } catch (IOException e) { getLogger().warn("Error during compilation", e); throw new LanguageException("Error during compilation: " + e.getMessage()); + } catch (ServiceException e) { + getLogger().warn("Could not initialize the compiler", e); + throw new LanguageException("Could not initialize the compiler: " + e.getMessage()); } } Modified: cocoon/trunk/src/blocks/xsp/java/org/apache/cocoon/components/language/programming/java/Jikes.java ============================================================================== --- cocoon/trunk/src/blocks/xsp/java/org/apache/cocoon/components/language/programming/java/Jikes.java (original) +++ cocoon/trunk/src/blocks/xsp/java/org/apache/cocoon/components/language/programming/java/Jikes.java Sun Nov 7 04:06:55 2004 @@ -25,31 +25,40 @@ import java.util.List; import java.util.StringTokenizer; +import org.apache.avalon.framework.service.ServiceException; +import org.apache.avalon.framework.service.ServiceManager; +import org.apache.avalon.framework.service.Serviceable; import org.apache.cocoon.components.language.programming.CompilerError; +import org.apache.cocoon.components.thread.RunnableManager; +import EDU.oswego.cs.dl.util.concurrent.CountDown; /** * This class wraps IBM's <i>Jikes</i> Java compiler * NOTE: inspired by the Apache Jasper implementation. * @author <a href="mailto:[EMAIL PROTECTED]">Stefano Mazzocchi</a> - * @version CVS $Id: Jikes.java,v 1.1 2004/03/10 12:58:07 stephan Exp $ + * @version CVS $Id$ * @since 2.0 */ -public class Jikes extends AbstractJavaCompiler { +public class Jikes extends AbstractJavaCompiler implements Serviceable { static final int OUTPUT_BUFFER_SIZE = 1024; static final int BUFFER_SIZE = 512; - private class StreamPumper extends Thread { + private ServiceManager m_serviceManager; + + private class StreamPumper implements Runnable { private BufferedInputStream stream; private boolean endOfStream = false; private int SLEEP_TIME = 5; private OutputStream out; + private CountDown m_done; - public StreamPumper(BufferedInputStream is, OutputStream out) { + public StreamPumper(BufferedInputStream is, OutputStream out, CountDown done) { this.stream = is; this.out = out; + m_done = done; } public void pumpStream() throws IOException { @@ -69,15 +78,25 @@ try { while (!endOfStream) { pumpStream(); - sleep(SLEEP_TIME); + Thread.sleep(SLEEP_TIME); } } catch (Exception e) { // getLogger().warn("Jikes.run()", e); } + m_done.release(); // signal 'we are finished' } } /** + * Set the [EMAIL PROTECTED] ServiceManager} + */ + public void service( ServiceManager serviceManager ) + throws ServiceException + { + m_serviceManager = serviceManager; + } + + /** * Copy arguments to a string array * * @param arguments The compiler arguments @@ -128,15 +147,26 @@ BufferedInputStream compilerErr = new BufferedInputStream(p.getErrorStream()); - StreamPumper errPumper = new StreamPumper(compilerErr, tmpErr); + RunnableManager runnableManager = null; + try + { + runnableManager = (RunnableManager)m_serviceManager.lookup( RunnableManager.ROLE ); + } + catch( final ServiceException se ) + { + getLogger().error( "Cannot get RunnableManager", se ); + throw new IOException( "Cannot get RunnableManager" ); + } - errPumper.start(); + final CountDown done = new CountDown( 1 ); + StreamPumper errPumper = new StreamPumper(compilerErr, tmpErr, done); + runnableManager.execute( errPumper ); + m_serviceManager.release( runnableManager ); p.waitFor(); exitValue = p.exitValue(); - // Wait until the complete error stream has been read - errPumper.join(); + done.acquire(); // Wait for StreadmPumper to finish compilerErr.close(); p.destroy();