cometd를 dropwizard에 대한 서블릿으로 사용하려하지만 BayeuxServer가 내 서비스에 주입되지 않은 것 같습니다.dropwizard에서 cometd 사용
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);
그리고 내 서비스를 (내 코드가 실패 곳입니다) :
을 나는 (그래서 나는 나 자신을 PARAMS 정의하고있어 내가web.xml
를 사용하지 않는주의) 그래서 나의 두 서블릿을 추가 해요
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 내 자신의 인스턴스를 생성 시도
그러나 BayeuxServerImpl.freeze();
사람에 별도의 NPE로 연결이 제대로 dropwizard와 cometd를 사용하는 방법을 알아?
'Class.getCanonicalName()'을 사용하지 마십시오. 내부 클래스의 클래스 로딩을 중단시킬 것이라고 생각합니다. 대신 Class.getName()을 사용하십시오. – sbordet