Utilizzando la nuova versione 1.0 di JavaMoney API con reference implementation, proviamo a interrompere il caricamento del caricatore di risorse dal caricamento di altri ExchangeRateProvider ignorando javamoney.properties.Sovrascrivere le proprietà in javamoney.properties?
{1}conversion.default-chain=MY-PROVIDER
# Turn off loading of the default Moneta ExchangeRateProviders.
{1}load.ECBCurrentRateProvider.type=NEVER
{1}load.ECBHistoric90RateProvider.type=NEVER
{1}load.ECBHistoricRateProvider.type=NEVER
{1}load.IMFRateProvider.type=NEVER
{1}load.AbstractECBRateProvider=NEVER
Tuttavia, il registro mi dice che sono ancora in corso di caricamento:
jun 19, 2015 8:27:58 AM org.javamoney.moneta.internal.convert.AbstractECBRateProvider newDataLoaded
INFO: Loaded ECBCurrentRateProvider exchange rates for days:1
Dall'interfaccia LoaderService 'MAI PIU' innesca il caricamento della risorsa locale (e non il telecomando), ma ho anche provato "PIZZA".
public interface LoaderService {
/**
* Platform RI: The update policy defines how and when the
* {@link LoaderService} tries to update the local cache with newest version of
* the registered data resources, accessing the configured remote
* {@link URI}s. By default no remote connections are done (
* {@link UpdatePolicy#NEVER}).
*
* @author Anatole Tresch
*/
public enum UpdatePolicy {
/**
* The resource will never be updated from remote, only the fallback URL
* will be evaluated.
*/
NEVER,
/**
* The resource will be loaded automatically from remote only once on
* startup.
*/
ONSTARTUP,
/**
* The resource will be loaded automatically from remote only once, when
* accessed the first time.
*/
LAZY,
/**
* The resource should be regularly reloaded based on a schedule.
*/
SCHEDULED
}
...
Quello che abbiamo notato è che nel costruttore delle ExchangeProviders in org.javamoney.moneta.internal.convert, v'è una chiamata a loader.loadDataAsync:
AbstractECBRateProvider(ProviderContext context) {
super(context);
saxParserFactory.setNamespaceAware(false);
saxParserFactory.setValidating(false);
LoaderService loader = Bootstrap.getService(LoaderService.class);
loader.addLoaderListener(this, getDataId());
loader.loadDataAsync(getDataId());
}
Questa è la come per caso 'OnStartup' nel metodo registerData in DefaultLoaderService:
switch (updatePolicy) {
case NEVER:
loadDataLocal(resourceId);
break;
case ONSTARTUP:
loadDataAsync(resourceId);
break;
case SCHEDULED:
addScheduledLoad(res);
break;
case LAZY:
default:
break;
}
questo potrebbe essere un motivo per cui è caricato, non importa quello che ho messo nel mio javamoney.pr operties?
Come disattivare del tutto gli altri ExchangeRateProvider? Vogliamo solo utilizzare la nostra custom ExchangeRateProvider.
Grazie per la risposta! Ho presentato una Jira: https://java.net/jira/browse/JAVAMONEY-131. – Truls