From: markt Date: Wed, 24 Dec 2008 18:22:36 +0000 (+0000) Subject: Remaining generics for o.a.c.tribes X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=198ed2484b865ab4a769ca2ca25ef5cbd39376a0;p=tomcat7.0 Remaining generics for o.a.c.tribes Change the Comparator in Membership to align with AbsoluteOrder Fix various Eclipse warnings (unused code etc) git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@729351 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/java/org/apache/catalina/tribes/ChannelException.java b/java/org/apache/catalina/tribes/ChannelException.java index c1fd907c6..b202df0ed 100644 --- a/java/org/apache/catalina/tribes/ChannelException.java +++ b/java/org/apache/catalina/tribes/ChannelException.java @@ -38,7 +38,7 @@ public class ChannelException extends Exception { /* * Holds a list of faulty members */ - private ArrayList faultyMembers=null; + private ArrayList faultyMembers=null; /** * Constructor, creates a ChannelException @@ -87,7 +87,7 @@ public class ChannelException extends Exception { } else { buf.append("; Faulty members:"); for ( int i=0; i(); if ( !faultyMembers.contains(mbr) ) return faultyMembers.add(mbr); else return false; } @@ -132,7 +132,7 @@ public class ChannelException extends Exception { */ public FaultyMember[] getFaultyMembers() { if ( this.faultyMembers==null ) return EMPTY_LIST; - return (FaultyMember[])faultyMembers.toArray(new FaultyMember[faultyMembers.size()]); + return faultyMembers.toArray(new FaultyMember[faultyMembers.size()]); } /** diff --git a/java/org/apache/catalina/tribes/ManagedChannel.java b/java/org/apache/catalina/tribes/ManagedChannel.java index 79ae9a844..dc5df3956 100644 --- a/java/org/apache/catalina/tribes/ManagedChannel.java +++ b/java/org/apache/catalina/tribes/ManagedChannel.java @@ -74,5 +74,5 @@ public interface ManagedChannel extends Channel { * @return Iterator * @see Channel#addInterceptor(ChannelInterceptor) */ - public Iterator getInterceptors(); + public Iterator getInterceptors(); } diff --git a/java/org/apache/catalina/tribes/group/AbsoluteOrder.java b/java/org/apache/catalina/tribes/group/AbsoluteOrder.java index 97f383b8a..c0c36b051 100644 --- a/java/org/apache/catalina/tribes/group/AbsoluteOrder.java +++ b/java/org/apache/catalina/tribes/group/AbsoluteOrder.java @@ -57,13 +57,8 @@ public class AbsoluteOrder { } - public static class AbsoluteComparator implements Comparator { - public int compare(Object o1, Object o2) { - if ( !((o1 instanceof Member) && (o2 instanceof Member)) ) return 0; - return compareMembers((Member)o1,(Member)o2); - } - - public int compareMembers(Member m1, Member m2) { + public static class AbsoluteComparator implements Comparator { + public int compare(Member m1, Member m2) { int result = compareIps(m1,m2); if ( result == 0 ) result = comparePorts(m1,m2); if ( result == 0 ) result = compareIds(m1,m2); @@ -97,7 +92,7 @@ public class AbsoluteOrder { } protected int compareBytes(byte b1, byte b2) { - return compareInts((int)b1,(int)b2); + return compareInts(b1,b2); } protected int compareInts(int b1, int b2) { diff --git a/java/org/apache/catalina/tribes/group/GroupChannel.java b/java/org/apache/catalina/tribes/group/GroupChannel.java index 00e4f3931..f8cb31293 100644 --- a/java/org/apache/catalina/tribes/group/GroupChannel.java +++ b/java/org/apache/catalina/tribes/group/GroupChannel.java @@ -88,12 +88,12 @@ public class GroupChannel extends ChannelInterceptorBase implements ManagedChann /** * A list of membership listeners that subscribe to membership announcements */ - protected ArrayList membershipListeners = new ArrayList(); + protected ArrayList membershipListeners = new ArrayList(); /** * A list of channel listeners that subscribe to incoming messages */ - protected ArrayList channelListeners = new ArrayList(); + protected ArrayList channelListeners = new ArrayList(); /** * If set to true, the GroupChannel will check to make sure that @@ -147,7 +147,7 @@ public class GroupChannel extends ChannelInterceptorBase implements ManagedChann */ public void heartbeat() { super.heartbeat(); - Iterator i = membershipListeners.iterator(); + Iterator i = membershipListeners.iterator(); while ( i.hasNext() ) { Object o = i.next(); if ( o instanceof Heartbeat ) ((Heartbeat)o).heartbeat(); @@ -344,7 +344,7 @@ public class GroupChannel extends ChannelInterceptorBase implements ManagedChann if ( getFirstInterceptor() != null && ((getFirstInterceptor().getNext() instanceof ChannelCoordinator))) { ChannelInterceptor interceptor = null; - Class clazz = null; + Class clazz = null; try { clazz = Class.forName("org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor", true,GroupChannel.class.getClassLoader()); @@ -529,7 +529,7 @@ public class GroupChannel extends ChannelInterceptorBase implements ManagedChann * Returns an iterator of all the interceptors in this stack * @return Iterator */ - public Iterator getInterceptors() { + public Iterator getInterceptors() { return new InterceptorIterator(this.getNext(),this.coordinator); } @@ -596,7 +596,7 @@ public class GroupChannel extends ChannelInterceptorBase implements ManagedChann * * @version 1.0 */ - public static class InterceptorIterator implements Iterator { + public static class InterceptorIterator implements Iterator { private ChannelInterceptor end; private ChannelInterceptor start; public InterceptorIterator(ChannelInterceptor start, ChannelInterceptor end) { @@ -608,8 +608,8 @@ public class GroupChannel extends ChannelInterceptorBase implements ManagedChann return start!=null && start != end; } - public Object next() { - Object result = null; + public ChannelInterceptor next() { + ChannelInterceptor result = null; if ( hasNext() ) { result = start; start = start.getNext(); diff --git a/java/org/apache/catalina/tribes/group/RpcChannel.java b/java/org/apache/catalina/tribes/group/RpcChannel.java index 2239e35ce..48ccbc4c9 100644 --- a/java/org/apache/catalina/tribes/group/RpcChannel.java +++ b/java/org/apache/catalina/tribes/group/RpcChannel.java @@ -43,7 +43,7 @@ public class RpcChannel implements ChannelListener{ private RpcCallback callback; private byte[] rpcId; - private HashMap responseMap = new HashMap(); + private HashMap responseMap = new HashMap(); /** * Create an RPC channel. You can have several RPC channels attached to a group @@ -90,7 +90,7 @@ public class RpcChannel implements ChannelListener{ if ( rpcOptions != NO_REPLY ) collector.wait(timeout); } } catch ( InterruptedException ix ) { - Thread.currentThread().interrupted(); + Thread.interrupted(); //throw new ChannelException(ix); }finally { responseMap.remove(key); @@ -102,7 +102,7 @@ public class RpcChannel implements ChannelListener{ RpcMessage rmsg = (RpcMessage)msg; RpcCollectorKey key = new RpcCollectorKey(rmsg.uuid); if ( rmsg.reply ) { - RpcCollector collector = (RpcCollector)responseMap.get(key); + RpcCollector collector = responseMap.get(key); if (collector == null) { callback.leftOver(rmsg.message, sender); } else { @@ -180,7 +180,7 @@ public class RpcChannel implements ChannelListener{ * @version 1.0 */ public static class RpcCollector { - public ArrayList responses = new ArrayList(); + public ArrayList responses = new ArrayList(); public RpcCollectorKey key; public int options; public int destcnt; @@ -227,7 +227,7 @@ public class RpcChannel implements ChannelListener{ } public Response[] getResponses() { - return (Response[])responses.toArray(new Response[responses.size()]); + return responses.toArray(new Response[responses.size()]); } } diff --git a/java/org/apache/catalina/tribes/group/interceptors/DomainFilterInterceptor.java b/java/org/apache/catalina/tribes/group/interceptors/DomainFilterInterceptor.java index f2e898fd0..8f3cd57b6 100644 --- a/java/org/apache/catalina/tribes/group/interceptors/DomainFilterInterceptor.java +++ b/java/org/apache/catalina/tribes/group/interceptors/DomainFilterInterceptor.java @@ -33,8 +33,6 @@ import java.util.Arrays; */ public class DomainFilterInterceptor extends ChannelInterceptorBase { - private static org.apache.juli.logging.Log log = org.apache.juli.logging.LogFactory.getLog( DomainFilterInterceptor.class ); - protected Membership membership = null; protected byte[] domain = new byte[0]; diff --git a/java/org/apache/catalina/tribes/group/interceptors/FragmentationInterceptor.java b/java/org/apache/catalina/tribes/group/interceptors/FragmentationInterceptor.java index cee3955a3..0952662b2 100644 --- a/java/org/apache/catalina/tribes/group/interceptors/FragmentationInterceptor.java +++ b/java/org/apache/catalina/tribes/group/interceptors/FragmentationInterceptor.java @@ -43,7 +43,7 @@ import org.apache.catalina.tribes.io.XByteBuffer; public class FragmentationInterceptor extends ChannelInterceptorBase { private static org.apache.juli.logging.Log log = org.apache.juli.logging.LogFactory.getLog( FragmentationInterceptor.class ); - protected HashMap fragpieces = new HashMap(); + protected HashMap fragpieces = new HashMap(); private int maxSize = 1024*100; private long expire = 1000 * 60; //one minute expiration protected boolean deepclone = true; @@ -72,10 +72,10 @@ public class FragmentationInterceptor extends ChannelInterceptorBase { public FragCollection getFragCollection(FragKey key, ChannelMessage msg) { - FragCollection coll = (FragCollection)fragpieces.get(key); + FragCollection coll = fragpieces.get(key); if ( coll == null ) { synchronized (fragpieces) { - coll = (FragCollection)fragpieces.get(key); + coll = fragpieces.get(key); if ( coll == null ) { coll = new FragCollection(msg); fragpieces.put(key, coll); @@ -135,7 +135,7 @@ public class FragmentationInterceptor extends ChannelInterceptorBase { public void heartbeat() { try { - Set set = fragpieces.keySet(); + Set set = fragpieces.keySet(); Object[] keys = set.toArray(); for ( int i=0; i= 0 ) { try { - sendElectionMsg(local, (MemberImpl) msg.getMembers()[current], msg); + sendElectionMsg(local, msg.getMembers()[current], msg); sent = true; }catch ( ChannelException x ) { log.warn("Unable to send election message to:"+msg.getMembers()[current]); @@ -323,8 +323,6 @@ public class NonBlockingCoordinator extends ChannelInterceptorBase { Membership merged = mergeOnArrive(msg, sender); if (isViewConf(msg)) handleViewConf(msg, sender, merged); else handleToken(msg, sender, merged); - ClassLoader loader; - } protected void handleToken(CoordinationMessage msg, Member sender,Membership merged) throws ChannelException { @@ -349,14 +347,14 @@ public class NonBlockingCoordinator extends ChannelInterceptorBase { suggestedView = new Membership(local,AbsoluteOrder.comp,true); suggestedviewId = msg.getId(); Arrays.fill(suggestedView,merged.getMembers()); - msg.view = (MemberImpl[])merged.getMembers(); + msg.view = merged.getMembers(); sendElectionMsgToNextInline(local,msg); } } else { //leadership change suggestedView = null; suggestedviewId = null; - msg.view = (MemberImpl[])merged.getMembers(); + msg.view = merged.getMembers(); sendElectionMsgToNextInline(local,msg); } } @@ -366,7 +364,7 @@ public class NonBlockingCoordinator extends ChannelInterceptorBase { //I am the new leader //startElection(false); } else { - msg.view = (MemberImpl[])merged.getMembers(); + msg.view = merged.getMembers(); sendElectionMsgToNextInline(local,msg); } } @@ -692,25 +690,25 @@ public class NonBlockingCoordinator extends ChannelInterceptorBase { //header int offset = 16; //leader - int ldrLen = buf.toInt(buf.getBytesDirect(),offset); + int ldrLen = XByteBuffer.toInt(buf.getBytesDirect(),offset); offset += 4; byte[] ldr = new byte[ldrLen]; System.arraycopy(buf.getBytesDirect(),offset,ldr,0,ldrLen); leader = MemberImpl.getMember(ldr); offset += ldrLen; //source - int srcLen = buf.toInt(buf.getBytesDirect(),offset); + int srcLen = XByteBuffer.toInt(buf.getBytesDirect(),offset); offset += 4; byte[] src = new byte[srcLen]; System.arraycopy(buf.getBytesDirect(),offset,src,0,srcLen); source = MemberImpl.getMember(src); offset += srcLen; //view - int mbrCount = buf.toInt(buf.getBytesDirect(),offset); + int mbrCount = XByteBuffer.toInt(buf.getBytesDirect(),offset); offset += 4; view = new MemberImpl[mbrCount]; for (int i=0; i outcounter = new HashMap(); + private HashMap incounter = new HashMap(); + private HashMap incoming = new HashMap(); private long expire = 3000; private boolean forwardExpired = true; private int maxQueue = Integer.MAX_VALUE; @@ -110,7 +110,7 @@ public class OrderInterceptor extends ChannelInterceptorBase { } } protected void processLeftOvers(Member member, boolean force) { - MessageOrder tmp = (MessageOrder)incoming.get(member); + MessageOrder tmp = incoming.get(member); if ( force ) { Counter cnt = getInCounter(member); cnt.setCounter(Integer.MAX_VALUE); @@ -127,7 +127,7 @@ public class OrderInterceptor extends ChannelInterceptorBase { Member member = order.getMessage().getAddress(); Counter cnt = getInCounter(member); - MessageOrder tmp = (MessageOrder)incoming.get(member); + MessageOrder tmp = incoming.get(member); if ( tmp != null ) { order = MessageOrder.add(tmp,order); } @@ -189,7 +189,7 @@ public class OrderInterceptor extends ChannelInterceptorBase { } protected Counter getInCounter(Member mbr) { - Counter cnt = (Counter)incounter.get(mbr); + Counter cnt = incounter.get(mbr); if ( cnt == null ) { cnt = new Counter(); cnt.inc(); //always start at 1 for incoming @@ -199,7 +199,7 @@ public class OrderInterceptor extends ChannelInterceptorBase { } protected Counter getOutCounter(Member mbr) { - Counter cnt = (Counter)outcounter.get(mbr); + Counter cnt = outcounter.get(mbr); if ( cnt == null ) { cnt = new Counter(); outcounter.put(mbr,cnt); diff --git a/java/org/apache/catalina/tribes/group/interceptors/StaticMembershipInterceptor.java b/java/org/apache/catalina/tribes/group/interceptors/StaticMembershipInterceptor.java index d84519398..0ceb6b52d 100644 --- a/java/org/apache/catalina/tribes/group/interceptors/StaticMembershipInterceptor.java +++ b/java/org/apache/catalina/tribes/group/interceptors/StaticMembershipInterceptor.java @@ -25,7 +25,7 @@ import org.apache.catalina.tribes.Channel; public class StaticMembershipInterceptor extends ChannelInterceptorBase { - protected ArrayList members = new ArrayList(); + protected ArrayList members = new ArrayList(); protected Member localMember = null; public StaticMembershipInterceptor() { @@ -66,7 +66,7 @@ public class StaticMembershipInterceptor Member[] others = super.getMembers(); Member[] result = new Member[members.size() + others.length]; for (int i = 0; i < others.length; i++) result[i] = others[i]; - for (int i = 0; i < members.size(); i++) result[i + others.length] = (Member) members.get(i); + for (int i = 0; i < members.size(); i++) result[i + others.length] = members.get(i); AbsoluteOrder.absoluteOrder(result); return result; }//sync @@ -79,7 +79,7 @@ public class StaticMembershipInterceptor * @return Member */ public Member getMember(Member mbr) { - if ( members.contains(mbr) ) return (Member)members.get(members.indexOf(mbr)); + if ( members.contains(mbr) ) return members.get(members.indexOf(mbr)); else return super.getMember(mbr); } @@ -101,7 +101,7 @@ public class StaticMembershipInterceptor public void start(int svc) throws ChannelException { if ( (Channel.SND_RX_SEQ&svc)==Channel.SND_RX_SEQ ) super.start(Channel.SND_RX_SEQ); if ( (Channel.SND_TX_SEQ&svc)==Channel.SND_TX_SEQ ) super.start(Channel.SND_TX_SEQ); - final Member[] mbrs = (Member[])members.toArray(new Member[members.size()]); + final Member[] mbrs = members.toArray(new Member[members.size()]); final ChannelInterceptorBase base = this; Thread t = new Thread() { public void run() { diff --git a/java/org/apache/catalina/tribes/group/interceptors/TcpFailureDetector.java b/java/org/apache/catalina/tribes/group/interceptors/TcpFailureDetector.java index b89409852..1accad314 100644 --- a/java/org/apache/catalina/tribes/group/interceptors/TcpFailureDetector.java +++ b/java/org/apache/catalina/tribes/group/interceptors/TcpFailureDetector.java @@ -78,9 +78,9 @@ public class TcpFailureDetector extends ChannelInterceptorBase { protected Membership membership = null; - protected HashMap removeSuspects = new HashMap(); + protected HashMap removeSuspects = new HashMap(); - protected HashMap addSuspects = new HashMap(); + protected HashMap addSuspects = new HashMap(); public void sendMessage(Member[] destination, ChannelMessage msg, InterceptorPayload payload) throws ChannelException { try { @@ -119,7 +119,7 @@ public class TcpFailureDetector extends ChannelInterceptorBase { if (removeSuspects.containsKey(member)) { //previously marked suspect, system below picked up the member again removeSuspects.remove(member); - } else if (membership.getMember( (MemberImpl) member) == null){ + } else if (membership.getMember(member) == null){ //if we add it here, then add it upwards too //check to see if it is alive if (memberAlive(member)) { @@ -213,7 +213,7 @@ public class TcpFailureDetector extends ChannelInterceptorBase { if (membership.getMember(members[i])!=null) { membership.removeMember((MemberImpl)members[i]); removeSuspects.remove(members[i]); - super.memberDisappeared((MemberImpl)members[i]); + super.memberDisappeared(members[i]); } } //end if } //for @@ -237,9 +237,9 @@ public class TcpFailureDetector extends ChannelInterceptorBase { //check suspect members if they are still alive, //if not, simply issue the memberDisappeared message - MemberImpl[] keys = (MemberImpl[]) removeSuspects.keySet().toArray(new MemberImpl[removeSuspects.size()]); + MemberImpl[] keys = removeSuspects.keySet().toArray(new MemberImpl[removeSuspects.size()]); for (int i = 0; i < keys.length; i++) { - MemberImpl m = (MemberImpl) keys[i]; + MemberImpl m = keys[i]; if (membership.getMember(m) != null && (!memberAlive(m))) { membership.removeMember(m); super.memberDisappeared(m); @@ -251,9 +251,9 @@ public class TcpFailureDetector extends ChannelInterceptorBase { //check add suspects members if they are alive now, //if they are, simply issue the memberAdded message - keys = (MemberImpl[]) addSuspects.keySet().toArray(new MemberImpl[addSuspects.size()]); + keys = addSuspects.keySet().toArray(new MemberImpl[addSuspects.size()]); for (int i = 0; i < keys.length; i++) { - MemberImpl m = (MemberImpl) keys[i]; + MemberImpl m = keys[i]; if ( membership.getMember(m) == null && (memberAlive(m))) { membership.memberAlive(m); super.memberAdded(m); diff --git a/java/org/apache/catalina/tribes/group/interceptors/ThroughputInterceptor.java b/java/org/apache/catalina/tribes/group/interceptors/ThroughputInterceptor.java index 2d4935fdd..8fafa710f 100644 --- a/java/org/apache/catalina/tribes/group/interceptors/ThroughputInterceptor.java +++ b/java/org/apache/catalina/tribes/group/interceptors/ThroughputInterceptor.java @@ -64,11 +64,11 @@ public class ThroughputInterceptor extends ChannelInterceptorBase { if ( access.get() == 1 ) access.addAndGet(-1); throw x; } - mbTx += ((double)(bytes*destination.length))/(1024d*1024d); - mbAppTx += ((double)(bytes))/(1024d*1024d); + mbTx += (bytes*destination.length)/(1024d*1024d); + mbAppTx += bytes/(1024d*1024d); if ( access.addAndGet(-1) == 0 ) { long stop = System.currentTimeMillis(); - timeTx += ( (double) (stop - txStart)) / 1000d; + timeTx += (stop - txStart) / 1000d; if ((msgTxCnt.get() / interval) >= lastCnt) { lastCnt++; report(timeTx); @@ -80,7 +80,7 @@ public class ThroughputInterceptor extends ChannelInterceptorBase { public void messageReceived(ChannelMessage msg) { if ( rxStart == 0 ) rxStart = System.currentTimeMillis(); long bytes = XByteBuffer.getDataPackageLength(((ChannelData)msg).getDataPackageLength()); - mbRx += ((double)bytes)/(1024d*1024d); + mbRx += bytes/(1024d*1024d); msgRxCnt.addAndGet(1); if ( msgRxCnt.get() % interval == 0 ) report(timeTx); super.messageReceived(msg); @@ -103,7 +103,7 @@ public class ThroughputInterceptor extends ChannelInterceptorBase { buf.append(msgTxErr).append("\n\tRx Msg:"); buf.append(msgRxCnt); buf.append(" messages\n\tRx Speed:"); - buf.append(df.format(mbRx/((double)((System.currentTimeMillis()-rxStart)/1000)))); + buf.append(df.format(mbRx/((System.currentTimeMillis()-rxStart)/1000))); buf.append(" MB/sec (since 1st msg)\n\tReceived:"); buf.append(df.format(mbRx)).append(" MB]\n"); if ( log.isInfoEnabled() ) log.info(buf); diff --git a/java/org/apache/catalina/tribes/group/interceptors/TwoPhaseCommitInterceptor.java b/java/org/apache/catalina/tribes/group/interceptors/TwoPhaseCommitInterceptor.java index 97923075d..0b0eb6813 100644 --- a/java/org/apache/catalina/tribes/group/interceptors/TwoPhaseCommitInterceptor.java +++ b/java/org/apache/catalina/tribes/group/interceptors/TwoPhaseCommitInterceptor.java @@ -44,7 +44,7 @@ public class TwoPhaseCommitInterceptor extends ChannelInterceptorBase { public static final byte[] END_DATA = new byte[] {54, -13, 90, 110, 47, -31, 75, -24, -81, -29, 36, 52, -58, 77, -110, 56}; private static org.apache.juli.logging.Log log = org.apache.juli.logging.LogFactory.getLog(TwoPhaseCommitInterceptor.class); - protected HashMap messages = new HashMap(); + protected HashMap messages = new HashMap(); protected long expire = 1000 * 60; //one minute expiration protected boolean deepclone = true; @@ -79,7 +79,7 @@ public class TwoPhaseCommitInterceptor extends ChannelInterceptorBase { Arrays.contains(msg.getMessage().getBytesDirect(),0,START_DATA,0,START_DATA.length) && Arrays.contains(msg.getMessage().getBytesDirect(),START_DATA.length+msg.getUniqueId().length,END_DATA,0,END_DATA.length) ) { UniqueId id = new UniqueId(msg.getMessage().getBytesDirect(),START_DATA.length,msg.getUniqueId().length); - MapEntry original = (MapEntry)messages.get(id); + MapEntry original = messages.get(id); if ( original != null ) { super.messageReceived(original.msg); messages.remove(id); @@ -113,9 +113,9 @@ public class TwoPhaseCommitInterceptor extends ChannelInterceptorBase { public void heartbeat() { try { long now = System.currentTimeMillis(); - Map.Entry[] entries = (Map.Entry[])messages.entrySet().toArray(new Map.Entry[messages.size()]); + Map.Entry[] entries = messages.entrySet().toArray(new Map.Entry[messages.size()]); for (int i=0; i memberComparator = new MemberComparator(); + protected Comparator memberComparator = new MemberComparator(); public Object clone() { synchronized (members) { @@ -85,11 +85,11 @@ public class Membership this(local,false); } - public Membership(MemberImpl local, Comparator comp) { + public Membership(MemberImpl local, Comparator comp) { this(local,comp,false); } - public Membership(MemberImpl local, Comparator comp, boolean includeLocal) { + public Membership(MemberImpl local, Comparator comp, boolean includeLocal) { this(local,includeLocal); this.memberComparator = comp; } @@ -264,9 +264,9 @@ public class Membership // --------------------------------------------- Inner Class - private class MemberComparator implements Comparator { + private class MemberComparator implements Comparator { - public int compare(MemberImpl m1, MemberImpl m2) { + public int compare(Member m1, Member m2) { //longer alive time, means sort first long result = m2.getMemberAliveTime() - m1.getMemberAliveTime(); if (result < 0)