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 18:05:25 UTC

svn commit: rev 56853 - cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/adapter/impl

Author: giacomo
Date: Sun Nov  7 09:05:24 2004
New Revision: 56853

Modified:
   cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/adapter/impl/AbstractCopletAdapter.java
Log:
migrated to the RunnableManager package

Modified: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/adapter/impl/AbstractCopletAdapter.java
==============================================================================
--- cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/adapter/impl/AbstractCopletAdapter.java	(original)
+++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/adapter/impl/AbstractCopletAdapter.java	Sun Nov  7 09:05:24 2004
@@ -23,6 +23,7 @@
 import org.apache.avalon.framework.service.ServiceManager;
 import org.apache.avalon.framework.service.Serviceable;
 import org.apache.avalon.framework.thread.ThreadSafe;
+import org.apache.cocoon.components.thread.RunnableManager;
 import org.apache.cocoon.portal.coplet.CopletData;
 import org.apache.cocoon.portal.coplet.CopletInstanceData;
 import org.apache.cocoon.portal.coplet.adapter.CopletAdapter;
@@ -30,6 +31,7 @@
 import org.apache.cocoon.xml.XMLUtils;
 import org.xml.sax.ContentHandler;
 import org.xml.sax.SAXException;
+import EDU.oswego.cs.dl.util.concurrent.CountDown;
 
 /**
  * This is the abstract base adapter to use pipelines as coplets
@@ -60,7 +62,7 @@
  * @author <a href="mailto:cziegeler@s-und-n.de">Carsten Ziegeler</a>
  * @author <a href="mailto:volker.schmitt@basf-it-services.com">Volker Schmitt</a>
  * 
- * @version CVS $Id: AbstractCopletAdapter.java,v 1.11 2004/04/25 20:09:34 haul Exp $
+ * @version CVS $Id$
  */
 public abstract class AbstractCopletAdapter 
     extends AbstractLogEnabled
@@ -115,14 +117,13 @@
                 if ( timeout != null ) {
                     final int milli = timeout.intValue() * 1000;
                     LoaderThread loader = new LoaderThread(this, coplet, buffer);
-                    Thread thread = new Thread(loader);
-                    thread.start();
+                    final RunnableManager runnableManager = (RunnableManager)this.manager.lookup( RunnableManager.ROLE );
+                    runnableManager.execute( loader );
+                    this.manager.release( runnableManager );
                     try {
-                        thread.join(milli);
+                        read = loader.join( milli );
                     } catch (InterruptedException ignore) {
-                    }
-                    if ( loader.finished ) {
-                        read = true;
+                        // ignored
                     }
                 } else {
                     this.streamContent( coplet, buffer );
@@ -202,10 +203,10 @@
 
 final class LoaderThread implements Runnable {
     
-    private  AbstractCopletAdapter adapter;
-    private  ContentHandler        handler;
-    private  CopletInstanceData    coplet;
-    boolean  finished;
+    private final AbstractCopletAdapter adapter;
+    private final ContentHandler        handler;
+    private final CopletInstanceData    coplet;
+    private final CountDown             finished;
     Exception exception;
 
     public LoaderThread(AbstractCopletAdapter adapter, 
@@ -214,6 +215,7 @@
         this.adapter = adapter;
         this.coplet  = coplet;
         this.handler = handler;
+        this.finished = new CountDown( 1 );
     }
     
     public void run() {
@@ -222,8 +224,14 @@
         } catch (Exception local) {
             this.exception = local;
         } finally {
-            this.finished = true;
+            this.finished.release();
         }
+    }
+    
+    boolean join( final long milis )
+    throws InterruptedException 
+    {
+        return this.finished.attempt( milis );
     }
     
 }