You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by gi...@apache.org on 2004/11/07 13:06:56 UTC
svn commit: rev 56841 - in cocoon/trunk: . src/blocks/xsp/java/org/apache/cocoon/components/language/programming/java
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:ricardo@apache.org">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:stefano@apache.org">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 {@link 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();