// Integer.MAX_VALUE, which is not what we want
@AttributeDefinition(min = "0")
int max$_$thread$_$count() default DefaultPingExecutor.DEFAULT_CORE_POOL_SIZE;
+ @Deprecated(since = "7.0.0", forRemoval = true)
@AttributeDefinition
boolean use$_$sse() default true;
}
private final ComponentFactory<DefaultRestconfStreamServletFactory> servletFactoryFactory;
private ComponentInstance<MdsalRestconfStreamRegistry> registry;
+ @Deprecated(since = "7.0.0", forRemoval = true)
private boolean useSSE;
private ComponentInstance<DefaultRestconfStreamServletFactory> servletFactory;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Deactivate;
import org.osgi.service.component.annotations.Reference;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* Auxiliary interface for instantiating JAX-RS streams.
+ *
+ * @deprecated This componet exists only to support SSE/Websocket delivery. It will be removed when support for
+ * WebSockets is removed.
*/
@Component(factory = DefaultRestconfStreamServletFactory.FACTORY_NAME, service = RestconfStreamServletFactory.class)
+@Deprecated(since = "7.0.0", forRemoval = true)
public final class DefaultRestconfStreamServletFactory implements RestconfStreamServletFactory, AutoCloseable {
+ private static final Logger LOG = LoggerFactory.getLogger(DefaultRestconfStreamServletFactory.class);
+
public static final String FACTORY_NAME =
"org.opendaylight.restconf.nb.rfc8040.streams.RestconfStreamServletFactory";
this.servletSupport = requireNonNull(servletSupport);
this.streamRegistry = requireNonNull(streamRegistry);
this.streamsConfiguration = requireNonNull(streamsConfiguration);
- this.useWebsockets = useWebsockets;
pingExecutor = new DefaultPingExecutor(namePrefix, corePoolSize);
+ this.useWebsockets = useWebsockets;
+ if (useWebsockets) {
+ LOG.warn("""
+ RESTCONF event streams use WebSockets instead of Server-Sent Events. This option is will be removed in
+ the next major release.""");
+ }
}
@Activate
/**
* A helper for creating {@link HttpServlet}s which provide bridge between JAX-RS and {@link RestconfStream.Registry}.
+ *
+ * @deprecated This interface exists only to support SSE/Websocket delivery. It will be removed when support for
+ * WebSockets is removed.
*/
+@Deprecated(since = "7.0.0", forRemoval = true)
public interface RestconfStreamServletFactory {
@NonNull HttpServlet newStreamServlet();
* Access to notification streams via Server-Sent Events.
*/
@Path("/")
+// FIXME: integrate this service into JaxRsRestconf once we remove support for WebSockets
final class SSEStreamService {
private static final Logger LOG = LoggerFactory.getLogger(SSEStreamService.class);
* (exceeded message length leads to fragmentation of messages).
* @param heartbeatInterval Interval in milliseconds between sending of ping control frames.
*/
+@Deprecated(since = "7.0.0", forRemoval = true)
record WebSocketFactory(
RestconfStream.Registry streamRegistry,
PingExecutor pingExecutor,
/**
* Web-socket servlet listening on ws or wss schemas for created data-change-event or notification streams.
*/
+@Deprecated(since = "7.0.0", forRemoval = true)
final class WebSocketInitializer extends WebSocketServlet {
@java.io.Serial
private static final long serialVersionUID = 1L;
* to data-change-event or notification listener, and sending of data over established web-socket session.
*/
@WebSocket
+@Deprecated(since = "7.0.0", forRemoval = true)
final class WebSocketSender implements Sender {
private static final Logger LOG = LoggerFactory.getLogger(WebSocketSender.class);
private static final byte[] PING_PAYLOAD = "ping".getBytes(Charset.defaultCharset());
#idle-timeout=30000
#ping-executor-name-prefix=ping-executor
#max-thread-count=1
+# Note: this option is deprecated and scheduled for removal
#use-sse=true
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
@ExtendWith(MockitoExtension.class)
+@Deprecated(since = "7.0.0", forRemoval = true)
class WebSocketFactoryTest extends AbstractNotificationListenerTest {
private static final QName TOASTER = QName.create("http://netconfcentral.org/ns/toaster", "2009-11-20", "toaster");
import org.opendaylight.yangtools.concepts.Registration;
@ExtendWith(MockitoExtension.class)
+@Deprecated(since = "7.0.0", forRemoval = true)
class WebSocketSessionHandlerTest {
private final class WebSocketTestSessionState {
private final WebSocketSender webSocketSessionHandler;