code: public static UserAgentStringParser getCachingAndUpdatingParser(final URL dataUrl, final URL versionUrl) {
  		return CachingAndUpdatingParserHolder.getParser(dataUrl, versionUrl, RESOURCE_MODULE);
  	}
docs: Returns an implementation of {@link UserAgentStringParser} which checks at regular intervals for new versions of
  <em>UAS data</em> (also known as database). When newer data available, it automatically loads and updates it.
  Additionally the loaded data are stored in a cache file.
  
  <p>
  At initialization time the returned parser will be loaded with the <em>UAS data</em> of the cache file. If the
  cache file doesn't exist or is empty the data of this module will be loaded. The initialization is started only
  when this method is called the first time.
  
  <p>
  The update of the data store runs as background task. With this feature we try to reduce the initialization time
  of this <code>UserAgentStringParser</code>, because a network connection is involved and the remote system can be
  not available or slow.
  
  <p>
  The static class definition {@code CachingAndUpdatingParserHolder} within this factory class is <em>not</em>
  initialized until the JVM determines that {@code CachingAndUpdatingParserHolder} must be executed. The static
  class {@code CachingAndUpdatingParserHolder} is only executed when the static method
  {@code getOnlineUserAgentStringParser} is invoked on the class {@code UADetectorServiceFactory}, and the first
  time this happens the JVM will load and initialize the {@code CachingAndUpdatingParserHolder} class.
  
  <p>
  If during the operation the Internet connection gets lost, then this instance continues to work properly (and
  under correct log level settings you will get an corresponding log messages).
  
  @param dataUrl
  @param versionUrl
  @return an user agent string parser with updating service