Я пытаюсь использовать cometd в качестве сервлета для dropwizard, но BayeuxServer, похоже, не вводится в мою службу. Я добавляю две мои сервлеты, как так (обратите внимание, что я не использую web.xml
поэтому я Определяя Params себя):Использование cometd в dropwizard
cometdConfig.put("services", MyService.class.getCanonicalName());
System.out.print("OrderService name: " + MyService.class.getCanonicalName());
environment.addServlet(AnnotationCometdServlet.class, "/cometd/*").addInitParams(cometdConfig).setInitOrder(1);
environment.addServlet(new MyServiceServlet(), "/orders/*").setInitOrder(2);
и мое обслуживание (это где мой код не):
public class MyService
implements MyWatcher.Listener
{
@Inject
private BayeuxServer bayeuxServer;
@Session
private LocalSession sender;
private final String _channelName;
private ServerChannel _channel = null;
public OrderService() {
_channelName = "/cometd/";
initChannel();
}
private void initChannel() {
// I get an NPE here
bayeuxServer.createIfAbsent(_channelName, new ConfigurableServerChannel.Initializer() {
@Override
public void configureChannel(ConfigurableServerChannel channel) {
// ...
}
});
_channel = bayeuxServer.getChannel(_channelName);
}
}
Я также попытался создать свой собственный экземпляр BayeuxServer, но затем, что приводит к отдельным NPE в BayeuxServerImpl.freeze();
Любой знает, как правильно использовать cometd с dropwizard?
Не используйте 'Class.getCanonicalName()', поскольку я думаю, что он нарушит загрузку классов внутренних классов. Вместо этого используйте 'Class.getName()'. – sbordet