multiplexertest.java
来自「JGRoups源码」· Java 代码 · 共 1,085 行 · 第 1/3 页
JAVA
1,085 行
System.out.println("c2: " + c2); System.out.println("c1_repl (removed odd substate): " + c1_repl); System.out.println("c2_repl (removed even substate): " + c2_repl); assertEquals(5, c1_repl.size()); assertEquals(5, c2_repl.size()); _testEvenNumbersPresent(c1_repl); _testOddNumbersPresent(c2_repl); } private void _testEvenNumbersPresent(Cache c) { Integer[] evens=new Integer[]{new Integer(0), new Integer(2), new Integer(4), new Integer(6), new Integer(8)}; _testNumbersPresent(c, evens); } private void _testOddNumbersPresent(Cache c) { Integer[] odds=new Integer[]{new Integer(1), new Integer(3), new Integer(5), new Integer(7), new Integer(9)}; _testNumbersPresent(c, odds); } private void _testNumbersPresent(Cache c, Integer[] numbers) { int len=numbers.length; assertEquals(len, c.size()); for(int i=0; i < numbers.length; i++) { Integer number=numbers[i]; assertEquals(number, c.get(number)); } } public void testGetSubstatesMultipleTimes() throws Exception { ch1=factory.createMultiplexerChannel(STACK_NAME, "c1"); ch1.connect("bla"); c1=new ExtendedCache(ch1, "cache-1"); assertEquals("cache has to be empty initially", 0, c1.size()); ch2=factory.createMultiplexerChannel(STACK_NAME, "c2"); ch2.connect("bla"); c2=new ExtendedCache(ch2, "cache-2"); assertEquals("cache has to be empty initially", 0, c2.size()); for(int i=0; i < 10; i++) { c1.put(new Integer(i), new Integer(i)); c2.put(new Integer(i), new Integer(i)); } ch1_repl=factory2.createMultiplexerChannel(STACK_NAME, "c1"); ch2_repl=factory2.createMultiplexerChannel(STACK_NAME, "c2"); ch1_repl.connect("bla"); c1_repl=new ExtendedCache(ch1_repl, "cache-1-repl"); boolean rc=ch1_repl.getState(null, "odd", 5000); System.out.println("state transfer: " + rc); ch2_repl.connect("bla"); c2_repl=new ExtendedCache(ch2_repl, "cache-2-repl"); rc=ch2_repl.getState(null, "even", 5000); System.out.println("state transfer: " + rc); Util.sleep(500); _testOddNumbersPresent(c2_repl); System.out.println("Caches after state transfers:"); System.out.println("c1: " + c1); System.out.println("c2: " + c2); System.out.println("c1_repl (removed odd substate): " + c1_repl); System.out.println("c2_repl (removed even substate): " + c2_repl); assertEquals(5, c2_repl.size()); rc=ch2_repl.getState(null, "odd", 5000); Util.sleep(500); System.out.println("c2_repl (removed odd substate): " + c2_repl); _testEvenNumbersPresent(c2_repl); assertEquals(5, c2_repl.size()); rc=ch2_repl.getState(null, "even", 5000); Util.sleep(500); System.out.println("c2_repl (removed even substate): " + c2_repl); _testOddNumbersPresent(c2_repl); assertEquals(5, c2_repl.size()); rc=ch2_repl.getState(null, "odd", 5000); Util.sleep(500); System.out.println("c2_repl (removed odd substate): " + c2_repl); _testEvenNumbersPresent(c2_repl); } /* CAUTION: JDK 5 specific code */ private String dumpThreads() { StringBuffer sb=new StringBuffer(); ThreadMXBean bean=ManagementFactory.getThreadMXBean(); long[] ids=bean.getAllThreadIds(); ThreadInfo[] threads=bean.getThreadInfo(ids, 20); for(int i=0; i < threads.length; i++) { ThreadInfo info=threads[i]; if(info == null) continue; sb.append(info.getThreadName()).append(":\n"); StackTraceElement[] stack_trace=info.getStackTrace(); for(int j=0; j < stack_trace.length; j++) { StackTraceElement el=stack_trace[j]; sb.append("at ").append(el.getClassName()).append(".").append(el.getMethodName()); sb.append("(").append(el.getFileName()).append(":").append(el.getLineNumber()).append(")"); sb.append("\n"); } sb.append("\n\n"); } return sb.toString(); } public static Test suite() { return new TestSuite(MultiplexerTest.class); } public static void main(String[] args) { junit.textui.TestRunner.run(MultiplexerTest.suite()); } private static void log(String msg) { System.out.println(Thread.currentThread() + " -- "+ msg); } private static class Cache extends ExtendedReceiverAdapter { final Map data=new HashMap(); Channel ch; String name; public Cache(Channel ch, String name) { this.ch=ch; this.name=name; this.ch.setReceiver(this); } protected Object get(Object key) { synchronized(data) { return data.get(key); } } protected void put(Object key, Object val) throws Exception { Object[] buf=new Object[2]; buf[0]=key; buf[1]=val; Message msg=new Message(null, null, buf); ch.send(msg); } protected int size() { synchronized(data) { return data.size(); } } public void receive(Message msg) { Object[] modification=(Object[])msg.getObject(); Object key=modification[0]; Object val=modification[1]; synchronized(data) { // System.out.println("****** [" + name + "] received PUT(" + key + ", " + val + ") " + " from " + msg.getSrc() + " *******"); data.put(key,val); } } public byte[] getState() { byte[] state=null; synchronized(data) { try { state=Util.objectToByteBuffer(data); } catch(Exception e) { e.printStackTrace(); return null; } } return state; } public byte[] getState(String state_id) { return getState(); } public void setState(byte[] state) { Map m; try { m=(Map)Util.objectFromByteBuffer(state); synchronized(data) { data.clear(); data.putAll(m); } } catch(Exception e) { e.printStackTrace(); } } public void setState(String state_id, byte[] state) { setState(state); } public void getState(OutputStream ostream){ ObjectOutputStream oos = null; try{ oos = new ObjectOutputStream(ostream); synchronized(data){ oos.writeObject(data); } oos.flush(); } catch (IOException e){} finally{ try{ if(oos != null) oos.close(); } catch (IOException e){ System.err.println(e); } } } public void getState(String state_id, OutputStream ostream) { getState(ostream); } public void setState(InputStream istream) { ObjectInputStream ois = null; try { ois = new ObjectInputStream(istream); Map m = (Map)ois.readObject(); synchronized (data) { data.clear(); data.putAll(m); } } catch (Exception e) {} finally{ try { if(ois != null) ois.close(); } catch (IOException e) { System.err.println(e); } } } public void setState(String state_id, InputStream istream) { setState(istream); } public void clear() { synchronized (data){ data.clear(); } } public void viewAccepted(View new_view) { log("view is " + new_view); } public String toString() { return data.toString(); } private void log(String msg) { System.out.println("-- [" + name + "] " + msg); } } static class ExtendedCache extends Cache { public ExtendedCache(Channel ch, String name) { super(ch, name); } public byte[] getState(String state_id) { Map copy=null; synchronized (data){ copy=new HashMap(data); } for(Iterator it=copy.keySet().iterator(); it.hasNext();) { Integer key=(Integer)it.next(); if(state_id.equals("odd") && key.intValue() % 2 != 0) it.remove(); else if(state_id.equals("even") && key.intValue() % 2 == 0) it.remove(); } try { return Util.objectToByteBuffer(copy); } catch(Exception e) { e.printStackTrace(); return null; } } public void getState(String state_id,OutputStream os) { Map copy=null; synchronized (data){ copy=new HashMap(data); } for(Iterator it=copy.keySet().iterator(); it.hasNext();) { Integer key=(Integer)it.next(); if(state_id.equals("odd") && key.intValue() % 2 != 0) it.remove(); else if(state_id.equals("even") && key.intValue() % 2 == 0) it.remove(); } ObjectOutputStream oos = null; try { oos=new ObjectOutputStream(os); oos.writeObject(copy); oos.flush(); } catch (IOException e){} finally{ try{ if(oos != null) oos.close(); } catch (IOException e){ System.err.println(e); } } } public void setState(String state_id, InputStream is){ setState(is); } public void setState(String state_id, byte[] state) { setState(state); } public String toString() { synchronized(data) { Set keys=new TreeSet(data.keySet()); StringBuffer sb=new StringBuffer(); for(Iterator it=keys.iterator(); it.hasNext();) { Object o=it.next(); sb.append(o).append("=").append(data.get(o)).append(" "); } return sb.toString(); } } }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?