Skip to content

Commit

Permalink
Extract session identifier serializer location from SessionKeyExterna…
Browse files Browse the repository at this point in the history
…lizer.
  • Loading branch information
pferraro committed Nov 27, 2018
1 parent 99c0657 commit 4b14640
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 14 deletions.
@@ -0,0 +1,57 @@
/*
* JBoss, Home of Professional Open Source.
* Copyright 2018, Red Hat, Inc., and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/

package org.wildfly.clustering.web.infinispan;

import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import java.util.ServiceLoader;

import org.wildfly.clustering.marshalling.spi.Serializer;
import org.wildfly.clustering.web.IdentifierSerializerProvider;

/**
* @author Paul Ferraro
*/
public enum SessionIdentifierSerializer implements Serializer<String> {
INSTANCE;

private final Serializer<String> serializer = load(IdentifierSerializerProvider.class.getClassLoader());

private static final Serializer<String> load(ClassLoader loader) {
for (IdentifierSerializerProvider provider : ServiceLoader.load(IdentifierSerializerProvider.class, loader)) {
return provider.getSerializer();
}
throw new IllegalStateException();
}

@Override
public void write(DataOutput output, String value) throws IOException {
this.serializer.write(output, value);
}

@Override
public String read(DataInput input) throws IOException {
return this.serializer.read(input);
}
}
Expand Up @@ -25,29 +25,17 @@
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.util.ServiceLoader;
import java.util.function.Function;

import org.wildfly.clustering.infinispan.spi.distribution.Key;
import org.wildfly.clustering.marshalling.Externalizer;
import org.wildfly.clustering.marshalling.spi.Serializer;
import org.wildfly.clustering.web.IdentifierSerializerProvider;

/**
* Base externalizer for cache keys containing session identifiers.
* @author Paul Ferraro
*/
public class SessionKeyExternalizer<K extends Key<String>> implements Externalizer<K> {

static final Serializer<String> SESSION_ID_SERIALIZER = loadIdentifierSerializer(IdentifierSerializerProvider.class.getClassLoader());

private static Serializer<String> loadIdentifierSerializer(ClassLoader loader) {
for (IdentifierSerializerProvider provider : ServiceLoader.load(IdentifierSerializerProvider.class, loader)) {
return provider.getSerializer();
}
throw new IllegalStateException();
}

private final Class<K> targetClass;
private final Function<String, K> resolver;

Expand All @@ -58,12 +46,12 @@ protected SessionKeyExternalizer(Class<K> targetClass, Function<String, K> resol

@Override
public void writeObject(ObjectOutput output, K key) throws IOException {
SESSION_ID_SERIALIZER.write(output, key.getValue());
SessionIdentifierSerializer.INSTANCE.write(output, key.getValue());
}

@Override
public K readObject(ObjectInput input) throws IOException {
return this.resolver.apply(SESSION_ID_SERIALIZER.read(input));
return this.resolver.apply(SessionIdentifierSerializer.INSTANCE.read(input));
}

@Override
Expand Down

0 comments on commit 4b14640

Please sign in to comment.