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.InterruptedPushException; 31 import org.objectweb.dream.Push; 32 import org.objectweb.dream.PushException; 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 LockPushUnlockImpl extends AbstractComponent implements Push 44 { 45 46 protected Push outPushItf; 47 protected Mutex mutexItf; 48 49 53 57 public void push(Message message, Map context) throws PushException 58 { 59 try 60 { 61 mutexItf.lock(); 62 } 63 catch (InterruptedException e) 64 { 65 throw new InterruptedPushException(e); 66 } 67 try 68 { 69 outPushItf.push(message, context); 70 } 71 finally 72 { 73 mutexItf.unlock(); 74 } 75 } 76 77 81 85 public synchronized void bindFc(String clientItfName, Object serverItf) 86 throws NoSuchInterfaceException, IllegalBindingException, 87 IllegalLifeCycleException 88 { 89 super.bindFc(clientItfName, serverItf); 90 if (clientItfName.equals(Push.OUT_PUSH_ITF_NAME)) 91 { 92 outPushItf = (Push) serverItf; 93 } 94 else if (clientItfName.equals(Mutex.MUTEX_ITF_NAME)) 95 { 96 mutexItf = (Mutex) serverItf; 97 } 98 } 99 100 103 public String [] listFc() 104 { 105 return new String []{Push.OUT_PUSH_ITF_NAME, Mutex.MUTEX_ITF_NAME}; 106 } 107 108 } | Popular Tags |