EN · DE · RU · FR · ES

#585 : TeamEventExternalSubscriptionCache.java

projectforge-business/src/main/java/org/projectforge/business/teamcal/externalsubscription/TeamEventExternalSubscriptionCache.java Classe Java, projectforge-business/src/main/java/org/projectforge/business/teamcal/externalsubscription/TeamEventExternalSubscriptionCache.java 307 lignes · 232 code · 46 commentaires · 29 vides
Objectif : Fichier source : business/teamcal/externalsubscription/TeamEventExternalSubscriptionCache.java. TeamEventExternalSubscriptionCache.java fait partie de l'application open-source de gestion de projet ProjectForge.

Source (100 premières lignes)

/////////////////////////////////////////////////////////////////////////////
//
// Projet ProjectForge Community Edition
//         www.projectforge.org
//
// Copyright (C) 2001-2026 Micromata GmbH, Allemagne (www.micromata.com)
//
// ProjectForge est sous double licence.
//
// Cette édition communautaire est un logiciel libre ; vous pouvez la redistribuer et/ou
// la modifier selon les termes de la GNU General Public License telle que publiée
// par la Free Software Foundation ; version 3 de la Licence.
//
// Cette édition communautaire est distribuée dans l'espoir qu'elle sera utile,
// mais SANS AUCUNE GARANTIE ; sans même la garantie implicite de
// QUALITÉ MARCHANDE ou d'ADÉQUATION À UN USAGE PARTICULIER. Voir la GNU General
// Public License pour plus de détails.
//
// Vous devriez avoir reçu une copie de la GNU General Public License avec
// ce programme ; sinon, consultez http://www.gnu.org/licenses/.
//
/////////////////////////////////////////////////////////////////////////////

package org.projectforge.business.teamcal.externalsubscription;

import org.apache.commons.collections4.CollectionUtils;
import org.projectforge.business.common.DataobjectAccessType;
import org.projectforge.business.teamcal.admin.TeamCalCache;
import org.projectforge.business.teamcal.admin.TeamCalDao;
import org.projectforge.business.teamcal.admin.model.TeamCalDO;
import org.projectforge.business.teamcal.admin.right.TeamCalRight;
import org.projectforge.business.teamcal.event.TeamEventFilter;
import org.projectforge.business.teamcal.event.model.TeamEventDO;
import org.projectforge.business.user.UserGroupCache;
import org.projectforge.business.user.UserRightId;
import org.projectforge.framework.persistence.api.QueryFilter;
import org.projectforge.framework.persistence.api.UserRightService;
import org.projectforge.framework.persistence.jpa.PfPersistenceService;
import org.projectforge.framework.persistence.user.api.ThreadLocalUserContext;
import org.projectforge.framework.persistence.user.entities.PFUserDO;
import org.projectforge.framework.time.DateHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.*;

/**
 * @author Johannes Unterstein (j.unterstein@micromata.de)
 */
@Component
public class TeamEventExternalSubscriptionCache {
    private static final org.slf4j.Logger log = org.slf4j.LoggerFactory
            .getLogger(TeamEventExternalSubscriptionCache.class);

    private static final long MAX_WAIT_MS_AFTER_FAILED_UPDATE = 1000 * 60 * 60 * 24; // 24 h

    private final Map<Long, TeamEventSubscription> subscriptions = new HashMap<>();

    private static final Long SUBSCRIPTION_UPDATE_TIME = 5L * 60 * 1000; // 5 min

    private transient TeamCalRight teamCalRight;

    private boolean initialized;

    @Autowired
    private TeamCalDao teamCalDao;

    @Autowired
    private PfPersistenceService persistenceService;

    @Autowired
    private TeamCalCache teamCalCache;

    @Autowired
    private UserRightService userRights;

    @Autowired
    private UserGroupCache userGroupCache;

    // @PostConstruct ne fonctionne pas (serait appelé trop tôt avant que TenantRegistryMap soit prêt).
    private synchronized void init() {
        if (!initialized) {
            persistenceService.runIsolatedReadOnly(context -> {
                final QueryFilter filter = new QueryFilter();
                filter.add(QueryFilter.eq("externalSubscription", true));
                final List<TeamCalDO> subscribedCalendars = teamCalDao.select(filter, false);
                for (final TeamCalDO calendar : subscribedCalendars) {
                    TeamEventSubscription teamEventSubscription = new TeamEventSubscription();
                    subscriptions.put(calendar.getId(), teamEventSubscription);
                }
                initialized = true;
                return null;
            });
            // Démarre updateCache comme thread potentiellement long. Évite de bloquer l'appelant (CalendarPage).
            new Thread(() -> {
                updateCache();
            }).start();
        }
    }

Historique Git

868d6abb7 2025 -> 2026
63081666f En-têtes des fichiers source : 2024 -> 2025.
0ceceb28f Tous les rafraîchissements de cache s'exécutent désormais dans des transactions ou contextes isolés.
1b50060c3 BaseDao : renommé : get -> find, save -> insert, getList -> select, load -> select
87aaf6a5a Migration en cours... BaseDao refactorisé (pas encore terminé) méthodes internal* renommées.

868d6abb7

2025 -> 2026
868d6abb75cd191a892911ac8e45058932cf9074
diff --git a/projectforge-business/src/main/java/org/projectforge/business/teamcal/externalsubscription/TeamEventExternalSubscriptionCache.java b/projectforge-business/src/main/java/org/projectforge/business/teamcal/externalsubscription/TeamEventExternalSubscriptionCache.java
index 548b1f2eb..3a8137c9e 100644
--- a/projectforge-business/src/main/java/org/projectforge/business/teamcal/externalsubscription/TeamEventExternalSubscriptionCache.java
+++ b/projectforge-business/src/main/java/org/projectforge/business/teamcal/externalsubscription/TeamEventExternalSubscriptionCache.java
@@ -3,7 +3,7 @@
 // Projet ProjectForge Community Edition
 //         www.projectforge.org
 //
-// Copyright (C) 2001-2025 Micromata GmbH, Allemagne (www.micromata.com)
+// Copyright (C) 2001-2026 Micromata GmbH, Allemagne (www.micromata.com)
 //
 // ProjectForge est sous double licence.
 //

63081666f

En-têtes des fichiers source : 2024 -> 2025.
63081666f620fb87315f01b817e560e0b2f6a33a
diff --git a/projectforge-business/src/main/java/org/projectforge/business/teamcal/externalsubscription/TeamEventExternalSubscriptionCache.java b/projectforge-business/src/main/java/org/projectforge/business/teamcal/externalsubscription/TeamEventExternalSubscriptionCache.java
index d8775d0b2..548b1f2eb 100644
--- a/projectforge-business/src/main/java/org/projectforge/business/teamcal/externalsubscription/TeamEventExternalSubscriptionCache.java
+++ b/projectforge-business/src/main/java/org/projectforge/business/teamcal/externalsubscription/TeamEventExternalSubscriptionCache.java
@@ -3,7 +3,7 @@
 // Projet ProjectForge Community Edition
 //         www.projectforge.org
 //
-// Copyright (C) 2001-2024 Micromata GmbH, Allemagne (www.micromata.com)
+// Copyright (C) 2001-2025 Micromata GmbH, Allemagne (www.micromata.com)
 //
 // ProjectForge est sous double licence.
 //

0ceceb28f

Tous les rafraîchissements de cache s'exécutent désormais dans des transactions ou contextes isolés.
0ceceb28f1640e1cbd41bad967d82663ed8bbcb1
diff --git a/projectforge-business/src/main/java/org/projectforge/business/teamcal/externalsubscription/TeamEventExternalSubscriptionCache.java b/projectforge-business/src/main/java/org/projectforge/business/teamcal/externalsubscription/TeamEventExternalSubscriptionCache.java
index 6217a58cc..d8775d0b2 100644
--- a/projectforge-business/src/main/java/org/projectforge/business/teamcal/externalsubscription/TeamEventExternalSubscriptionCache.java
+++ b/projectforge-business/src/main/java/org/projectforge/business/teamcal/externalsubscription/TeamEventExternalSubscriptionCache.java
@@ -35,6 +35,7 @@ import org.projectforge.business.user.UserGroupCache;
 import org.projectforge.business.user.UserRightId;
 import org.projectforge.framework.persistence.api.QueryFilter;
 import org.projectforge.framework.persistence.api.UserRightService;
+import org.projectforge.framework.persistence.jpa.PfPersistenceService;
 import org.projectforge.framework.persistence.user.api.ThreadLocalUserContext;
 import org.projectforge.framework.persistence.user.entities.PFUserDO;
 import org.projectforge.framework.time.DateHelper;
@@ -48,250 +49,259 @@ import java.util.*;
  */
 @Component
 public class TeamEventExternalSubscriptionCache {
-  private static final org.slf4j.Logger log = org.slf4j.LoggerFactory
-          .getLogger(TeamEventExternalSubscriptionCache.class);
+    private static final org.slf4j.Logger log = org.slf4j.LoggerFactory
+            .getLogger(TeamEventExternalSubscriptionCache.class);
 
-  private static final long MAX_WAIT_MS_AFTER_FAILED_UPDATE = 1000 * 60 * 60 * 24; // 24 h
+    private static final long MAX_WAIT_MS_AFTER_FAILED_UPDATE = 1000 * 60 * 60 * 24; // 24 h
 
-  private final Map<Long, TeamEventSubscription> subscriptions = new HashMap<>();
+    private final Map<Long, TeamEventSubscription> subscriptions = new HashMap<>();
 
-  private static final Long SUBSCRIPTION_UPDATE_TIME = 5L * 60 * 1000; // 5 min
+    private static final Long SUBSCRIPTION_UPDATE_TIME = 5L * 60 * 1000; // 5 min
 
-  private transient TeamCalRight teamCalRight;
+    private transient TeamCalRight teamCalRight;
 
-  private boolean initialized;
+    private boolean initialized;
 
-  @Autowired
-  private TeamCalDao teamCalDao;
+    @Autowired
+    private TeamCalDao teamCalDao;
 
-  @Autowired
-  private TeamCalCache teamCalCache;
+    @Autowired
+    private PfPersistenceService persistenceService;
 
-  @Autowired
-  private UserRightService userRights;
+    @Autowired
+    private TeamCalCache teamCalCache;
 
-  @Autowired
-  private UserGroupCache userGroupCache;
+    @Autowired
+    private UserRightService userRights;
 
-  // @PostConstruct ne fonctionne pas (serait appelé trop tôt avant que TenantRegistryMap soit prêt).
-  private synchronized void init() {
-    if (!initialized) {

1b50060c3

BaseDao : renommé : get -> find, save -> insert, getList -> select, load -> select
1b50060c3a4b099ec07fd85d28f514b101da4d29
diff --git a/projectforge-business/src/main/java/org/projectforge/business/teamcal/externalsubscription/TeamEventExternalSubscriptionCache.java b/projectforge-business/src/main/java/org/projectforge/business/teamcal/externalsubscription/TeamEventExternalSubscriptionCache.java
index 6f81f31c9..6217a58cc 100644
--- a/projectforge-business/src/main/java/org/projectforge/business/teamcal/externalsubscription/TeamEventExternalSubscriptionCache.java
+++ b/projectforge-business/src/main/java/org/projectforge/business/teamcal/externalsubscription/TeamEventExternalSubscriptionCache.java
@@ -78,7 +78,7 @@ public class TeamEventExternalSubscriptionCache {
     if (!initialized) {
       final QueryFilter filter = new QueryFilter();
       filter.add(QueryFilter.eq("externalSubscription", true));
-      final List<TeamCalDO> subscribedCalendars = teamCalDao.getList(filter, false);
+      final List<TeamCalDO> subscribedCalendars = teamCalDao.select(filter, false);
       for (final TeamCalDO calendar : subscribedCalendars) {
         TeamEventSubscription teamEventSubscription = new TeamEventSubscription();
         subscriptions.put(calendar.getId(), teamEventSubscription);
@@ -96,7 +96,7 @@ public class TeamEventExternalSubscriptionCache {
     final QueryFilter filter = new QueryFilter();
     filter.add(QueryFilter.eq("externalSubscription", true));
     // internalGetList est valide à ce stade, car nous appelons cette méthode dans un thread asynchrone
-    final List<TeamCalDO> subscribedCalendars = teamCalDao.getList(filter, false);
+    final List<TeamCalDO> subscribedCalendars = teamCalDao.select(filter, false);
 
     for (final TeamCalDO calendar : subscribedCalendars) {
       updateCache(calendar);

87aaf6a5a

Migration en cours... BaseDao refactorisé (pas encore terminé) méthodes internal* renommées.
87aaf6a5a5d70743be2526b286b2f735e0631193
diff --git a/projectforge-business/src/main/java/org/projectforge/business/teamcal/externalsubscription/TeamEventExternalSubscriptionCache.java b/projectforge-business/src/main/java/org/projectforge/business/teamcal/externalsubscription/TeamEventExternalSubscriptionCache.java
index fbeef97b5..6f81f31c9 100644
--- a/projectforge-business/src/main/java/org/projectforge/business/teamcal/externalsubscription/TeamEventExternalSubscriptionCache.java
+++ b/projectforge-business/src/main/java/org/projectforge/business/teamcal/externalsubscription/TeamEventExternalSubscriptionCache.java
@@ -78,7 +78,7 @@ public class TeamEventExternalSubscriptionCache {
     if (!initialized) {
       final QueryFilter filter = new QueryFilter();
       filter.add(QueryFilter.eq("externalSubscription", true));
-      final List<TeamCalDO> subscribedCalendars = teamCalDao.internalGetList(filter);
+      final List<TeamCalDO> subscribedCalendars = teamCalDao.getList(filter, false);
       for (final TeamCalDO calendar : subscribedCalendars) {
         TeamEventSubscription teamEventSubscription = new TeamEventSubscription();
         subscriptions.put(calendar.getId(), teamEventSubscription);
@@ -96,7 +96,7 @@ public class TeamEventExternalSubscriptionCache {
     final QueryFilter filter = new QueryFilter();
     filter.add(QueryFilter.eq("externalSubscription", true));
     // internalGetList est valide à ce stade, car nous appelons cette méthode dans un thread asynchrone
-    final List<TeamCalDO> subscribedCalendars = teamCalDao.internalGetList(filter);
+    final List<TeamCalDO> subscribedCalendars = teamCalDao.getList(filter, false);
 
     for (final TeamCalDO calendar : subscribedCalendars) {
       updateCache(calendar);