private DatastoreServiceConfig createDatastoreServiceConfigPrototype(
      PersistenceConfiguration persistenceConfiguration, String... timeoutProps) {
    DatastoreServiceConfig datastoreServiceConfig = DatastoreServiceConfig.Builder.withDefaults();

    for (String timeoutProp : timeoutProps) {
      int defaultDeadline = persistenceConfiguration.getIntProperty(timeoutProp);
      if (defaultDeadline > 0) {
        datastoreServiceConfig.deadline(defaultDeadline / 1000d);
      }
    }
    String defaultReadConsistencyStr =
        persistenceConfiguration.getStringProperty(DATASTORE_READ_CONSISTENCY_PROPERTY);
    if (defaultReadConsistencyStr != null) {
      try {
        datastoreServiceConfig.readPolicy(
            new ReadPolicy(Consistency.valueOf(defaultReadConsistencyStr)));
      } catch (IllegalArgumentException iae) {
        throw new NucleusFatalUserException(
            "Illegal value for "
                + DATASTORE_READ_CONSISTENCY_PROPERTY
                + ".  Valid values are "
                + Arrays.toString(Consistency.values()));
      }
    }
    return datastoreServiceConfig;
  }
  // visible for testing
  static DatastoreServiceConfig copyDatastoreServiceConfig(DatastoreServiceConfig config) {
    DatastoreServiceConfig newConfig =
        DatastoreServiceConfig.Builder.withImplicitTransactionManagementPolicy(
                config.getImplicitTransactionManagementPolicy())
            .readPolicy(config.getReadPolicy());

    if (config.getDeadline() != null) {
      newConfig.deadline(config.getDeadline());
    }
    return newConfig;
  }
/**
 * Provides datastore instance to use.
 *
 * @author [email protected] (Christian Ohler)
 */
public class DatastoreProvider {

  private DatastoreProvider() {}

  private static final DatastoreService STRONG_READS =
      DatastoreServiceFactory.getDatastoreService(
          DatastoreServiceConfig.Builder.withDeadline(5 /*seconds*/)
              .implicitTransactionManagementPolicy(ImplicitTransactionManagementPolicy.NONE)
              .readPolicy(new ReadPolicy(ReadPolicy.Consistency.STRONG)));

  private static final DatastoreService EVENTUAL_READS =
      DatastoreServiceFactory.getDatastoreService(
          DatastoreServiceConfig.Builder.withDeadline(5 /*seconds*/)
              .implicitTransactionManagementPolicy(ImplicitTransactionManagementPolicy.NONE)
              .readPolicy(new ReadPolicy(ReadPolicy.Consistency.EVENTUAL)));

  public static DatastoreService strongReads() {
    return STRONG_READS;
  }

  public static DatastoreService eventualReads() {
    return EVENTUAL_READS;
  }
}