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();