private Address getCoordinator () { assertChannel(); if (view != null) return view.getMembers().get(0); throw new SpaceError ("Channel not ready - coordinator is null"); } private void assertChannel () {
public void close() throws IOException { block(); channel.close(); } public void out(Object key, Object value) {
protected void stopService () throws Exception { if (rs != null) rs.close(); NameRegistrar.unregister (rspaceUri); } }
private void sendToCoordinator (Request r) { while (true) { Address coordinator = getCoordinator(); try { channel.send (new Message (coordinator, r)); break; } catch (Exception e) { error ("error " + e.getMessage() + ", retrying"); try { Thread.sleep (MAX_WAIT); } catch (InterruptedException ex) { } } } } private void initChannel (String groupName, String configFile)
Object obj = msg.getObject(); if (trace && logger != null) { evt = createTrace (" receive: " + msg.toString()); if (obj != null) { evt.addMessage (" object: " + obj.toString()); notifyListeners(r.key, r.value); break; case Request.PUSH: notifyListeners(r.key, r.value); break; case Request.PUT: notifyListeners(r.key, r.value); break; case Request.RDP: send (msg.getSrc(), new Request ( Request.RDP_RESPONSE, if (v != null) { MD5Template tmpl = new MD5Template(r.key, v); send (null, new Request ( Request.INP_NOTIFICATION, send (msg.getSrc(), new Request (
public void viewAccepted (View view) { this.view = view; if (logger != null) { LogEvent evt = createInfo ("view-accepted"); evt.addMessage (view.toString()); Logger.log (evt); } if (replicate && isCoordinator() && view.getMembers().size() > 1 && sp instanceof TSpace) { new Thread () { public void run() { info ("New node joined, sending full Space"); send (null, new Request ( Request.SPACE_COPY, null, ((TSpace)sp).getEntries() ) ); } }.start(); } } public boolean isCoordinator () {
public void push (Object key, Object value, long timeout) { getCoordinator(); try { Request r = new Request (Request.PUSH, key, value, timeout); channel.send (new Message (null, r)); Object o = sp.in (r.getUUID(), MAX_OUT_WAIT); if (o == null) throw new SpaceError ("Could not push " + key); } catch (Exception e) { throw new SpaceError (e); } } public void put (Object key, Object value) {
public synchronized void addListener (Object key, SpaceListener listener, long timeout) { getSL().out (key, listener, timeout); } public synchronized void removeListener
public boolean existAny (Object[] keys, long timeout) { long now = System.currentTimeMillis(); long end = now + timeout; while (((now = System.currentTimeMillis()) < end)) { if (existAny (keys)) return true; try { synchronized (sp) { if (!sp.existAny (keys, timeout)) sp.wait (end - now); } } catch (InterruptedException e) { } } return false; } // ----------------------------------------------------------------
private void send (Address destination, Request r) { try { channel.send (new Message (destination, r)); } catch (Exception e) { error (e); } } private void sendToCoordinator (Request r)
public void initService() throws ConfigurationException { Space sp = SpaceFactory.getSpace (cfg.get ("space", "")); rspaceUri = cfg.get ("rspace", "rspace"); try { rs = new ReplicatedSpace ( sp, cfg.get ("group", "rspace"), cfg.get ("config", "cfg.jgroups.xml"), getLog().getLogger(), getLog().getRealm(), cfg.getBoolean ("trace"), cfg.getBoolean ("replicate", false) ); NameRegistrar.register (rspaceUri, rs); } catch (Throwable t) { throw new ConfigurationException (t); } } protected void stopService () throws Exception {
public void out (Object key, Object value, long timeout) { getCoordinator(); try { Request r = new Request (Request.OUT, key, value, timeout); channel.send (new Message (null, r)); Object o = sp.in (r.getUUID(), MAX_OUT_WAIT); if (o == null) throw new SpaceError ("Could not out " + key); } catch (Exception e) { throw new SpaceError (e); } } public void push (Object key, Object value) {
public void put (Object key, Object value, long timeout) { getCoordinator(); try { Request r = new Request (Request.PUT, key, value, timeout); channel.send (new Message (null, r)); Object o = sp.in (r.getUUID(), MAX_OUT_WAIT); if (o == null) throw new SpaceError ("Could not put " + key); } catch (Exception e) { throw new SpaceError (e); } } public Object rdp (Object key) {