1 24 25 package org.objectweb.dream.synchro; 26 27 import java.util.Map ; 28 29 import org.objectweb.dream.AbstractComponent; 30 import org.objectweb.dream.InterruptedPullException; 31 import org.objectweb.dream.Pull; 32 import org.objectweb.dream.PullException; 33 import org.objectweb.dream.message.Message; 34 import org.objectweb.fractal.api.NoSuchInterfaceException; 35 import org.objectweb.fractal.api.control.IllegalBindingException; 36 import org.objectweb.fractal.api.control.IllegalLifeCycleException; 37 38 43 public class LockPullUnlockImpl extends AbstractComponent implements Pull 44 { 45 46 protected Pull inPullItf; 47 protected Mutex mutexItf; 48 49 53 56 public Message pull(Map context) throws PullException 57 { 58 Message msg = null; 59 try 60 { 61 mutexItf.lock(); 62 } 63 catch (InterruptedException e) 64 { 65 throw new InterruptedPullException(e); 66 } 67 try 68 { 69 msg = inPullItf.pull(context); 70 } 71 finally 72 { 73 mutexItf.unlock(); 74 } 75 return msg; 76 } 77 78 82 86 public synchronized void bindFc(String clientItfName, Object serverItf) 87 throws NoSuchInterfaceException, IllegalBindingException, 88 IllegalLifeCycleException 89 { 90 super.bindFc(clientItfName, serverItf); 91 if (clientItfName.equals(Pull.IN_PULL_ITF_NAME)) 92 { 93 inPullItf = (Pull) serverItf; 94 } 95 else if (clientItfName.equals(Mutex.MUTEX_ITF_NAME)) 96 { 97 mutexItf = (Mutex) serverItf; 98 } 99 } 100 101 104 public String [] listFc() 105 { 106 return new String []{Pull.IN_PULL_ITF_NAME, Mutex.MUTEX_ITF_NAME}; 107 } 108 109 } | Popular Tags |