package org.radargun.service;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import javax.management.MBeanServerConnection;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
import org.infinispan.protostream.FileDescriptorSource;
import org.infinispan.protostream.SerializationContext;
import org.infinispan.query.remote.ProtobufMetadataManager;
import org.radargun.utils.Utils;
/**
* @author Vojtech Juranek <vjuranek@redhat.com>
*/
public class JDG66HotrodQueryable extends InfinispanHotrodQueryable {
public JDG66HotrodQueryable(Infinispan60HotrodService service) {
super(service);
}
@Override
protected void registerProtofilesLocal(SerializationContext context) {
try {
context.registerProtoFiles((new FileDescriptorSource()).addProtoFiles(service.protofiles));
} catch (Exception e) {
throw new IllegalArgumentException("Failed to read protofiles " + Arrays.toString(service.protofiles), e);
}
}
@Override
protected void doJmxRegistration(MBeanServerConnection connection) {
ObjectName objName = null;
try {
objName = new ObjectName(service.jmxDomain + ":type=RemoteQuery,name=" + ObjectName.quote(service.clusterName)
+ ",component=" + ProtobufMetadataManager.OBJECT_NAME);
} catch (MalformedObjectNameException e) {
throw new IllegalStateException("Failed to register protofiles", e);
}
for (String protofile : service.protofiles) {
byte[] descriptor;
try (InputStream inputStream = getClass().getResourceAsStream(protofile)) {
descriptor = Utils.readAsBytes(inputStream);
} catch (IOException e) {
throw new IllegalStateException("Failed to read protofile " + protofile, e);
}
try {
connection.invoke(objName, "registerProtofile", new Object[] { protofile, new String(descriptor) },
new String[] { String.class.getName(), String.class.getName() });
log.info("Protofile " + protofile + " registered.");
} catch (Exception e) {
throw new IllegalStateException("Failed to register protofile " + protofile, e);
}
}
}
}