EN · DE · RU · FR · ES

#585: TeamEventExternalSubscriptionCache.java

projectforge-business/src/main/java/org/projectforge/business/teamcal/externalsubscription/TeamEventExternalSubscriptionCache.java Java-Klasse, projectforge-business/src/main/java/org/projectforge/business/teamcal/externalsubscription/TeamEventExternalSubscriptionCache.java 307 Zeilen · 232 Code · 46 Kommentare · 29 leer
Zweck: Quelldatei: business/teamcal/externalsubscription/TeamEventExternalSubscriptionCache.java. TeamEventExternalSubscriptionCache.java ist Teil der Open-Source-Projektmanagement-Anwendung ProjectForge.

Quelle (erste 100 Zeilen)

/////////////////////////////////////////////////////////////////////////////
//
// Project ProjectForge Community Edition
//         www.projectforge.org
//
// Copyright (C) 2001-2026 Micromata GmbH, Germany (www.micromata.com)
//
// ProjectForge ist dual-lizenziert.
//
// Diese Community-Edition ist freie Software; Sie können es weiterverteilen und/oder
// modifizieren unter den Bedingungen der GNU General Public License, wie veröffentlicht
// von der Free Software Foundation; Version 3 der Lizenz.
//
// Diese Community-Edition wird in der Hoffnung verteilt, dass sie nützlich sein wird,
// aber OHNE JEGLICHE GEWÄHRLEISTUNG; ohne die stillschweigende Garantie der
// MARKTGÄNGIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. Siehe die GNU General
// Public License für weitere Details.
//
// Sie sollten eine Kopie der GNU General Public License zusammen mit
// diesem Programm erhalten haben; falls nicht, siehe 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 funktioniert nicht (wird zu früh aufgerufen, bevor TenantRegistryMap bereit ist).
    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;
            });
            // Starte updateCache als möglicherweise langlaufenden Thread. Vermeidet Blockieren des Aufrufers (CalendarPage).
            new Thread(() -> {
                updateCache();
            }).start();
        }
    }

Git-Verlauf

868d6abb7 2025 -> 2026
63081666f Quelldatei-Header: 2024 -> 2025.
0ceceb28f Alle Cache-Aktualisierungen laufen jetzt in isolierten Transaktionen oder Kontexten.
1b50060c3 BaseDao: umbenannt: get -> find, save -> insert, getList -> select, load -> select
87aaf6a5a Migrationsarbeit in Arbeit... BaseDao umgestaltet (noch nicht abgeschlossen) interne* Methoden umbenannt.

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 @@
 // Project ProjectForge Community Edition
 //         www.projectforge.org
 //
-// Copyright (C) 2001-2025 Micromata GmbH, Germany (www.micromata.com)
+// Copyright (C) 2001-2026 Micromata GmbH, Germany (www.micromata.com)
 //
 // ProjectForge ist dual-lizenziert.
 //

63081666f

Quelldatei-Header: 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 @@
 // Project ProjectForge Community Edition
 //         www.projectforge.org
 //
-// Copyright (C) 2001-2024 Micromata GmbH, Germany (www.micromata.com)
+// Copyright (C) 2001-2025 Micromata GmbH, Germany (www.micromata.com)
 //
 // ProjectForge ist dual-lizenziert.
 //

0ceceb28f

Alle Cache-Aktualisierungen laufen jetzt in isolierten Transaktionen oder Kontexten.
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 funktioniert nicht (wird zu früh aufgerufen, bevor TenantRegistryMap bereit ist).
-  private synchronized void init() {
-    if (!initialized) {

1b50060c3

BaseDao: umbenannt: 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 ist an dieser Stelle gültig, da wir diese Methode in einem asynchronen Thread aufrufen
-    final List<TeamCalDO> subscribedCalendars = teamCalDao.getList(filter, false);
+    final List<TeamCalDO> subscribedCalendars = teamCalDao.select(filter, false);
 
     for (final TeamCalDO calendar : subscribedCalendars) {
       updateCache(calendar);

87aaf6a5a

Migrationsarbeit in Arbeit... BaseDao umgestaltet (noch nicht abgeschlossen) interne* Methoden umbenannt.
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 ist an dieser Stelle gültig, da wir diese Methode in einem asynchronen Thread aufrufen
-    final List<TeamCalDO> subscribedCalendars = teamCalDao.internalGetList(filter);
+    final List<TeamCalDO> subscribedCalendars = teamCalDao.getList(filter, false);
 
     for (final TeamCalDO calendar : subscribedCalendars) {
       updateCache(calendar);