Cannot deploy a network which uses a custom selector

55 views
Skip to first unread message

Oliver Rolle

unread,
Jan 24, 2015, 8:13:28 PM1/24/15
to vertx-...@googlegroups.com
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)




Jordan Halterman

unread,
Jan 26, 2015, 4:51:37 AM1/26/15
to vertx-...@googlegroups.com
I think you're right. There seem to be classloader issues with using the custom selector simply because of how Vert.x manages them. Perhaps I'll try testing it tomorrow. It should be fixable.
--
You received this message because you are subscribed to the Google Groups "vertigo" group.
To unsubscribe from this group and stop receiving emails from it, send an email to vertx-vertig...@googlegroups.com.
To post to this group, send email to vertx-...@googlegroups.com.
Visit this group at http://groups.google.com/group/vertx-vertigo.
To view this discussion on the web visit https://groups.google.com/d/msgid/vertx-vertigo/cdd6ca01-85e9-49b0-a589-7d53f53d68c2%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Yuli Matsai

unread,
Feb 4, 2015, 9:18:30 AM2/4/15
to vertx-...@googlegroups.com
Jordan, hi, 

Any news so far on this ?

Cheers,
Yuli
...

Oliver Rolle

unread,
Feb 27, 2015, 4:42:32 PM2/27/15
to vertx-...@googlegroups.com
After some spring code clean up / refactoring I stumbled over the bug and could create a bug fix .

Problem is the interface net.kuujo.vertigo.io.selector.Selector. Change use = JsonTypeInfo.Id.NAME   to  use = JsonTypeInfo.Id.CLASS  and it works like charm.

@Jordan: can you incorporate the bug fix into vertigos code base & release updated binaries?
...
Reply all
Reply to author
Forward
0 new messages