Hi,
I want to implement a custom routing of messages. I use the Selector interface to build my routing logic. If I rebuild the serialization of the custom selector (from CustomSelector class) in my verticle, I get no exception but if it is done by the vertigo framework I get the exceptions below. Maybe a classloader problem?
I am using vertigo 0.7.0-RC3 on vert.x 2.1.2
Network:
conf.addComponent("Connector", EventBusConnector.class.getCanonicalName()).setInstances(1);
conf.addComponent("ProcessManager", ProcessManager.class.getCanonicalName()).setInstances(1);
conf.createConnection("Connector", "out", "ProcessManager", "in", new IdSelector());
I use the following selector implementation:
package verticleflow.core.mgmt.impl;
import java.util.List;
import net.kuujo.vertigo.io.connection.Connection;
import net.kuujo.vertigo.io.selector.Selector;
import org.vertx.java.core.json.JsonObject;
public class IdSelector implements Selector{
//public final String selector = IdSelector.class.getCanonicalName();
public IdSelector() {
}
@Override
public <T extends Connection> List<T> select(Object message,
List<T> connections) {
return connections;
}
}
if "String selector" is commented:
java.lang.IllegalStateException: Not a valid custom serializer.
at net.kuujo.vertigo.io.selector.CustomSelector.init(CustomSelector.java:76)
at net.kuujo.vertigo.io.selector.CustomSelector.select(CustomSelector.java:84)
at net.kuujo.vertigo.io.stream.impl.DefaultOutputStream.send(DefaultOutputStream.java:282)
at net.kuujo.vertigo.io.stream.impl.DefaultOutputStream.send(DefaultOutputStream.java:48)
at net.kuujo.vertigo.io.port.impl.DefaultOutputPort.send(DefaultOutputPort.java:498)
at net.kuujo.vertigo.io.port.impl.DefaultOutputPort.send(DefaultOutputPort.java:55)
at verticleflow.core.mgmt.impl.EventBusConnector.lambda$start$1(EventBusConnector.java:36)
at verticleflow.core.mgmt.impl.EventBusConnector$$Lambda$5/377217558.handle(Unknown Source)
at org.vertx.java.core.eventbus.impl.DefaultEventBus$11.run(DefaultEventBus.java:951)
at org.vertx.java.core.impl.DefaultContext$3.run(DefaultContext.java:175)
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:370)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:353)
at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116)
at java.lang.Thread.run(Thread.java:745)
if uncommented than:
net.kuujo.vertigo.cluster.ClusterException: Can not instantiate value of type [simple type, class net.kuujo.vertigo.io.selector.CustomSelector] from String value; no single-String constructor/factory method (through reference chain: net.kuujo.vertigo.network.impl.DefaultNetworkConfig["connections"]->net.kuujo.vertigo.io.connection.impl.DefaultConnectionConfig["selector"]->net.kuujo.vertigo.io.selector.CustomSelector["selector"])
at net.kuujo.vertigo.cluster.impl.DefaultCluster$19$1$1.handle(DefaultCluster.java:717)
at net.kuujo.vertigo.cluster.impl.DefaultCluster$19$1$1.handle(DefaultCluster.java:711)
at org.vertx.java.core.eventbus.impl.DefaultEventBus$6.handle(DefaultEventBus.java:760)
at org.vertx.java.core.eventbus.impl.DefaultEventBus$6.handle(DefaultEventBus.java:749)
at org.vertx.java.core.eventbus.impl.DefaultEventBus$11.run(DefaultEventBus.java:951)
at org.vertx.java.core.impl.DefaultContext$3.run(DefaultContext.java:175)
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:370)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:353)
at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116)
at java.lang.Thread.run(Thread.java:745)