import org.opendaylight.restconf.nb.rfc8040.databind.DatabindProvider;
import org.opendaylight.restconf.nb.rfc8040.rests.services.impl.MdsalRestconfServer;
import org.opendaylight.restconf.nb.rfc8040.rests.services.impl.RestconfDataStreamServiceImpl;
+import org.opendaylight.restconf.nb.rfc8040.rests.services.impl.SubscribeToStreamUtil;
import org.opendaylight.restconf.nb.rfc8040.rests.utils.RestconfStreamsConstants;
import org.opendaylight.restconf.nb.rfc8040.streams.StreamsConfiguration;
import org.opendaylight.restconf.nb.rfc8040.streams.WebSocketInitializer;
final var scheduledThreadPool = new ScheduledThreadPoolWrapper(pingMaxThreadCount,
new NamingThreadPoolFactory(pingNamePrefix));
- final var restconfBuilder = WebContext.builder()
- .name("RFC8040 RESTCONF")
- .contextPath("/" + URLConstants.BASE_PATH)
- .supportsSessions(false)
- .addServlet(ServletDetails.builder()
- .addUrlPattern("/*")
- .servlet(servletSupport.createHttpServletBuilder(
- new RestconfApplication(databindProvider, server, mountPointService, dataBroker, rpcService,
- actionService, notificationService, schemaService, listenersBroker, streamsConfiguration))
- .build())
- .asyncSupported(true)
- .build())
- .addServlet(ServletDetails.builder()
+ final SubscribeToStreamUtil streamUtils;
+ final ServletDetails streamServlet;
+ if (streamsConfiguration.useSSE()) {
+ streamUtils = SubscribeToStreamUtil.serverSentEvents(listenersBroker);
+ streamServlet = ServletDetails.builder()
.addUrlPattern("/" + URLConstants.SSE_SUBPATH + "/*")
.servlet(servletSupport.createHttpServletBuilder(
new DataStreamApplication(databindProvider,
.build())
.name("notificationServlet")
.asyncSupported(true)
- .build())
- .addServlet(ServletDetails.builder()
+ .build();
+ } else {
+ streamUtils = SubscribeToStreamUtil.webSockets(listenersBroker);
+ streamServlet = ServletDetails.builder()
.addUrlPattern("/" + RestconfStreamsConstants.DATA_SUBSCRIPTION + "/*")
.addUrlPattern("/" + RestconfStreamsConstants.NOTIFICATION_STREAM + "/*")
.addUrlPattern("/" + RestconfStreamsConstants.DEVICE_NOTIFICATION_STREAM + "/*")
.servlet(new WebSocketInitializer(scheduledThreadPool, listenersBroker, streamsConfiguration))
+ .build();
+ }
+
+ final var restconfBuilder = WebContext.builder()
+ .name("RFC8040 RESTCONF")
+ .contextPath("/" + URLConstants.BASE_PATH)
+ .supportsSessions(false)
+ .addServlet(ServletDetails.builder()
+ .addUrlPattern("/*")
+ .servlet(servletSupport.createHttpServletBuilder(
+ new RestconfApplication(databindProvider, server, mountPointService, dataBroker, actionService,
+ notificationService, schemaService, streamUtils))
+ .build())
+ .asyncSupported(true)
.build())
+ .addServlet(streamServlet)
// Allows user to add javax.servlet.Filter(s) in front of REST services
.addFilter(FilterDetails.builder()
import org.opendaylight.mdsal.dom.api.DOMDataBroker;
import org.opendaylight.mdsal.dom.api.DOMMountPointService;
import org.opendaylight.mdsal.dom.api.DOMNotificationService;
-import org.opendaylight.mdsal.dom.api.DOMRpcService;
import org.opendaylight.mdsal.dom.api.DOMSchemaService;
import org.opendaylight.restconf.nb.rfc8040.databind.DatabindProvider;
import org.opendaylight.restconf.nb.rfc8040.rests.services.api.RestconfStreamsSubscriptionService;
import org.opendaylight.restconf.nb.rfc8040.rests.services.impl.RestconfSchemaServiceImpl;
import org.opendaylight.restconf.nb.rfc8040.rests.services.impl.RestconfStreamsSubscriptionServiceImpl;
import org.opendaylight.restconf.nb.rfc8040.rests.services.impl.SubscribeToStreamUtil;
-import org.opendaylight.restconf.nb.rfc8040.streams.StreamsConfiguration;
-import org.opendaylight.restconf.nb.rfc8040.streams.listeners.ListenersBroker;
@Singleton
public class RestconfApplication extends AbstractRestconfApplication {
new RestconfImpl(databindProvider)));
}
- private RestconfApplication(final DatabindProvider databindProvider, final MdsalRestconfServer server,
+ @Inject
+ public RestconfApplication(final DatabindProvider databindProvider, final MdsalRestconfServer server,
final DOMMountPointService mountPointService, final DOMDataBroker dataBroker,
final DOMActionService actionService, final DOMNotificationService notificationService,
final DOMSchemaService domSchemaService, final SubscribeToStreamUtil streamUtils) {
new RestconfStreamsSubscriptionServiceImpl(dataBroker, notificationService, databindProvider, streamUtils),
dataBroker, actionService, notificationService, domSchemaService, streamUtils);
}
-
- @Inject
- public RestconfApplication(final DatabindProvider databindProvider, final MdsalRestconfServer server,
- final DOMMountPointService mountPointService, final DOMDataBroker dataBroker,
- final DOMRpcService rpcService, final DOMActionService actionService,
- final DOMNotificationService notificationService, final DOMSchemaService domSchemaService,
- final ListenersBroker listenersBroker, final StreamsConfiguration configuration) {
- this(databindProvider, server, mountPointService, dataBroker, actionService, notificationService,
- domSchemaService, configuration.useSSE() ? SubscribeToStreamUtil.serverSentEvents(listenersBroker)
- : SubscribeToStreamUtil.webSockets(listenersBroker));
- }
}