Spring SAML - Lectura y actualización de metadatos de IdP en tiempo de ejecución

Estoy usando WSO2 y SSOCircle con la extensión Spring-SAML. Estamos probando configuraciones en este momento y hemos definido 2 IdP's y 2 SP's dentro de nuestro applicationContext. Entonces, actualmente, tenemos 2 IdP's estáticamente definidos dentro de nuestra configuración Spring xml y esto está funcionando. Para fines de prueba, estamos utilizando la combinación de CachingMetadataManager y ResourceBackedMetadataProvider para que los metadatos de IdP se construyan dentro de nuestro archivo WAR. Muestra:

<bean id="metadata" class="org.springframework.security.saml.metadata.CachingMetadataManager">
<constructor-arg>
  <list>
    <bean class="org.springframework.security.saml.metadata.ExtendedMetadataDelegate">
      <constructor-arg>
        <bean class="org.opensaml.saml2.metadata.provider.ResourceBackedMetadataProvider">
          <constructor-arg>
            <bean class="java.util.Timer"/>
          </constructor-arg>
          <constructor-arg>
            <bean class="org.opensaml.util.resource.ClasspathResource">
              <c,onstructor-arg value="/metadata/wso2idp_metadata.xml"/>
            </bean>
          </constructor-arg>
          <property name="parserPool" ref="parserPool"/>
        </bean>
      </constructor-arg>
      <constructor-arg>
        <bean class="org.springframework.security.saml.metadata.ExtendedMetadata">
        </bean>
      </constructor-arg>
    </bean>
    <bean class="org.springframework.security.saml.metadata.ExtendedMetadataDelegate">
      <constructor-arg>
        <bean class="org.opensaml.saml2.metadata.provider.ResourceBackedMetadataProvider">
          <constructor-arg>
            <bean class="java.util.Timer"/>
          </constructor-arg>
          <constructor-arg>
            <bean class="org.opensaml.util.resource.ClasspathResource">
              <constructor-arg value="/metadata/ssocircleidp_metadata.xml"/>
            </bean>
          </constructor-arg>
          <property name="parserPool" ref="parserPool"/>
        </bean>
      </constructor-arg>
      <constructor-arg>
        <bean class="org.springframework.security.saml.metadata.ExtendedMetadata">
        </bean>
      </constructor-arg>
    </bean>
  </list>
</constructor-arg>

Para la producción, queremos poder almacenar nuestros metadatos IdP en una base de datos (ubicada en el centro). Deseo poder agregar, eliminar y modificar los metadatos sin volver a implementar WAR o reiniciar los servidores. Inicialmente, pensé que podría anular el CachingMetadataManager y definir un constructor noarg que pudiera cargar todos los proveedores de Metadata dinámicamente, pero esto no es posible porque el CachingMetadataManager solo define un solo constructor que debe incluir una Lista de MetadataProvider. Terminé haciendo lo siguiente:

<bean id="metadataList" class="org.arbfile.util.security.saml.DBMetadataProviderList">
  <constructor-arg ref="parserPool" />
  <constructor-arg>
    <bean class="java.util.Timer"/>
  </constructor-arg>
</bean>

<bean id="metadata" class="org.springframework.security.saml.metadata.CachingMetadataManager">
   <constructor-arg ref="metadataList" />
</bean>

Bean metadataList se puede definir simplemente como:

public final class DBMetadataProviderList extends ArrayList<MetadataProvider>
{
  private final static Logger log = LoggerFactory.getLogger(DBMetadataProviderList.class);
  private ParserPool parser;

  public DBMetadataProviderList(ParserPool _parser, Timer _timer) throws MetadataProviderException
  {
    this.parser = _parser;
// Lookup metadata from DB
  }

}

Esto me permite leer los metadatos de IdP dinámicamente. Sin embargo, mi lógica se cae cuando se trata de refrescar. encontréesta publicación en el foro de primaveraSin embargo, tiene entre 3 y 4 años. ¿Cuál es la mejor manera de leer, agregar y actualizar dinámicamente los metadatos de IdP, almacenarlos en caché y actualizar el caché en algún intervalo? En mi caso, 1 fila en una tabla DB equivaldría a una sola definición de metadatos IdP.