Skip to content

Commit

Permalink
Don't assume EJB keys use BasicSessionID.
Browse files Browse the repository at this point in the history
Cleanup externalizer implementations.
  • Loading branch information
pferraro committed Mar 13, 2017
1 parent ca7370f commit 692b258
Show file tree
Hide file tree
Showing 8 changed files with 51 additions and 166 deletions.

This file was deleted.

Expand Up @@ -25,39 +25,63 @@
import java.io.ObjectInput; import java.io.ObjectInput;
import java.io.ObjectOutput; import java.io.ObjectOutput;


import org.jboss.ejb.client.BasicSessionID;
import org.jboss.ejb.client.SessionID; import org.jboss.ejb.client.SessionID;
import org.jboss.ejb.client.UUIDSessionID;
import org.jboss.ejb.client.UnknownSessionID;
import org.kohsuke.MetaInfServices;
import org.wildfly.clustering.marshalling.Externalizer; import org.wildfly.clustering.marshalling.Externalizer;
import org.wildfly.clustering.marshalling.spi.IndexExternalizer; import org.wildfly.clustering.marshalling.spi.IndexExternalizer;


/** /**
* @author Paul Ferraro * @author Paul Ferraro
*/ */
public class SessionIDExternalizer implements Externalizer<SessionID> { public class SessionIDExternalizer<T extends SessionID> implements Externalizer<T> {


private final Class<? extends SessionID> targetClass; private final Class<T> targetClass;
private final IndexExternalizer lengthExternalizer;


SessionIDExternalizer(Class<? extends SessionID> targetClass, IndexExternalizer lengthExternalizer) { public SessionIDExternalizer(Class<T> targetClass) {
this.targetClass = targetClass; this.targetClass = targetClass;
this.lengthExternalizer = lengthExternalizer;
} }


@Override @Override
public void writeObject(ObjectOutput output, SessionID id) throws IOException { public void writeObject(ObjectOutput output, SessionID id) throws IOException {
byte[] encoded = id.getEncodedForm(); byte[] encoded = id.getEncodedForm();
this.lengthExternalizer.writeData(output, encoded.length); IndexExternalizer.UNSIGNED_BYTE.writeData(output, encoded.length);
output.write(encoded); output.write(encoded);
} }


@SuppressWarnings("unchecked")
@Override @Override
public SessionID readObject(ObjectInput input) throws IOException, ClassNotFoundException { public T readObject(ObjectInput input) throws IOException, ClassNotFoundException {
byte[] encoded = new byte[this.lengthExternalizer.readData(input)]; byte[] encoded = new byte[IndexExternalizer.UNSIGNED_BYTE.readData(input)];
input.readFully(encoded); input.readFully(encoded);
return SessionID.createSessionID(encoded); return (T) SessionID.createSessionID(encoded);
} }


@Override @Override
public Class<? extends SessionID> getTargetClass() { public Class<T> getTargetClass() {
return this.targetClass; return this.targetClass;
} }

@MetaInfServices(Externalizer.class)
public static class BasicSessionIDExternalizer extends SessionIDExternalizer<BasicSessionID> {
public BasicSessionIDExternalizer() {
super(BasicSessionID.class);
}
}

@MetaInfServices(Externalizer.class)
public static class UnknownSessionIDExternalizer extends SessionIDExternalizer<UnknownSessionID> {
public UnknownSessionIDExternalizer() {
super(UnknownSessionID.class);
}
}

@MetaInfServices(Externalizer.class)
public static class UUIDSessionIDExternalizer extends SessionIDExternalizer<UUIDSessionID> {
public UUIDSessionIDExternalizer() {
super(UUIDSessionID.class);
}
}
} }

This file was deleted.

This file was deleted.

Expand Up @@ -28,7 +28,7 @@


import org.jboss.ejb.client.SessionID; import org.jboss.ejb.client.SessionID;
import org.kohsuke.MetaInfServices; import org.kohsuke.MetaInfServices;
import org.wildfly.clustering.ejb.infinispan.BasicSessionIDExternalizer; import org.wildfly.clustering.ejb.infinispan.SessionIDExternalizer;
import org.wildfly.clustering.marshalling.Externalizer; import org.wildfly.clustering.marshalling.Externalizer;


/** /**
Expand All @@ -37,30 +37,29 @@
@MetaInfServices(Externalizer.class) @MetaInfServices(Externalizer.class)
public class InfinispanBeanEntryExternalizer implements Externalizer<InfinispanBeanEntry<SessionID>> { public class InfinispanBeanEntryExternalizer implements Externalizer<InfinispanBeanEntry<SessionID>> {


private final Externalizer<SessionID> externalizer = new BasicSessionIDExternalizer(); private static final Externalizer<SessionID> EXTERNALIZER = new SessionIDExternalizer<>(SessionID.class);


@Override @Override
public void writeObject(ObjectOutput output, InfinispanBeanEntry<SessionID> entry) throws IOException { public void writeObject(ObjectOutput output, InfinispanBeanEntry<SessionID> entry) throws IOException {
output.writeUTF(entry.getBeanName()); output.writeUTF(entry.getBeanName());
this.externalizer.writeObject(output, entry.getGroupId()); EXTERNALIZER.writeObject(output, entry.getGroupId());
Date lastAccessedTime = entry.getLastAccessedTime(); Date lastAccessedTime = entry.getLastAccessedTime();
output.writeLong((lastAccessedTime != null) ? lastAccessedTime.getTime() : 0); output.writeLong((lastAccessedTime != null) ? lastAccessedTime.getTime() : 0);
} }


@Override @Override
public InfinispanBeanEntry<SessionID> readObject(ObjectInput input) throws IOException, ClassNotFoundException { public InfinispanBeanEntry<SessionID> readObject(ObjectInput input) throws IOException, ClassNotFoundException {
InfinispanBeanEntry<SessionID> entry = new InfinispanBeanEntry<>(input.readUTF(), this.externalizer.readObject(input)); InfinispanBeanEntry<SessionID> entry = new InfinispanBeanEntry<>(input.readUTF(), EXTERNALIZER.readObject(input));
long time = input.readLong(); long time = input.readLong();
if (time > 0) { if (time > 0) {
entry.setLastAccessedTime(new Date(time)); entry.setLastAccessedTime(new Date(time));
} }
return entry; return entry;
} }


@SuppressWarnings({ "rawtypes", "unchecked" }) @SuppressWarnings("unchecked")
@Override @Override
public Class<InfinispanBeanEntry<SessionID>> getTargetClass() { public Class<InfinispanBeanEntry<SessionID>> getTargetClass() {
Class targetClass = InfinispanBeanEntry.class; return (Class<InfinispanBeanEntry<SessionID>>) (Class<?>) InfinispanBeanEntry.class;
return targetClass;
} }
} }
Expand Up @@ -27,7 +27,7 @@


import org.jboss.ejb.client.SessionID; import org.jboss.ejb.client.SessionID;
import org.kohsuke.MetaInfServices; import org.kohsuke.MetaInfServices;
import org.wildfly.clustering.ejb.infinispan.BasicSessionIDExternalizer; import org.wildfly.clustering.ejb.infinispan.SessionIDExternalizer;
import org.wildfly.clustering.marshalling.Externalizer; import org.wildfly.clustering.marshalling.Externalizer;


/** /**
Expand All @@ -36,7 +36,7 @@
@MetaInfServices(Externalizer.class) @MetaInfServices(Externalizer.class)
public class InfinispanBeanKeyExternalizer implements Externalizer<InfinispanBeanKey<SessionID>> { public class InfinispanBeanKeyExternalizer implements Externalizer<InfinispanBeanKey<SessionID>> {


private final Externalizer<SessionID> externalizer = new BasicSessionIDExternalizer(); private final Externalizer<SessionID> externalizer = new SessionIDExternalizer<>(SessionID.class);


@Override @Override
public void writeObject(ObjectOutput output, InfinispanBeanKey<SessionID> key) throws IOException { public void writeObject(ObjectOutput output, InfinispanBeanKey<SessionID> key) throws IOException {
Expand All @@ -48,10 +48,9 @@ public InfinispanBeanKey<SessionID> readObject(ObjectInput input) throws IOExcep
return new InfinispanBeanKey<>(this.externalizer.readObject(input)); return new InfinispanBeanKey<>(this.externalizer.readObject(input));
} }


@SuppressWarnings({ "unchecked", "rawtypes" }) @SuppressWarnings("unchecked")
@Override @Override
public Class<InfinispanBeanKey<SessionID>> getTargetClass() { public Class<InfinispanBeanKey<SessionID>> getTargetClass() {
Class targetClass = InfinispanBeanKey.class; return (Class<InfinispanBeanKey<SessionID>>) (Class<?>) InfinispanBeanKey.class;
return targetClass;
} }
} }
Expand Up @@ -50,10 +50,9 @@ public InfinispanBeanGroupEntry<I, T> readObject(ObjectInput input) throws IOExc
return new InfinispanBeanGroupEntry<>(this.externalizer.readObject(input)); return new InfinispanBeanGroupEntry<>(this.externalizer.readObject(input));
} }


@SuppressWarnings({ "rawtypes", "unchecked" }) @SuppressWarnings("unchecked")
@Override @Override
public Class<InfinispanBeanGroupEntry<I, T>> getTargetClass() { public Class<InfinispanBeanGroupEntry<I, T>> getTargetClass() {
Class targetClass = InfinispanBeanGroupEntry.class; return (Class<InfinispanBeanGroupEntry<I, T>>) (Class<?>) InfinispanBeanGroupEntry.class;
return targetClass;
} }
} }
Expand Up @@ -28,7 +28,7 @@


import org.jboss.ejb.client.SessionID; import org.jboss.ejb.client.SessionID;
import org.kohsuke.MetaInfServices; import org.kohsuke.MetaInfServices;
import org.wildfly.clustering.ejb.infinispan.BasicSessionIDExternalizer; import org.wildfly.clustering.ejb.infinispan.SessionIDExternalizer;
import org.wildfly.clustering.marshalling.Externalizer; import org.wildfly.clustering.marshalling.Externalizer;


/** /**
Expand All @@ -37,7 +37,7 @@
@MetaInfServices(Externalizer.class) @MetaInfServices(Externalizer.class)
public class InfinispanBeanGroupKeyExternalizer implements Externalizer<InfinispanBeanGroupKey<SessionID>> { public class InfinispanBeanGroupKeyExternalizer implements Externalizer<InfinispanBeanGroupKey<SessionID>> {


private final Externalizer<SessionID> externalizer = new BasicSessionIDExternalizer(); private final Externalizer<SessionID> externalizer = new SessionIDExternalizer<>(SessionID.class);


@Override @Override
public void writeObject(ObjectOutput output, InfinispanBeanGroupKey<SessionID> key) throws IOException { public void writeObject(ObjectOutput output, InfinispanBeanGroupKey<SessionID> key) throws IOException {
Expand All @@ -49,10 +49,9 @@ public InfinispanBeanGroupKey<SessionID> readObject(ObjectInput input) throws IO
return new InfinispanBeanGroupKey<>(this.externalizer.readObject(input)); return new InfinispanBeanGroupKey<>(this.externalizer.readObject(input));
} }


@SuppressWarnings({ "rawtypes", "unchecked" }) @SuppressWarnings("unchecked")
@Override @Override
public Class<? extends InfinispanBeanGroupKey<SessionID>> getTargetClass() { public Class<InfinispanBeanGroupKey<SessionID>> getTargetClass() {
Class targetClass = InfinispanBeanGroupKey.class; return (Class<InfinispanBeanGroupKey<SessionID>>) (Class<?>) InfinispanBeanGroupKey.class;
return targetClass;
} }
} }

0 comments on commit 692b258

Please sign in to comment.