📄 abstractreplicatedmap.java
字号:
public boolean isPrimary() { return ( (!proxy) && (!backup)); } public void setProxy(boolean proxy) { this.proxy = proxy; } public boolean isDiffable() { return (value instanceof ReplicatedMapEntry) && ((ReplicatedMapEntry)value).isDiffable(); } public void setBackupNodes(Member[] nodes) { this.backupNodes = nodes; } public Member[] getBackupNodes() { return backupNodes; } public Object getValue() { return value; } public Object setValue(Object value) { Object old = this.value; this.value = (Serializable) value; return old; } public Object getKey() { return key; } public Object setKey(Object key) { Object old = this.key; this.key = (Serializable)key; return old; } public int hashCode() { return key.hashCode(); } public boolean equals(Object o) { return key.equals(o); } /** * apply a diff, or an entire object * @param data byte[] * @param offset int * @param length int * @param diff boolean * @throws IOException * @throws ClassNotFoundException */ public void apply(byte[] data, int offset, int length, boolean diff) throws IOException, ClassNotFoundException { if (isDiffable() && diff) { ReplicatedMapEntry rentry = (ReplicatedMapEntry) value; try { rentry.lock(); rentry.applyDiff(data, offset, length); } finally { rentry.unlock(); } } else if (length == 0) { value = null; proxy = true; } else { value = XByteBuffer.deserialize(data, offset, length); } } public String toString() { StringBuffer buf = new StringBuffer("MapEntry[key:"); buf.append(getKey()).append("; "); buf.append("value:").append(getValue()).append("; "); buf.append("primary:").append(isPrimary()).append("; "); buf.append("backup:").append(isBackup()).append("; "); buf.append("proxy:").append(isProxy()).append(";]"); return buf.toString(); } }//------------------------------------------------------------------------------// map message to send to and from other maps//------------------------------------------------------------------------------ public static class MapMessage implements Serializable { public static final int MSG_BACKUP = 1; public static final int MSG_RETRIEVE_BACKUP = 2; public static final int MSG_PROXY = 3; public static final int MSG_REMOVE = 4; public static final int MSG_STATE = 5; public static final int MSG_START = 6; public static final int MSG_STOP = 7; public static final int MSG_INIT = 8; private byte[] mapId; private int msgtype; private boolean diff; private transient Serializable key; private transient Serializable value; private byte[] valuedata; private byte[] keydata; private byte[] diffvalue; private Member[] nodes; public MapMessage() {} public MapMessage(byte[] mapId,int msgtype, boolean diff, Serializable key, Serializable value, byte[] diffvalue, Member[] nodes) { this.mapId = mapId; this.msgtype = msgtype; this.diff = diff; this.key = key; this.value = value; this.diffvalue = diffvalue; this.nodes = nodes; setValue(value); setKey(key); } public void deserialize(ClassLoader[] cls) throws IOException, ClassNotFoundException { key(cls); value(cls); } public int getMsgType() { return msgtype; } public boolean isDiff() { return diff; } public Serializable getKey() { try { return key(null); } catch ( Exception x ) { log.error("Deserialization error of the MapMessage.key",x); return null; } } public Serializable key(ClassLoader[] cls) throws IOException, ClassNotFoundException { if ( key!=null ) return key; if ( keydata == null || keydata.length == 0 ) return null; key = XByteBuffer.deserialize(keydata,0,keydata.length,cls); keydata = null; return key; } public byte[] getKeyData() { return keydata; } public Serializable getValue() { try { return value(null); } catch ( Exception x ) { log.error("Deserialization error of the MapMessage.value",x); return null; } } public Serializable value(ClassLoader[] cls) throws IOException, ClassNotFoundException { if ( value!=null ) return value; if ( valuedata == null || valuedata.length == 0 ) return null; value = XByteBuffer.deserialize(valuedata,0,valuedata.length,cls); valuedata = null;; return value; } public byte[] getValueData() { return valuedata; } public byte[] getDiffValue() { return diffvalue; } public Member[] getBackupNodes() { return nodes; } private void setBackUpNodes(Member[] nodes) { this.nodes = nodes; } public byte[] getMapId() { return mapId; } public void setValue(Serializable value) { try { if ( value != null ) valuedata = XByteBuffer.serialize(value); this.value = value; }catch ( IOException x ) { throw new RuntimeException(x); } } public void setKey(Serializable key) { try { if (key != null) keydata = XByteBuffer.serialize(key); this.key = key; } catch (IOException x) { throw new RuntimeException(x); } } protected Member[] readMembers(ObjectInput in) throws IOException, ClassNotFoundException { int nodecount = in.readInt(); Member[] members = new Member[nodecount]; for ( int i=0; i<members.length; i++ ) { byte[] d = new byte[in.readInt()]; in.read(d); if (d.length > 0) members[i] = MemberImpl.getMember(d); } return members; } protected void writeMembers(ObjectOutput out,Member[] members) throws IOException { if ( members == null ) members = new Member[0]; out.writeInt(members.length); for (int i=0; i<members.length; i++ ) { if ( members[i] != null ) { byte[] d = members[i] != null ? ( (MemberImpl)members[i]).getData(false) : new byte[0]; out.writeInt(d.length); out.write(d); } } } /** * shallow clone * @return Object */ public Object clone() { MapMessage msg = new MapMessage(this.mapId, this.msgtype, this.diff, this.key, this.value, this.diffvalue, this.nodes); msg.keydata = this.keydata; msg.valuedata = this.valuedata; return msg; } } //MapMessage public Channel getChannel() { return channel; } public byte[] getMapContextName() { return mapContextName; } public RpcChannel getRpcChannel() { return rpcChannel; } public long getRpcTimeout() { return rpcTimeout; } public Object getStateMutex() { return stateMutex; } public boolean isStateTransferred() { return stateTransferred; } public Object getMapOwner() { return mapOwner; } public ClassLoader[] getExternalLoaders() { return externalLoaders; } public int getChannelSendOptions() { return channelSendOptions; } public void setMapOwner(Object mapOwner) { this.mapOwner = mapOwner; } public void setExternalLoaders(ClassLoader[] externalLoaders) { this.externalLoaders = externalLoaders; } public void setChannelSendOptions(int channelSendOptions) { this.channelSendOptions = channelSendOptions; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -