This is an automated email from the ASF dual-hosted git repository. solomax pushed a commit to branch jakarta-spring-6 in repository https://gitbox.apache.org/repos/asf/openmeetings.git
commit 335d616486bf00eb30995c9f6a194f06edd8901f Author: Maxim Solodovnik <solo...@apache.org> AuthorDate: Wed Sep 27 18:54:43 2023 +0700 [OPENMEETINGS-2756] audio/video is fixed; version is bumped --- openmeetings-core/pom.xml | 2 +- openmeetings-db/pom.xml | 2 +- openmeetings-install/pom.xml | 2 +- openmeetings-mediaserver/pom.xml | 2 +- .../src/main/java/module-info.java | 1 + .../openmeetings/mediaserver/IStreamProcessor.java | 24 ------------ .../org/apache/openmeetings/mediaserver/KRoom.java | 2 +- .../openmeetings/mediaserver/KurentoHandler.java | 44 ++++++++++++++++------ .../openmeetings/mediaserver/StreamProcessor.java | 18 +++++---- .../mediaserver/StreamProcessorActions.java | 7 ++-- .../mediaserver/TestStreamProcessor.java | 11 +++--- .../src/test/java/module-info.test | 1 + openmeetings-screenshare/pom.xml | 2 +- openmeetings-server/pom.xml | 2 +- openmeetings-service/pom.xml | 2 +- openmeetings-util/pom.xml | 2 +- openmeetings-web/pom.xml | 2 +- openmeetings-webservice/pom.xml | 2 +- pom.xml | 4 +- 19 files changed, 67 insertions(+), 65 deletions(-) diff --git a/openmeetings-core/pom.xml b/openmeetings-core/pom.xml index 7b3e47fa1..54a96621f 100644 --- a/openmeetings-core/pom.xml +++ b/openmeetings-core/pom.xml @@ -22,7 +22,7 @@ <parent> <groupId>org.apache.openmeetings</groupId> <artifactId>openmeetings-parent</artifactId> - <version>7.2.0-SNAPSHOT</version> + <version>8.0.0-SNAPSHOT</version> <relativePath>..</relativePath> </parent> <artifactId>openmeetings-core</artifactId> diff --git a/openmeetings-db/pom.xml b/openmeetings-db/pom.xml index 416b02239..3ba12399c 100644 --- a/openmeetings-db/pom.xml +++ b/openmeetings-db/pom.xml @@ -22,7 +22,7 @@ <parent> <groupId>org.apache.openmeetings</groupId> <artifactId>openmeetings-parent</artifactId> - <version>7.2.0-SNAPSHOT</version> + <version>8.0.0-SNAPSHOT</version> <relativePath>..</relativePath> </parent> <artifactId>openmeetings-db</artifactId> diff --git a/openmeetings-install/pom.xml b/openmeetings-install/pom.xml index f01dd5faa..3e37d0ed7 100644 --- a/openmeetings-install/pom.xml +++ b/openmeetings-install/pom.xml @@ -22,7 +22,7 @@ <parent> <groupId>org.apache.openmeetings</groupId> <artifactId>openmeetings-parent</artifactId> - <version>7.2.0-SNAPSHOT</version> + <version>8.0.0-SNAPSHOT</version> <relativePath>..</relativePath> </parent> <artifactId>openmeetings-install</artifactId> diff --git a/openmeetings-mediaserver/pom.xml b/openmeetings-mediaserver/pom.xml index 017679e2f..a38173417 100644 --- a/openmeetings-mediaserver/pom.xml +++ b/openmeetings-mediaserver/pom.xml @@ -22,7 +22,7 @@ <parent> <groupId>org.apache.openmeetings</groupId> <artifactId>openmeetings-parent</artifactId> - <version>7.2.0-SNAPSHOT</version> + <version>8.0.0-SNAPSHOT</version> <relativePath>..</relativePath> </parent> <artifactId>openmeetings-mediaserver</artifactId> diff --git a/openmeetings-mediaserver/src/main/java/module-info.java b/openmeetings-mediaserver/src/main/java/module-info.java index 42f766fac..45dee43fb 100644 --- a/openmeetings-mediaserver/src/main/java/module-info.java +++ b/openmeetings-mediaserver/src/main/java/module-info.java @@ -36,6 +36,7 @@ module org.apache.openmeetings.mediaserver { requires spring.beans; requires spring.context; + requires spring.core; requires kurento.client; requires kurento.jsonrpc.client; diff --git a/openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/IStreamProcessor.java b/openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/IStreamProcessor.java deleted file mode 100644 index 6d6e65f96..000000000 --- a/openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/IStreamProcessor.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License") + you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.openmeetings.mediaserver; - -public interface IStreamProcessor { - void release(AbstractStream stream, boolean releaseStream); - void destroy(); -} diff --git a/openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/KRoom.java b/openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/KRoom.java index abffc893a..e7edc4771 100644 --- a/openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/KRoom.java +++ b/openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/KRoom.java @@ -76,7 +76,7 @@ public class KRoom { private JSONObject recordingUser = new JSONObject(); private JSONObject sharingUser = new JSONObject(); - public KRoom(Room r) { + KRoom(Room r) { this.room = r; Injector.get().inject(this); log.info("ROOM {} has been created", room.getId()); diff --git a/openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/KurentoHandler.java b/openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/KurentoHandler.java index 957d33abe..d3989f7fe 100644 --- a/openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/KurentoHandler.java +++ b/openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/KurentoHandler.java @@ -57,6 +57,7 @@ import org.kurento.client.Continuation; import org.kurento.client.Endpoint; import org.kurento.client.EventListener; import org.kurento.client.KurentoClient; +import org.kurento.client.ListenerSubscription; import org.kurento.client.MediaObject; import org.kurento.client.MediaPipeline; import org.kurento.client.ObjectCreatedEvent; @@ -69,16 +70,17 @@ import org.kurento.client.WebRtcEndpoint; import org.kurento.jsonrpc.client.JsonRpcClientNettyWebSocket; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Component; import com.github.openjson.JSONArray; import com.github.openjson.JSONObject; import jakarta.inject.Inject; +import jakarta.inject.Named; +import jakarta.inject.Singleton; -@Component +@Singleton +@Named public class KurentoHandler { private static final Logger log = LoggerFactory.getLogger(KurentoHandler.class); public static final String PARAM_ICE = "iceServers"; @@ -115,6 +117,8 @@ public class KurentoHandler { private String kuid; private CertificateKeyType certificateType; private KurentoClient client; + private ListenerSubscription objectCreatedListener; + private ListenerSubscription objectDestroyedListener; private final AtomicBoolean connected = new AtomicBoolean(false); private final Map<Long, KRoom> rooms = new ConcurrentHashMap<>(); private final Set<String> ignoredKuids = new HashSet<>(); @@ -138,6 +142,7 @@ public class KurentoHandler { @PostConstruct public void init() { + log.trace("KurentoHandler::PostConstruct"); Runnable check = () -> { try { if (client != null) { @@ -178,8 +183,8 @@ public class KurentoHandler { notifyRooms(true); } }); - client.getServerManager().addObjectCreatedListener(new KWatchDogCreate()); - client.getServerManager().addObjectDestroyedListener(event -> + objectCreatedListener = client.getServerManager().addObjectCreatedListener(new KWatchDogCreate()); + objectDestroyedListener = client.getServerManager().addObjectDestroyedListener(event -> log.debug("Kurento::ObjectDestroyedEvent objectId {}, tags {}, source {}", event.getObjectId(), event.getTags(), event.getSource()) ); } catch (Exception e) { @@ -204,6 +209,14 @@ public class KurentoHandler { client = null; if (!copy.isClosed()) { log.debug("Client will be destroyed ..."); + if (objectCreatedListener != null) { + copy.getServerManager().removeObjectCreatedListener(objectCreatedListener); + objectCreatedListener = null; + } + if (objectDestroyedListener != null) { + copy.getServerManager().removeObjectDestroyedListener(objectDestroyedListener); + objectDestroyedListener = null; + } copy.destroy(); log.debug(".... Client is destroyed"); } @@ -304,7 +317,8 @@ public class KurentoHandler { return rooms.computeIfAbsent(roomId, k -> { log.debug("Room {} does not exist. Will create now!", roomId); Room r = roomDao.get(roomId); - return new KRoom(r); + KRoom kRoom = new KRoom(r); + return kRoom; }); } @@ -382,7 +396,7 @@ public class KurentoHandler { this.certificateType = CertificateKeyType.valueOf(certificateType); } - public CertificateKeyType getCertificateType() { + CertificateKeyType getCertificateType() { return certificateType; } @@ -412,6 +426,7 @@ public class KurentoHandler { private void checkPipeline(String roomOid) { scheduler.schedule(() -> { if (client == null) { + log.trace("KWatchDog::checkPipeline Client is NULL"); return; } // still alive @@ -420,17 +435,24 @@ public class KurentoHandler { try { final String inKuid = tags.get(TAG_KUID); if (inKuid != null && ignoredKuids.contains(inKuid)) { + log.trace("KWatchDog::checkPipeline KUID in ignore list"); return; } if (validTestPipeline(tags)) { + log.trace("KWatchDog::checkPipeline test pipeline detected"); return; } if (kuid.equals(inKuid)) { - KStream stream = streamProcessor.getByUid(tags.get(TAG_STREAM_UID)); + String streamUId = tags.get(TAG_STREAM_UID); + log.trace("KWatchDog::checkPipeline kuid matched, streamId: {}", streamUId); + KStream stream = streamProcessor.getByUid(streamUId); if (stream != null) { - if (stream.getRoomId().equals(Long.valueOf(tags.get(TAG_ROOM))) - && stream.getPipeline().getId().equals(pipe.getId())) - { + Long sRoomId = stream.getRoomId(); + Long tRoomId = Long.valueOf(tags.get(TAG_ROOM)); + String pipeId = stream.getPipeline().getId(); + log.trace("KWatchDog::checkPipeline stream found! Room match ? {}, Pipe match ? {}" + , sRoomId.equals(tRoomId), pipeId.equals(pipe.getId())); + if (sRoomId.equals(tRoomId) && pipeId.equals(pipe.getId())) { return; } else { stream.release(); diff --git a/openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/StreamProcessor.java b/openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/StreamProcessor.java index e5116d70c..ee09c7545 100644 --- a/openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/StreamProcessor.java +++ b/openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/StreamProcessor.java @@ -35,11 +35,11 @@ import org.apache.openmeetings.core.converter.RecordingConverter; import org.apache.openmeetings.core.util.WebSocketHelper; import org.apache.openmeetings.db.dao.record.RecordingDao; import org.apache.openmeetings.db.entity.basic.Client; -import org.apache.openmeetings.db.entity.basic.ScreenStreamDesc; import org.apache.openmeetings.db.entity.basic.Client.Activity; +import org.apache.openmeetings.db.entity.basic.Client.StreamType; +import org.apache.openmeetings.db.entity.basic.ScreenStreamDesc; import org.apache.openmeetings.db.entity.basic.StreamDesc; import org.apache.openmeetings.db.entity.basic.WebcamStreamDesc; -import org.apache.openmeetings.db.entity.basic.Client.StreamType; import org.apache.openmeetings.db.entity.record.Recording; import org.apache.openmeetings.db.entity.room.Room; import org.apache.openmeetings.db.entity.room.Room.Right; @@ -52,17 +52,19 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.task.TaskExecutor; -import org.springframework.stereotype.Component; import com.github.openjson.JSONObject; import jakarta.inject.Inject; +import jakarta.inject.Named; +import jakarta.inject.Singleton; -@Component -public class StreamProcessor implements IStreamProcessor { +@Singleton +@Named +public class StreamProcessor { private static final Logger log = LoggerFactory.getLogger(StreamProcessor.class); /** - * Holds a reference to the current streams available on the server instance + * Holds references to the current streams available on the server instance */ private final Map<String, KStream> streamByUid = new ConcurrentHashMap<>(); @@ -465,7 +467,6 @@ public class StreamProcessor implements IStreamProcessor { return recDao; } - @Override public void release(AbstractStream stream, boolean releaseStream) { final String uid = stream.getUid(); if (releaseStream) { @@ -480,11 +481,12 @@ public class StreamProcessor implements IStreamProcessor { WebSocketHelper.sendRoom(new TextRoomMessage(c.getRoomId(), c, RoomMessage.Type.RIGHT_UPDATED, c.getUid())); } } + log.trace("StreamProcessor::release uid: {}", uid); streamByUid.remove(uid); } - @Override public void destroy() { + log.trace("StreamProcessor::destroy !!!!"); for (Map.Entry<String, KStream> e : streamByUid.entrySet()) { release(e.getValue(), true); } diff --git a/openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/StreamProcessorActions.java b/openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/StreamProcessorActions.java index ea8f7d63e..d74da8d40 100644 --- a/openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/StreamProcessorActions.java +++ b/openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/StreamProcessorActions.java @@ -35,13 +35,14 @@ import org.kurento.client.internal.server.KurentoServerException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Component; - import com.github.openjson.JSONObject; import jakarta.inject.Inject; +import jakarta.inject.Named; +import jakarta.inject.Singleton; -@Component +@Singleton +@Named public class StreamProcessorActions { private static final Logger log = LoggerFactory.getLogger(StreamProcessorActions.class); diff --git a/openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/TestStreamProcessor.java b/openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/TestStreamProcessor.java index a7309d122..42ce6fd1e 100644 --- a/openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/TestStreamProcessor.java +++ b/openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/TestStreamProcessor.java @@ -32,14 +32,15 @@ import org.apache.openmeetings.core.util.WebSocketHelper; import org.apache.openmeetings.db.entity.basic.IWsClient; import org.kurento.client.IceCandidate; -import org.springframework.stereotype.Component; - import com.github.openjson.JSONObject; import jakarta.inject.Inject; +import jakarta.inject.Named; +import jakarta.inject.Singleton; -@Component -class TestStreamProcessor implements IStreamProcessor { +@Singleton +@Named +class TestStreamProcessor { private final Map<String, KTestStream> streamByUid = new ConcurrentHashMap<>(); @Inject @@ -101,12 +102,10 @@ class TestStreamProcessor implements IStreamProcessor { } } - @Override public void release(AbstractStream stream, boolean releaseStream) { streamByUid.remove(stream.getUid()); } - @Override public void destroy() { for (Entry<String, KTestStream> e : streamByUid.entrySet()) { e.getValue().release(); diff --git a/openmeetings-mediaserver/src/test/java/module-info.test b/openmeetings-mediaserver/src/test/java/module-info.test index deaf32995..5f839623c 100644 --- a/openmeetings-mediaserver/src/test/java/module-info.test +++ b/openmeetings-mediaserver/src/test/java/module-info.test @@ -37,6 +37,7 @@ module org.apache.openmeetings.mediaserver { requires spring.beans; requires spring.context; + requires spring.core; requires kurento.client; requires kurento.jsonrpc.client; diff --git a/openmeetings-screenshare/pom.xml b/openmeetings-screenshare/pom.xml index c7c819935..05b9e9035 100644 --- a/openmeetings-screenshare/pom.xml +++ b/openmeetings-screenshare/pom.xml @@ -22,7 +22,7 @@ <parent> <groupId>org.apache.openmeetings</groupId> <artifactId>openmeetings-parent</artifactId> - <version>7.2.0-SNAPSHOT</version> + <version>8.0.0-SNAPSHOT</version> <relativePath>..</relativePath> </parent> <artifactId>openmeetings-screenshare</artifactId> diff --git a/openmeetings-server/pom.xml b/openmeetings-server/pom.xml index e51a40415..696978a04 100644 --- a/openmeetings-server/pom.xml +++ b/openmeetings-server/pom.xml @@ -22,7 +22,7 @@ <parent> <groupId>org.apache.openmeetings</groupId> <artifactId>openmeetings-parent</artifactId> - <version>7.2.0-SNAPSHOT</version> + <version>8.0.0-SNAPSHOT</version> <relativePath>..</relativePath> </parent> <artifactId>openmeetings-server</artifactId> diff --git a/openmeetings-service/pom.xml b/openmeetings-service/pom.xml index 9d7bece7a..d3524fab7 100644 --- a/openmeetings-service/pom.xml +++ b/openmeetings-service/pom.xml @@ -22,7 +22,7 @@ <parent> <groupId>org.apache.openmeetings</groupId> <artifactId>openmeetings-parent</artifactId> - <version>7.2.0-SNAPSHOT</version> + <version>8.0.0-SNAPSHOT</version> <relativePath>..</relativePath> </parent> <artifactId>openmeetings-service</artifactId> diff --git a/openmeetings-util/pom.xml b/openmeetings-util/pom.xml index 9989d3894..b4388d9a5 100644 --- a/openmeetings-util/pom.xml +++ b/openmeetings-util/pom.xml @@ -22,7 +22,7 @@ <parent> <groupId>org.apache.openmeetings</groupId> <artifactId>openmeetings-parent</artifactId> - <version>7.2.0-SNAPSHOT</version> + <version>8.0.0-SNAPSHOT</version> <relativePath>..</relativePath> </parent> <artifactId>openmeetings-util</artifactId> diff --git a/openmeetings-web/pom.xml b/openmeetings-web/pom.xml index ee8ad5190..dda3a619f 100644 --- a/openmeetings-web/pom.xml +++ b/openmeetings-web/pom.xml @@ -22,7 +22,7 @@ <parent> <groupId>org.apache.openmeetings</groupId> <artifactId>openmeetings-parent</artifactId> - <version>7.2.0-SNAPSHOT</version> + <version>8.0.0-SNAPSHOT</version> <relativePath>..</relativePath> </parent> <artifactId>openmeetings-web</artifactId> diff --git a/openmeetings-webservice/pom.xml b/openmeetings-webservice/pom.xml index d1758e1e7..acb255775 100644 --- a/openmeetings-webservice/pom.xml +++ b/openmeetings-webservice/pom.xml @@ -22,7 +22,7 @@ <parent> <groupId>org.apache.openmeetings</groupId> <artifactId>openmeetings-parent</artifactId> - <version>7.2.0-SNAPSHOT</version> + <version>8.0.0-SNAPSHOT</version> <relativePath>..</relativePath> </parent> <artifactId>openmeetings-webservice</artifactId> diff --git a/pom.xml b/pom.xml index 7d7c2e20f..1cff9f406 100644 --- a/pom.xml +++ b/pom.xml @@ -26,13 +26,13 @@ </parent> <groupId>org.apache.openmeetings</groupId> <artifactId>openmeetings-parent</artifactId> - <version>7.2.0-SNAPSHOT</version> + <version>8.0.0-SNAPSHOT</version> <packaging>pom</packaging> <name>Openmeetings</name> <description>Parent project for all OpenMeetings Maven modules. Required to hold general settings</description> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> - <project.build.outputTimestamp>2023-05-10T02:44:22Z</project.build.outputTimestamp> + <project.build.outputTimestamp>2023-09-27T11:15:33Z</project.build.outputTimestamp> <wicket.configuration>DEPLOYMENT</wicket.configuration> <om.quick.build>false</om.quick.build> <om.notquick.build>true</om.notquick.build>