Author: bago
Date: Tue Apr 24 16:47:30 2007
New Revision: 532141

URL: http://svn.apache.org/viewvc?view=rev&rev=532141
Log:
Change DNSServiceXBillImpl callback to use a callback thread because it wasn't 
respecting the contract.
The callback of an asynch method should never be called by the original caller 
thread.
A better solution could be to use a thread pool, but the dnsjnio implementation 
will take care of this.
The DNSJava based Staged executor is simply a proof of concept.

Modified:
    
james/jspf/branches/asynch-jspf/src/main/java/org/apache/james/jspf/impl/DNSServiceXBillImpl.java

Modified: 
james/jspf/branches/asynch-jspf/src/main/java/org/apache/james/jspf/impl/DNSServiceXBillImpl.java
URL: 
http://svn.apache.org/viewvc/james/jspf/branches/asynch-jspf/src/main/java/org/apache/james/jspf/impl/DNSServiceXBillImpl.java?view=diff&rev=532141&r1=532140&r2=532141
==============================================================================
--- 
james/jspf/branches/asynch-jspf/src/main/java/org/apache/james/jspf/impl/DNSServiceXBillImpl.java
 (original)
+++ 
james/jspf/branches/asynch-jspf/src/main/java/org/apache/james/jspf/impl/DNSServiceXBillImpl.java
 Tue Apr 24 16:47:30 2007
@@ -47,13 +47,13 @@
 public class DNSServiceXBillImpl implements DNSService {
 
     // Set seconds after which we return and TempError
-    private int timeOut = 20;
+    protected int timeOut = 20;
 
     // The logger
-    private Logger log;
+    protected Logger log;
     
     // The record limit for lookups
-    private int recordLimit;
+    protected int recordLimit;
     
     /**
      * Default Constructor
@@ -195,12 +195,27 @@
      * @see 
org.apache.james.jspf.core.DNSService#getRecordsAsynch(java.lang.String, int, 
java.lang.Object, org.apache.james.jspf.core.IResponseQueue)
      */
     public void getRecordsAsynch(String hostname, int recordType, Object id,
-            IResponseQueue responsePool) {
+            final IResponseQueue responsePool) {
+        IResponseImpl response;
         try {
-            responsePool.insertResponse(new IResponseImpl(id, 
getRecords(hostname, recordType)));
+            response = new IResponseImpl(id, getRecords(hostname, recordType));
         } catch (TimeoutException e) {
-            responsePool.insertResponse(new IResponseImpl(id, e));
+            response = new IResponseImpl(id, e);
         }
+        new Thread() {
+
+            private IResponseImpl response;
+
+            public void run() {
+                responsePool.insertResponse(response);
+            }
+
+            public Thread setResponse(IResponseImpl response) {
+                this.response = response;
+                return this;
+            }
+            
+        }.setResponse(response).start();
 
     }
 



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to