001/*
002 * The contents of this file are subject to the terms of the Common Development and
003 * Distribution License (the License). You may not use this file except in compliance with the
004 * License.
005 *
006 * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
007 * specific language governing permission and limitations under the License.
008 *
009 * When distributing Covered Software, include this CDDL Header Notice in each file and include
010 * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
011 * Header, with the fields enclosed by brackets [] replaced by your own identifying
012 * information: "Portions Copyright [year] [name of copyright owner]".
013 *
014 * Copyright 2008 Sun Microsystems, Inc.
015 */
016package org.opends.server.admin.std.meta;
017
018
019
020import java.util.Collection;
021import java.util.SortedSet;
022import org.forgerock.opendj.config.server.ConfigException;
023import org.forgerock.opendj.ldap.DN;
024import org.opends.server.admin.AdministratorAction;
025import org.opends.server.admin.BooleanPropertyDefinition;
026import org.opends.server.admin.ClassPropertyDefinition;
027import org.opends.server.admin.client.AuthorizationException;
028import org.opends.server.admin.client.CommunicationException;
029import org.opends.server.admin.client.ConcurrentModificationException;
030import org.opends.server.admin.client.IllegalManagedObjectNameException;
031import org.opends.server.admin.client.ManagedObject;
032import org.opends.server.admin.client.ManagedObjectDecodingException;
033import org.opends.server.admin.client.MissingMandatoryPropertiesException;
034import org.opends.server.admin.client.OperationRejectedException;
035import org.opends.server.admin.DefaultBehaviorProvider;
036import org.opends.server.admin.DefinedDefaultBehaviorProvider;
037import org.opends.server.admin.DefinitionDecodingException;
038import org.opends.server.admin.DNPropertyDefinition;
039import org.opends.server.admin.DurationPropertyDefinition;
040import org.opends.server.admin.EnumPropertyDefinition;
041import org.opends.server.admin.InstantiableRelationDefinition;
042import org.opends.server.admin.IntegerPropertyDefinition;
043import org.opends.server.admin.ManagedObjectAlreadyExistsException;
044import org.opends.server.admin.ManagedObjectDefinition;
045import org.opends.server.admin.ManagedObjectNotFoundException;
046import org.opends.server.admin.PropertyException;
047import org.opends.server.admin.PropertyOption;
048import org.opends.server.admin.PropertyProvider;
049import org.opends.server.admin.server.ConfigurationAddListener;
050import org.opends.server.admin.server.ConfigurationChangeListener;
051import org.opends.server.admin.server.ConfigurationDeleteListener;
052import org.opends.server.admin.server.ServerManagedObject;
053import org.opends.server.admin.SizePropertyDefinition;
054import org.opends.server.admin.std.client.BackendIndexCfgClient;
055import org.opends.server.admin.std.client.BackendVLVIndexCfgClient;
056import org.opends.server.admin.std.client.PDBBackendCfgClient;
057import org.opends.server.admin.std.meta.BackendCfgDefn.WritabilityMode;
058import org.opends.server.admin.std.server.BackendCfg;
059import org.opends.server.admin.std.server.BackendIndexCfg;
060import org.opends.server.admin.std.server.BackendVLVIndexCfg;
061import org.opends.server.admin.std.server.PDBBackendCfg;
062import org.opends.server.admin.std.server.PluggableBackendCfg;
063import org.opends.server.admin.StringPropertyDefinition;
064import org.opends.server.admin.Tag;
065
066
067
068/**
069 * An interface for querying the PDB Backend managed object definition
070 * meta information.
071 * <p>
072 * A PDB Backend stores application data in a Persistit database.
073 */
074public final class PDBBackendCfgDefn extends ManagedObjectDefinition<PDBBackendCfgClient, PDBBackendCfg> {
075
076  // The singleton configuration definition instance.
077  private static final PDBBackendCfgDefn INSTANCE = new PDBBackendCfgDefn();
078
079
080
081  // The "db-cache-percent" property definition.
082  private static final IntegerPropertyDefinition PD_DB_CACHE_PERCENT;
083
084
085
086  // The "db-cache-size" property definition.
087  private static final SizePropertyDefinition PD_DB_CACHE_SIZE;
088
089
090
091  // The "db-checkpointer-wakeup-interval" property definition.
092  private static final DurationPropertyDefinition PD_DB_CHECKPOINTER_WAKEUP_INTERVAL;
093
094
095
096  // The "db-directory" property definition.
097  private static final StringPropertyDefinition PD_DB_DIRECTORY;
098
099
100
101  // The "db-directory-permissions" property definition.
102  private static final StringPropertyDefinition PD_DB_DIRECTORY_PERMISSIONS;
103
104
105
106  // The "db-txn-no-sync" property definition.
107  private static final BooleanPropertyDefinition PD_DB_TXN_NO_SYNC;
108
109
110
111  // The "disk-full-threshold" property definition.
112  private static final SizePropertyDefinition PD_DISK_FULL_THRESHOLD;
113
114
115
116  // The "disk-low-threshold" property definition.
117  private static final SizePropertyDefinition PD_DISK_LOW_THRESHOLD;
118
119
120
121  // The "java-class" property definition.
122  private static final ClassPropertyDefinition PD_JAVA_CLASS;
123
124
125
126  // Build the "db-cache-percent" property definition.
127  static {
128      IntegerPropertyDefinition.Builder builder = IntegerPropertyDefinition.createBuilder(INSTANCE, "db-cache-percent");
129      builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "db-cache-percent"));
130      DefaultBehaviorProvider<Integer> provider = new DefinedDefaultBehaviorProvider<Integer>("50");
131      builder.setDefaultBehaviorProvider(provider);
132      builder.setUpperLimit(90);
133      builder.setLowerLimit(1);
134      PD_DB_CACHE_PERCENT = builder.getInstance();
135      INSTANCE.registerPropertyDefinition(PD_DB_CACHE_PERCENT);
136  }
137
138
139
140  // Build the "db-cache-size" property definition.
141  static {
142      SizePropertyDefinition.Builder builder = SizePropertyDefinition.createBuilder(INSTANCE, "db-cache-size");
143      builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "db-cache-size"));
144      DefaultBehaviorProvider<Long> provider = new DefinedDefaultBehaviorProvider<Long>("0 MB");
145      builder.setDefaultBehaviorProvider(provider);
146      builder.setLowerLimit("0 MB");
147      PD_DB_CACHE_SIZE = builder.getInstance();
148      INSTANCE.registerPropertyDefinition(PD_DB_CACHE_SIZE);
149  }
150
151
152
153  // Build the "db-checkpointer-wakeup-interval" property definition.
154  static {
155      DurationPropertyDefinition.Builder builder = DurationPropertyDefinition.createBuilder(INSTANCE, "db-checkpointer-wakeup-interval");
156      builder.setOption(PropertyOption.ADVANCED);
157      builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "db-checkpointer-wakeup-interval"));
158      DefaultBehaviorProvider<Long> provider = new DefinedDefaultBehaviorProvider<Long>("15s");
159      builder.setDefaultBehaviorProvider(provider);
160      builder.setBaseUnit("s");
161      builder.setUpperLimit("3600");
162      builder.setLowerLimit("10");
163      PD_DB_CHECKPOINTER_WAKEUP_INTERVAL = builder.getInstance();
164      INSTANCE.registerPropertyDefinition(PD_DB_CHECKPOINTER_WAKEUP_INTERVAL);
165  }
166
167
168
169  // Build the "db-directory" property definition.
170  static {
171      StringPropertyDefinition.Builder builder = StringPropertyDefinition.createBuilder(INSTANCE, "db-directory");
172      builder.setOption(PropertyOption.MANDATORY);
173      builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.COMPONENT_RESTART, INSTANCE, "db-directory"));
174      DefaultBehaviorProvider<String> provider = new DefinedDefaultBehaviorProvider<String>("db");
175      builder.setDefaultBehaviorProvider(provider);
176      PD_DB_DIRECTORY = builder.getInstance();
177      INSTANCE.registerPropertyDefinition(PD_DB_DIRECTORY);
178  }
179
180
181
182  // Build the "db-directory-permissions" property definition.
183  static {
184      StringPropertyDefinition.Builder builder = StringPropertyDefinition.createBuilder(INSTANCE, "db-directory-permissions");
185      builder.setOption(PropertyOption.ADVANCED);
186      builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.SERVER_RESTART, INSTANCE, "db-directory-permissions"));
187      DefaultBehaviorProvider<String> provider = new DefinedDefaultBehaviorProvider<String>("700");
188      builder.setDefaultBehaviorProvider(provider);
189      builder.setPattern("^7[0-7][0-7]$", "MODE");
190      PD_DB_DIRECTORY_PERMISSIONS = builder.getInstance();
191      INSTANCE.registerPropertyDefinition(PD_DB_DIRECTORY_PERMISSIONS);
192  }
193
194
195
196  // Build the "db-txn-no-sync" property definition.
197  static {
198      BooleanPropertyDefinition.Builder builder = BooleanPropertyDefinition.createBuilder(INSTANCE, "db-txn-no-sync");
199      builder.setOption(PropertyOption.ADVANCED);
200      builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "db-txn-no-sync"));
201      DefaultBehaviorProvider<Boolean> provider = new DefinedDefaultBehaviorProvider<Boolean>("true");
202      builder.setDefaultBehaviorProvider(provider);
203      PD_DB_TXN_NO_SYNC = builder.getInstance();
204      INSTANCE.registerPropertyDefinition(PD_DB_TXN_NO_SYNC);
205  }
206
207
208
209  // Build the "disk-full-threshold" property definition.
210  static {
211      SizePropertyDefinition.Builder builder = SizePropertyDefinition.createBuilder(INSTANCE, "disk-full-threshold");
212      builder.setOption(PropertyOption.ADVANCED);
213      builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "disk-full-threshold"));
214      DefaultBehaviorProvider<Long> provider = new DefinedDefaultBehaviorProvider<Long>("100 megabytes");
215      builder.setDefaultBehaviorProvider(provider);
216      builder.setLowerLimit("0");
217      PD_DISK_FULL_THRESHOLD = builder.getInstance();
218      INSTANCE.registerPropertyDefinition(PD_DISK_FULL_THRESHOLD);
219  }
220
221
222
223  // Build the "disk-low-threshold" property definition.
224  static {
225      SizePropertyDefinition.Builder builder = SizePropertyDefinition.createBuilder(INSTANCE, "disk-low-threshold");
226      builder.setOption(PropertyOption.ADVANCED);
227      builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "disk-low-threshold"));
228      DefaultBehaviorProvider<Long> provider = new DefinedDefaultBehaviorProvider<Long>("200 megabytes");
229      builder.setDefaultBehaviorProvider(provider);
230      builder.setLowerLimit("0");
231      PD_DISK_LOW_THRESHOLD = builder.getInstance();
232      INSTANCE.registerPropertyDefinition(PD_DISK_LOW_THRESHOLD);
233  }
234
235
236
237  // Build the "java-class" property definition.
238  static {
239      ClassPropertyDefinition.Builder builder = ClassPropertyDefinition.createBuilder(INSTANCE, "java-class");
240      builder.setOption(PropertyOption.MANDATORY);
241      builder.setOption(PropertyOption.ADVANCED);
242      builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.COMPONENT_RESTART, INSTANCE, "java-class"));
243      DefaultBehaviorProvider<String> provider = new DefinedDefaultBehaviorProvider<String>("org.opends.server.backends.pdb.PDBBackend");
244      builder.setDefaultBehaviorProvider(provider);
245      builder.addInstanceOf("org.opends.server.api.Backend");
246      PD_JAVA_CLASS = builder.getInstance();
247      INSTANCE.registerPropertyDefinition(PD_JAVA_CLASS);
248  }
249
250
251
252  // Register the tags associated with this managed object definition.
253  static {
254    INSTANCE.registerTag(Tag.valueOf("database"));
255  }
256
257
258
259  /**
260   * Get the PDB Backend configuration definition singleton.
261   *
262   * @return Returns the PDB Backend configuration definition
263   *         singleton.
264   */
265  public static PDBBackendCfgDefn getInstance() {
266    return INSTANCE;
267  }
268
269
270
271  /**
272   * Private constructor.
273   */
274  private PDBBackendCfgDefn() {
275    super("pdb-backend", PluggableBackendCfgDefn.getInstance());
276  }
277
278
279
280  /**
281   * {@inheritDoc}
282   */
283  public PDBBackendCfgClient createClientConfiguration(
284      ManagedObject<? extends PDBBackendCfgClient> impl) {
285    return new PDBBackendCfgClientImpl(impl);
286  }
287
288
289
290  /**
291   * {@inheritDoc}
292   */
293  public PDBBackendCfg createServerConfiguration(
294      ServerManagedObject<? extends PDBBackendCfg> impl) {
295    return new PDBBackendCfgServerImpl(impl);
296  }
297
298
299
300  /**
301   * {@inheritDoc}
302   */
303  public Class<PDBBackendCfg> getServerConfigurationClass() {
304    return PDBBackendCfg.class;
305  }
306
307
308
309  /**
310   * Get the "backend-id" property definition.
311   * <p>
312   * Specifies a name to identify the associated backend.
313   * <p>
314   * The name must be unique among all backends in the server. The
315   * backend ID may not be altered after the backend is created in the
316   * server.
317   *
318   * @return Returns the "backend-id" property definition.
319   */
320  public StringPropertyDefinition getBackendIdPropertyDefinition() {
321    return PluggableBackendCfgDefn.getInstance().getBackendIdPropertyDefinition();
322  }
323
324
325
326  /**
327   * Get the "base-dn" property definition.
328   * <p>
329   * Specifies the base DN(s) for the data that the backend handles.
330   * <p>
331   * A single backend may be responsible for one or more base DNs.
332   * Note that no two backends may have the same base DN although one
333   * backend may have a base DN that is below a base DN provided by
334   * another backend (similar to the use of sub-suffixes in the Sun
335   * Java System Directory Server). If any of the base DNs is
336   * subordinate to a base DN for another backend, then all base DNs
337   * for that backend must be subordinate to that same base DN.
338   *
339   * @return Returns the "base-dn" property definition.
340   */
341  public DNPropertyDefinition getBaseDNPropertyDefinition() {
342    return PluggableBackendCfgDefn.getInstance().getBaseDNPropertyDefinition();
343  }
344
345
346
347  /**
348   * Get the "compact-encoding" property definition.
349   * <p>
350   * Indicates whether the backend should use a compact form when
351   * encoding entries by compressing the attribute descriptions and
352   * object class sets.
353   * <p>
354   * Note that this property applies only to the entries themselves
355   * and does not impact the index data.
356   *
357   * @return Returns the "compact-encoding" property definition.
358   */
359  public BooleanPropertyDefinition getCompactEncodingPropertyDefinition() {
360    return PluggableBackendCfgDefn.getInstance().getCompactEncodingPropertyDefinition();
361  }
362
363
364
365  /**
366   * Get the "db-cache-percent" property definition.
367   * <p>
368   * Specifies the percentage of JVM memory to allocate to the
369   * database cache.
370   * <p>
371   * Specifies the percentage of memory available to the JVM that
372   * should be used for caching database contents. Note that this is
373   * only used if the value of the db-cache-size property is set to "0
374   * MB". Otherwise, the value of that property is used instead to
375   * control the cache size configuration.
376   *
377   * @return Returns the "db-cache-percent" property definition.
378   */
379  public IntegerPropertyDefinition getDBCachePercentPropertyDefinition() {
380    return PD_DB_CACHE_PERCENT;
381  }
382
383
384
385  /**
386   * Get the "db-cache-size" property definition.
387   * <p>
388   * The amount of JVM memory to allocate to the database cache.
389   * <p>
390   * Specifies the amount of memory that should be used for caching
391   * database contents. A value of "0 MB" indicates that the
392   * db-cache-percent property should be used instead to specify the
393   * cache size.
394   *
395   * @return Returns the "db-cache-size" property definition.
396   */
397  public SizePropertyDefinition getDBCacheSizePropertyDefinition() {
398    return PD_DB_CACHE_SIZE;
399  }
400
401
402
403  /**
404   * Get the "db-checkpointer-wakeup-interval" property definition.
405   * <p>
406   * Specifies the maximum length of time that may pass between
407   * checkpoints.
408   * <p>
409   * This setting controls the elapsed time between attempts to write
410   * a checkpoint to the journal. A longer interval allows more updates
411   * to accumulate in buffers before they are required to be written to
412   * disk, but also potentially causes recovery from an abrupt
413   * termination (crash) to take more time.
414   *
415   * @return Returns the "db-checkpointer-wakeup-interval" property definition.
416   */
417  public DurationPropertyDefinition getDBCheckpointerWakeupIntervalPropertyDefinition() {
418    return PD_DB_CHECKPOINTER_WAKEUP_INTERVAL;
419  }
420
421
422
423  /**
424   * Get the "db-directory" property definition.
425   * <p>
426   * Specifies the path to the filesystem directory that is used to
427   * hold the Persistit database files containing the data for this
428   * backend.
429   * <p>
430   * The path may be either an absolute path or a path relative to the
431   * directory containing the base of the OpenDJ directory server
432   * installation. The path may be any valid directory path in which
433   * the server has appropriate permissions to read and write files and
434   * has sufficient space to hold the database contents.
435   *
436   * @return Returns the "db-directory" property definition.
437   */
438  public StringPropertyDefinition getDBDirectoryPropertyDefinition() {
439    return PD_DB_DIRECTORY;
440  }
441
442
443
444  /**
445   * Get the "db-directory-permissions" property definition.
446   * <p>
447   * Specifies the permissions that should be applied to the directory
448   * containing the server database files.
449   * <p>
450   * They should be expressed as three-digit octal values, which is
451   * the traditional representation for UNIX file permissions. The
452   * three digits represent the permissions that are available for the
453   * directory's owner, group members, and other users (in that order),
454   * and each digit is the octal representation of the read, write, and
455   * execute bits. Note that this only impacts permissions on the
456   * database directory and not on the files written into that
457   * directory. On UNIX systems, the user's umask controls permissions
458   * given to the database files.
459   *
460   * @return Returns the "db-directory-permissions" property definition.
461   */
462  public StringPropertyDefinition getDBDirectoryPermissionsPropertyDefinition() {
463    return PD_DB_DIRECTORY_PERMISSIONS;
464  }
465
466
467
468  /**
469   * Get the "db-txn-no-sync" property definition.
470   * <p>
471   * Indicates whether database writes should be primarily written to
472   * an internal buffer but not immediately written to disk.
473   * <p>
474   * Setting the value of this configuration attribute to "true" may
475   * improve write performance but could cause the most recent changes
476   * to be lost if the OpenDJ directory server or the underlying JVM
477   * exits abnormally, or if an OS or hardware failure occurs (a
478   * behavior similar to running with transaction durability disabled
479   * in the Sun Java System Directory Server).
480   *
481   * @return Returns the "db-txn-no-sync" property definition.
482   */
483  public BooleanPropertyDefinition getDBTxnNoSyncPropertyDefinition() {
484    return PD_DB_TXN_NO_SYNC;
485  }
486
487
488
489  /**
490   * Get the "disk-full-threshold" property definition.
491   * <p>
492   * Full disk threshold to limit database updates
493   * <p>
494   * When the available free space on the disk used by this database
495   * instance falls below the value specified, no updates are permitted
496   * and the server returns an UNWILLING_TO_PERFORM error. Updates are
497   * allowed again as soon as free space rises above the threshold.
498   *
499   * @return Returns the "disk-full-threshold" property definition.
500   */
501  public SizePropertyDefinition getDiskFullThresholdPropertyDefinition() {
502    return PD_DISK_FULL_THRESHOLD;
503  }
504
505
506
507  /**
508   * Get the "disk-low-threshold" property definition.
509   * <p>
510   * Low disk threshold to limit database updates
511   * <p>
512   * Specifies the "low" free space on the disk. When the available
513   * free space on the disk used by this database instance falls below
514   * the value specified, protocol updates on this database are
515   * permitted only by a user with the BYPASS_LOCKDOWN privilege.
516   *
517   * @return Returns the "disk-low-threshold" property definition.
518   */
519  public SizePropertyDefinition getDiskLowThresholdPropertyDefinition() {
520    return PD_DISK_LOW_THRESHOLD;
521  }
522
523
524
525  /**
526   * Get the "enabled" property definition.
527   * <p>
528   * Indicates whether the backend is enabled in the server.
529   * <p>
530   * If a backend is not enabled, then its contents are not accessible
531   * when processing operations.
532   *
533   * @return Returns the "enabled" property definition.
534   */
535  public BooleanPropertyDefinition getEnabledPropertyDefinition() {
536    return PluggableBackendCfgDefn.getInstance().getEnabledPropertyDefinition();
537  }
538
539
540
541  /**
542   * Get the "entries-compressed" property definition.
543   * <p>
544   * Indicates whether the backend should attempt to compress entries
545   * before storing them in the database.
546   * <p>
547   * Note that this property applies only to the entries themselves
548   * and does not impact the index data. Further, the effectiveness of
549   * the compression is based on the type of data contained in the
550   * entry.
551   *
552   * @return Returns the "entries-compressed" property definition.
553   */
554  public BooleanPropertyDefinition getEntriesCompressedPropertyDefinition() {
555    return PluggableBackendCfgDefn.getInstance().getEntriesCompressedPropertyDefinition();
556  }
557
558
559
560  /**
561   * Get the "index-entry-limit" property definition.
562   * <p>
563   * Specifies the maximum number of entries that is allowed to match
564   * a given index key before that particular index key is no longer
565   * maintained.
566   * <p>
567   * This property is analogous to the ALL IDs threshold in the Sun
568   * Java System Directory Server. Note that this is the default limit
569   * for the backend, and it may be overridden on a per-attribute
570   * basis.A value of 0 means there is no limit.
571   *
572   * @return Returns the "index-entry-limit" property definition.
573   */
574  public IntegerPropertyDefinition getIndexEntryLimitPropertyDefinition() {
575    return PluggableBackendCfgDefn.getInstance().getIndexEntryLimitPropertyDefinition();
576  }
577
578
579
580  /**
581   * Get the "index-filter-analyzer-enabled" property definition.
582   * <p>
583   * Indicates whether to gather statistical information about the
584   * search filters processed by the directory server while evaluating
585   * the usage of indexes.
586   * <p>
587   * Analyzing indexes requires gathering search filter usage patterns
588   * from user requests, especially for values as specified in the
589   * filters and subsequently looking the status of those values into
590   * the index files. When a search requests is processed, internal or
591   * user generated, a first phase uses indexes to find potential
592   * entries to be returned. Depending on the search filter, if the
593   * index of one of the specified attributes matches too many entries
594   * (exceeds the index entry limit), the search becomes non-indexed.
595   * In any case, all entries thus gathered (or the entire DIT) are
596   * matched against the filter for actually returning the search
597   * result.
598   *
599   * @return Returns the "index-filter-analyzer-enabled" property definition.
600   */
601  public BooleanPropertyDefinition getIndexFilterAnalyzerEnabledPropertyDefinition() {
602    return PluggableBackendCfgDefn.getInstance().getIndexFilterAnalyzerEnabledPropertyDefinition();
603  }
604
605
606
607  /**
608   * Get the "index-filter-analyzer-max-filters" property definition.
609   * <p>
610   * The maximum number of search filter statistics to keep.
611   * <p>
612   * When the maximum number of search filter is reached, the least
613   * used one will be deleted.
614   *
615   * @return Returns the "index-filter-analyzer-max-filters" property definition.
616   */
617  public IntegerPropertyDefinition getIndexFilterAnalyzerMaxFiltersPropertyDefinition() {
618    return PluggableBackendCfgDefn.getInstance().getIndexFilterAnalyzerMaxFiltersPropertyDefinition();
619  }
620
621
622
623  /**
624   * Get the "java-class" property definition.
625   * <p>
626   * Specifies the fully-qualified name of the Java class that
627   * provides the backend implementation.
628   *
629   * @return Returns the "java-class" property definition.
630   */
631  public ClassPropertyDefinition getJavaClassPropertyDefinition() {
632    return PD_JAVA_CLASS;
633  }
634
635
636
637  /**
638   * Get the "preload-time-limit" property definition.
639   * <p>
640   * Specifies the length of time that the backend is allowed to spend
641   * "pre-loading" data when it is initialized.
642   * <p>
643   * The pre-load process is used to pre-populate the database cache,
644   * so that it can be more quickly available when the server is
645   * processing requests. A duration of zero means there is no
646   * pre-load.
647   *
648   * @return Returns the "preload-time-limit" property definition.
649   */
650  public DurationPropertyDefinition getPreloadTimeLimitPropertyDefinition() {
651    return PluggableBackendCfgDefn.getInstance().getPreloadTimeLimitPropertyDefinition();
652  }
653
654
655
656  /**
657   * Get the "writability-mode" property definition.
658   * <p>
659   * Specifies the behavior that the backend should use when
660   * processing write operations.
661   *
662   * @return Returns the "writability-mode" property definition.
663   */
664  public EnumPropertyDefinition<WritabilityMode> getWritabilityModePropertyDefinition() {
665    return PluggableBackendCfgDefn.getInstance().getWritabilityModePropertyDefinition();
666  }
667
668
669
670  /**
671   * Get the "backend-indexes" relation definition.
672   *
673   * @return Returns the "backend-indexes" relation definition.
674   */
675  public InstantiableRelationDefinition<BackendIndexCfgClient,BackendIndexCfg> getBackendIndexesRelationDefinition() {
676    return PluggableBackendCfgDefn.getInstance().getBackendIndexesRelationDefinition();
677  }
678
679
680
681  /**
682   * Get the "backend-vlv-indexes" relation definition.
683   *
684   * @return Returns the "backend-vlv-indexes" relation definition.
685   */
686  public InstantiableRelationDefinition<BackendVLVIndexCfgClient,BackendVLVIndexCfg> getBackendVLVIndexesRelationDefinition() {
687    return PluggableBackendCfgDefn.getInstance().getBackendVLVIndexesRelationDefinition();
688  }
689
690
691
692  /**
693   * Managed object client implementation.
694   */
695  private static class PDBBackendCfgClientImpl implements
696    PDBBackendCfgClient {
697
698    // Private implementation.
699    private ManagedObject<? extends PDBBackendCfgClient> impl;
700
701
702
703    // Private constructor.
704    private PDBBackendCfgClientImpl(
705        ManagedObject<? extends PDBBackendCfgClient> impl) {
706      this.impl = impl;
707    }
708
709
710
711    /**
712     * {@inheritDoc}
713     */
714    public String getBackendId() {
715      return impl.getPropertyValue(INSTANCE.getBackendIdPropertyDefinition());
716    }
717
718
719
720    /**
721     * {@inheritDoc}
722     */
723    public void setBackendId(String value) throws PropertyException {
724      impl.setPropertyValue(INSTANCE.getBackendIdPropertyDefinition(), value);
725    }
726
727
728
729    /**
730     * {@inheritDoc}
731     */
732    public SortedSet<DN> getBaseDN() {
733      return impl.getPropertyValues(INSTANCE.getBaseDNPropertyDefinition());
734    }
735
736
737
738    /**
739     * {@inheritDoc}
740     */
741    public void setBaseDN(Collection<DN> values) {
742      impl.setPropertyValues(INSTANCE.getBaseDNPropertyDefinition(), values);
743    }
744
745
746
747    /**
748     * {@inheritDoc}
749     */
750    public boolean isCompactEncoding() {
751      return impl.getPropertyValue(INSTANCE.getCompactEncodingPropertyDefinition());
752    }
753
754
755
756    /**
757     * {@inheritDoc}
758     */
759    public void setCompactEncoding(Boolean value) {
760      impl.setPropertyValue(INSTANCE.getCompactEncodingPropertyDefinition(), value);
761    }
762
763
764
765    /**
766     * {@inheritDoc}
767     */
768    public int getDBCachePercent() {
769      return impl.getPropertyValue(INSTANCE.getDBCachePercentPropertyDefinition());
770    }
771
772
773
774    /**
775     * {@inheritDoc}
776     */
777    public void setDBCachePercent(Integer value) {
778      impl.setPropertyValue(INSTANCE.getDBCachePercentPropertyDefinition(), value);
779    }
780
781
782
783    /**
784     * {@inheritDoc}
785     */
786    public long getDBCacheSize() {
787      return impl.getPropertyValue(INSTANCE.getDBCacheSizePropertyDefinition());
788    }
789
790
791
792    /**
793     * {@inheritDoc}
794     */
795    public void setDBCacheSize(Long value) {
796      impl.setPropertyValue(INSTANCE.getDBCacheSizePropertyDefinition(), value);
797    }
798
799
800
801    /**
802     * {@inheritDoc}
803     */
804    public long getDBCheckpointerWakeupInterval() {
805      return impl.getPropertyValue(INSTANCE.getDBCheckpointerWakeupIntervalPropertyDefinition());
806    }
807
808
809
810    /**
811     * {@inheritDoc}
812     */
813    public void setDBCheckpointerWakeupInterval(Long value) {
814      impl.setPropertyValue(INSTANCE.getDBCheckpointerWakeupIntervalPropertyDefinition(), value);
815    }
816
817
818
819    /**
820     * {@inheritDoc}
821     */
822    public String getDBDirectory() {
823      return impl.getPropertyValue(INSTANCE.getDBDirectoryPropertyDefinition());
824    }
825
826
827
828    /**
829     * {@inheritDoc}
830     */
831    public void setDBDirectory(String value) {
832      impl.setPropertyValue(INSTANCE.getDBDirectoryPropertyDefinition(), value);
833    }
834
835
836
837    /**
838     * {@inheritDoc}
839     */
840    public String getDBDirectoryPermissions() {
841      return impl.getPropertyValue(INSTANCE.getDBDirectoryPermissionsPropertyDefinition());
842    }
843
844
845
846    /**
847     * {@inheritDoc}
848     */
849    public void setDBDirectoryPermissions(String value) {
850      impl.setPropertyValue(INSTANCE.getDBDirectoryPermissionsPropertyDefinition(), value);
851    }
852
853
854
855    /**
856     * {@inheritDoc}
857     */
858    public boolean isDBTxnNoSync() {
859      return impl.getPropertyValue(INSTANCE.getDBTxnNoSyncPropertyDefinition());
860    }
861
862
863
864    /**
865     * {@inheritDoc}
866     */
867    public void setDBTxnNoSync(Boolean value) {
868      impl.setPropertyValue(INSTANCE.getDBTxnNoSyncPropertyDefinition(), value);
869    }
870
871
872
873    /**
874     * {@inheritDoc}
875     */
876    public long getDiskFullThreshold() {
877      return impl.getPropertyValue(INSTANCE.getDiskFullThresholdPropertyDefinition());
878    }
879
880
881
882    /**
883     * {@inheritDoc}
884     */
885    public void setDiskFullThreshold(Long value) {
886      impl.setPropertyValue(INSTANCE.getDiskFullThresholdPropertyDefinition(), value);
887    }
888
889
890
891    /**
892     * {@inheritDoc}
893     */
894    public long getDiskLowThreshold() {
895      return impl.getPropertyValue(INSTANCE.getDiskLowThresholdPropertyDefinition());
896    }
897
898
899
900    /**
901     * {@inheritDoc}
902     */
903    public void setDiskLowThreshold(Long value) {
904      impl.setPropertyValue(INSTANCE.getDiskLowThresholdPropertyDefinition(), value);
905    }
906
907
908
909    /**
910     * {@inheritDoc}
911     */
912    public Boolean isEnabled() {
913      return impl.getPropertyValue(INSTANCE.getEnabledPropertyDefinition());
914    }
915
916
917
918    /**
919     * {@inheritDoc}
920     */
921    public void setEnabled(boolean value) {
922      impl.setPropertyValue(INSTANCE.getEnabledPropertyDefinition(), value);
923    }
924
925
926
927    /**
928     * {@inheritDoc}
929     */
930    public boolean isEntriesCompressed() {
931      return impl.getPropertyValue(INSTANCE.getEntriesCompressedPropertyDefinition());
932    }
933
934
935
936    /**
937     * {@inheritDoc}
938     */
939    public void setEntriesCompressed(Boolean value) {
940      impl.setPropertyValue(INSTANCE.getEntriesCompressedPropertyDefinition(), value);
941    }
942
943
944
945    /**
946     * {@inheritDoc}
947     */
948    public int getIndexEntryLimit() {
949      return impl.getPropertyValue(INSTANCE.getIndexEntryLimitPropertyDefinition());
950    }
951
952
953
954    /**
955     * {@inheritDoc}
956     */
957    public void setIndexEntryLimit(Integer value) {
958      impl.setPropertyValue(INSTANCE.getIndexEntryLimitPropertyDefinition(), value);
959    }
960
961
962
963    /**
964     * {@inheritDoc}
965     */
966    public boolean isIndexFilterAnalyzerEnabled() {
967      return impl.getPropertyValue(INSTANCE.getIndexFilterAnalyzerEnabledPropertyDefinition());
968    }
969
970
971
972    /**
973     * {@inheritDoc}
974     */
975    public void setIndexFilterAnalyzerEnabled(Boolean value) {
976      impl.setPropertyValue(INSTANCE.getIndexFilterAnalyzerEnabledPropertyDefinition(), value);
977    }
978
979
980
981    /**
982     * {@inheritDoc}
983     */
984    public int getIndexFilterAnalyzerMaxFilters() {
985      return impl.getPropertyValue(INSTANCE.getIndexFilterAnalyzerMaxFiltersPropertyDefinition());
986    }
987
988
989
990    /**
991     * {@inheritDoc}
992     */
993    public void setIndexFilterAnalyzerMaxFilters(Integer value) {
994      impl.setPropertyValue(INSTANCE.getIndexFilterAnalyzerMaxFiltersPropertyDefinition(), value);
995    }
996
997
998
999    /**
1000     * {@inheritDoc}
1001     */
1002    public String getJavaClass() {
1003      return impl.getPropertyValue(INSTANCE.getJavaClassPropertyDefinition());
1004    }
1005
1006
1007
1008    /**
1009     * {@inheritDoc}
1010     */
1011    public void setJavaClass(String value) {
1012      impl.setPropertyValue(INSTANCE.getJavaClassPropertyDefinition(), value);
1013    }
1014
1015
1016
1017    /**
1018     * {@inheritDoc}
1019     */
1020    public long getPreloadTimeLimit() {
1021      return impl.getPropertyValue(INSTANCE.getPreloadTimeLimitPropertyDefinition());
1022    }
1023
1024
1025
1026    /**
1027     * {@inheritDoc}
1028     */
1029    public void setPreloadTimeLimit(Long value) {
1030      impl.setPropertyValue(INSTANCE.getPreloadTimeLimitPropertyDefinition(), value);
1031    }
1032
1033
1034
1035    /**
1036     * {@inheritDoc}
1037     */
1038    public WritabilityMode getWritabilityMode() {
1039      return impl.getPropertyValue(INSTANCE.getWritabilityModePropertyDefinition());
1040    }
1041
1042
1043
1044    /**
1045     * {@inheritDoc}
1046     */
1047    public void setWritabilityMode(WritabilityMode value) {
1048      impl.setPropertyValue(INSTANCE.getWritabilityModePropertyDefinition(), value);
1049    }
1050
1051
1052
1053    /**
1054     * {@inheritDoc}
1055     */
1056    public String[] listBackendIndexes() throws ConcurrentModificationException,
1057        AuthorizationException, CommunicationException {
1058      return impl.listChildren(INSTANCE.getBackendIndexesRelationDefinition());
1059    }
1060
1061
1062
1063    /**
1064     * {@inheritDoc}
1065     */
1066    public BackendIndexCfgClient getBackendIndex(String name)
1067        throws DefinitionDecodingException, ManagedObjectDecodingException,
1068        ManagedObjectNotFoundException, ConcurrentModificationException,
1069        AuthorizationException, CommunicationException {
1070      return impl.getChild(INSTANCE.getBackendIndexesRelationDefinition(), name).getConfiguration();
1071    }
1072
1073
1074
1075    /**
1076     * {@inheritDoc}
1077     */
1078    public <M extends BackendIndexCfgClient> M createBackendIndex(
1079        ManagedObjectDefinition<M, ? extends BackendIndexCfg> d, String name, Collection<PropertyException> exceptions) throws IllegalManagedObjectNameException {
1080      return impl.createChild(INSTANCE.getBackendIndexesRelationDefinition(), d, name, exceptions).getConfiguration();
1081    }
1082
1083
1084
1085    /**
1086     * {@inheritDoc}
1087     */
1088    public void removeBackendIndex(String name)
1089        throws ManagedObjectNotFoundException, ConcurrentModificationException,
1090        OperationRejectedException, AuthorizationException, CommunicationException {
1091      impl.removeChild(INSTANCE.getBackendIndexesRelationDefinition(), name);
1092    }
1093
1094
1095
1096    /**
1097     * {@inheritDoc}
1098     */
1099    public String[] listBackendVLVIndexes() throws ConcurrentModificationException,
1100        AuthorizationException, CommunicationException {
1101      return impl.listChildren(INSTANCE.getBackendVLVIndexesRelationDefinition());
1102    }
1103
1104
1105
1106    /**
1107     * {@inheritDoc}
1108     */
1109    public BackendVLVIndexCfgClient getBackendVLVIndex(String name)
1110        throws DefinitionDecodingException, ManagedObjectDecodingException,
1111        ManagedObjectNotFoundException, ConcurrentModificationException,
1112        AuthorizationException, CommunicationException {
1113      return impl.getChild(INSTANCE.getBackendVLVIndexesRelationDefinition(), name).getConfiguration();
1114    }
1115
1116
1117
1118    /**
1119     * {@inheritDoc}
1120     */
1121    public <M extends BackendVLVIndexCfgClient> M createBackendVLVIndex(
1122        ManagedObjectDefinition<M, ? extends BackendVLVIndexCfg> d, String name, Collection<PropertyException> exceptions) throws IllegalManagedObjectNameException {
1123      return impl.createChild(INSTANCE.getBackendVLVIndexesRelationDefinition(), d, name, exceptions).getConfiguration();
1124    }
1125
1126
1127
1128    /**
1129     * {@inheritDoc}
1130     */
1131    public void removeBackendVLVIndex(String name)
1132        throws ManagedObjectNotFoundException, ConcurrentModificationException,
1133        OperationRejectedException, AuthorizationException, CommunicationException {
1134      impl.removeChild(INSTANCE.getBackendVLVIndexesRelationDefinition(), name);
1135    }
1136
1137
1138
1139    /**
1140     * {@inheritDoc}
1141     */
1142    public ManagedObjectDefinition<? extends PDBBackendCfgClient, ? extends PDBBackendCfg> definition() {
1143      return INSTANCE;
1144    }
1145
1146
1147
1148    /**
1149     * {@inheritDoc}
1150     */
1151    public PropertyProvider properties() {
1152      return impl;
1153    }
1154
1155
1156
1157    /**
1158     * {@inheritDoc}
1159     */
1160    public void commit() throws ManagedObjectAlreadyExistsException,
1161        MissingMandatoryPropertiesException, ConcurrentModificationException,
1162        OperationRejectedException, AuthorizationException,
1163        CommunicationException {
1164      impl.commit();
1165    }
1166
1167
1168
1169    /** {@inheritDoc} */
1170    public String toString() {
1171      return impl.toString();
1172    }
1173  }
1174
1175
1176
1177  /**
1178   * Managed object server implementation.
1179   */
1180  private static class PDBBackendCfgServerImpl implements
1181    PDBBackendCfg {
1182
1183    // Private implementation.
1184    private ServerManagedObject<? extends PDBBackendCfg> impl;
1185
1186    // The value of the "backend-id" property.
1187    private final String pBackendId;
1188
1189    // The value of the "base-dn" property.
1190    private final SortedSet<DN> pBaseDN;
1191
1192    // The value of the "compact-encoding" property.
1193    private final boolean pCompactEncoding;
1194
1195    // The value of the "db-cache-percent" property.
1196    private final int pDBCachePercent;
1197
1198    // The value of the "db-cache-size" property.
1199    private final long pDBCacheSize;
1200
1201    // The value of the "db-checkpointer-wakeup-interval" property.
1202    private final long pDBCheckpointerWakeupInterval;
1203
1204    // The value of the "db-directory" property.
1205    private final String pDBDirectory;
1206
1207    // The value of the "db-directory-permissions" property.
1208    private final String pDBDirectoryPermissions;
1209
1210    // The value of the "db-txn-no-sync" property.
1211    private final boolean pDBTxnNoSync;
1212
1213    // The value of the "disk-full-threshold" property.
1214    private final long pDiskFullThreshold;
1215
1216    // The value of the "disk-low-threshold" property.
1217    private final long pDiskLowThreshold;
1218
1219    // The value of the "enabled" property.
1220    private final boolean pEnabled;
1221
1222    // The value of the "entries-compressed" property.
1223    private final boolean pEntriesCompressed;
1224
1225    // The value of the "index-entry-limit" property.
1226    private final int pIndexEntryLimit;
1227
1228    // The value of the "index-filter-analyzer-enabled" property.
1229    private final boolean pIndexFilterAnalyzerEnabled;
1230
1231    // The value of the "index-filter-analyzer-max-filters" property.
1232    private final int pIndexFilterAnalyzerMaxFilters;
1233
1234    // The value of the "java-class" property.
1235    private final String pJavaClass;
1236
1237    // The value of the "preload-time-limit" property.
1238    private final long pPreloadTimeLimit;
1239
1240    // The value of the "writability-mode" property.
1241    private final WritabilityMode pWritabilityMode;
1242
1243
1244
1245    // Private constructor.
1246    private PDBBackendCfgServerImpl(ServerManagedObject<? extends PDBBackendCfg> impl) {
1247      this.impl = impl;
1248      this.pBackendId = impl.getPropertyValue(INSTANCE.getBackendIdPropertyDefinition());
1249      this.pBaseDN = impl.getPropertyValues(INSTANCE.getBaseDNPropertyDefinition());
1250      this.pCompactEncoding = impl.getPropertyValue(INSTANCE.getCompactEncodingPropertyDefinition());
1251      this.pDBCachePercent = impl.getPropertyValue(INSTANCE.getDBCachePercentPropertyDefinition());
1252      this.pDBCacheSize = impl.getPropertyValue(INSTANCE.getDBCacheSizePropertyDefinition());
1253      this.pDBCheckpointerWakeupInterval = impl.getPropertyValue(INSTANCE.getDBCheckpointerWakeupIntervalPropertyDefinition());
1254      this.pDBDirectory = impl.getPropertyValue(INSTANCE.getDBDirectoryPropertyDefinition());
1255      this.pDBDirectoryPermissions = impl.getPropertyValue(INSTANCE.getDBDirectoryPermissionsPropertyDefinition());
1256      this.pDBTxnNoSync = impl.getPropertyValue(INSTANCE.getDBTxnNoSyncPropertyDefinition());
1257      this.pDiskFullThreshold = impl.getPropertyValue(INSTANCE.getDiskFullThresholdPropertyDefinition());
1258      this.pDiskLowThreshold = impl.getPropertyValue(INSTANCE.getDiskLowThresholdPropertyDefinition());
1259      this.pEnabled = impl.getPropertyValue(INSTANCE.getEnabledPropertyDefinition());
1260      this.pEntriesCompressed = impl.getPropertyValue(INSTANCE.getEntriesCompressedPropertyDefinition());
1261      this.pIndexEntryLimit = impl.getPropertyValue(INSTANCE.getIndexEntryLimitPropertyDefinition());
1262      this.pIndexFilterAnalyzerEnabled = impl.getPropertyValue(INSTANCE.getIndexFilterAnalyzerEnabledPropertyDefinition());
1263      this.pIndexFilterAnalyzerMaxFilters = impl.getPropertyValue(INSTANCE.getIndexFilterAnalyzerMaxFiltersPropertyDefinition());
1264      this.pJavaClass = impl.getPropertyValue(INSTANCE.getJavaClassPropertyDefinition());
1265      this.pPreloadTimeLimit = impl.getPropertyValue(INSTANCE.getPreloadTimeLimitPropertyDefinition());
1266      this.pWritabilityMode = impl.getPropertyValue(INSTANCE.getWritabilityModePropertyDefinition());
1267    }
1268
1269
1270
1271    /**
1272     * {@inheritDoc}
1273     */
1274    public void addPDBChangeListener(
1275        ConfigurationChangeListener<PDBBackendCfg> listener) {
1276      impl.registerChangeListener(listener);
1277    }
1278
1279
1280
1281    /**
1282     * {@inheritDoc}
1283     */
1284    public void removePDBChangeListener(
1285        ConfigurationChangeListener<PDBBackendCfg> listener) {
1286      impl.deregisterChangeListener(listener);
1287    }
1288    /**
1289     * {@inheritDoc}
1290     */
1291    public void addPluggableChangeListener(
1292        ConfigurationChangeListener<PluggableBackendCfg> listener) {
1293      impl.registerChangeListener(listener);
1294    }
1295
1296
1297
1298    /**
1299     * {@inheritDoc}
1300     */
1301    public void removePluggableChangeListener(
1302        ConfigurationChangeListener<PluggableBackendCfg> listener) {
1303      impl.deregisterChangeListener(listener);
1304    }
1305    /**
1306     * {@inheritDoc}
1307     */
1308    public void addChangeListener(
1309        ConfigurationChangeListener<BackendCfg> listener) {
1310      impl.registerChangeListener(listener);
1311    }
1312
1313
1314
1315    /**
1316     * {@inheritDoc}
1317     */
1318    public void removeChangeListener(
1319        ConfigurationChangeListener<BackendCfg> listener) {
1320      impl.deregisterChangeListener(listener);
1321    }
1322
1323
1324
1325    /**
1326     * {@inheritDoc}
1327     */
1328    public String getBackendId() {
1329      return pBackendId;
1330    }
1331
1332
1333
1334    /**
1335     * {@inheritDoc}
1336     */
1337    public SortedSet<DN> getBaseDN() {
1338      return pBaseDN;
1339    }
1340
1341
1342
1343    /**
1344     * {@inheritDoc}
1345     */
1346    public boolean isCompactEncoding() {
1347      return pCompactEncoding;
1348    }
1349
1350
1351
1352    /**
1353     * {@inheritDoc}
1354     */
1355    public int getDBCachePercent() {
1356      return pDBCachePercent;
1357    }
1358
1359
1360
1361    /**
1362     * {@inheritDoc}
1363     */
1364    public long getDBCacheSize() {
1365      return pDBCacheSize;
1366    }
1367
1368
1369
1370    /**
1371     * {@inheritDoc}
1372     */
1373    public long getDBCheckpointerWakeupInterval() {
1374      return pDBCheckpointerWakeupInterval;
1375    }
1376
1377
1378
1379    /**
1380     * {@inheritDoc}
1381     */
1382    public String getDBDirectory() {
1383      return pDBDirectory;
1384    }
1385
1386
1387
1388    /**
1389     * {@inheritDoc}
1390     */
1391    public String getDBDirectoryPermissions() {
1392      return pDBDirectoryPermissions;
1393    }
1394
1395
1396
1397    /**
1398     * {@inheritDoc}
1399     */
1400    public boolean isDBTxnNoSync() {
1401      return pDBTxnNoSync;
1402    }
1403
1404
1405
1406    /**
1407     * {@inheritDoc}
1408     */
1409    public long getDiskFullThreshold() {
1410      return pDiskFullThreshold;
1411    }
1412
1413
1414
1415    /**
1416     * {@inheritDoc}
1417     */
1418    public long getDiskLowThreshold() {
1419      return pDiskLowThreshold;
1420    }
1421
1422
1423
1424    /**
1425     * {@inheritDoc}
1426     */
1427    public boolean isEnabled() {
1428      return pEnabled;
1429    }
1430
1431
1432
1433    /**
1434     * {@inheritDoc}
1435     */
1436    public boolean isEntriesCompressed() {
1437      return pEntriesCompressed;
1438    }
1439
1440
1441
1442    /**
1443     * {@inheritDoc}
1444     */
1445    public int getIndexEntryLimit() {
1446      return pIndexEntryLimit;
1447    }
1448
1449
1450
1451    /**
1452     * {@inheritDoc}
1453     */
1454    public boolean isIndexFilterAnalyzerEnabled() {
1455      return pIndexFilterAnalyzerEnabled;
1456    }
1457
1458
1459
1460    /**
1461     * {@inheritDoc}
1462     */
1463    public int getIndexFilterAnalyzerMaxFilters() {
1464      return pIndexFilterAnalyzerMaxFilters;
1465    }
1466
1467
1468
1469    /**
1470     * {@inheritDoc}
1471     */
1472    public String getJavaClass() {
1473      return pJavaClass;
1474    }
1475
1476
1477
1478    /**
1479     * {@inheritDoc}
1480     */
1481    public long getPreloadTimeLimit() {
1482      return pPreloadTimeLimit;
1483    }
1484
1485
1486
1487    /**
1488     * {@inheritDoc}
1489     */
1490    public WritabilityMode getWritabilityMode() {
1491      return pWritabilityMode;
1492    }
1493
1494
1495
1496    /**
1497     * {@inheritDoc}
1498     */
1499    public String[] listBackendIndexes() {
1500      return impl.listChildren(INSTANCE.getBackendIndexesRelationDefinition());
1501    }
1502
1503
1504
1505    /**
1506     * {@inheritDoc}
1507     */
1508    public BackendIndexCfg getBackendIndex(String name) throws ConfigException {
1509      return impl.getChild(INSTANCE.getBackendIndexesRelationDefinition(), name).getConfiguration();
1510    }
1511
1512
1513
1514    /**
1515     * {@inheritDoc}
1516     */
1517    public void addBackendIndexAddListener(
1518        ConfigurationAddListener<BackendIndexCfg> listener) throws ConfigException {
1519      impl.registerAddListener(INSTANCE.getBackendIndexesRelationDefinition(), listener);
1520    }
1521
1522
1523
1524    /**
1525     * {@inheritDoc}
1526     */
1527    public void removeBackendIndexAddListener(
1528        ConfigurationAddListener<BackendIndexCfg> listener) {
1529      impl.deregisterAddListener(INSTANCE.getBackendIndexesRelationDefinition(), listener);
1530    }
1531
1532
1533
1534    /**
1535     * {@inheritDoc}
1536     */
1537    public void addBackendIndexDeleteListener(
1538        ConfigurationDeleteListener<BackendIndexCfg> listener) throws ConfigException {
1539      impl.registerDeleteListener(INSTANCE.getBackendIndexesRelationDefinition(), listener);
1540    }
1541
1542
1543
1544    /**
1545     * {@inheritDoc}
1546     */
1547    public void removeBackendIndexDeleteListener(
1548        ConfigurationDeleteListener<BackendIndexCfg> listener) {
1549      impl.deregisterDeleteListener(INSTANCE.getBackendIndexesRelationDefinition(), listener);
1550    }
1551
1552
1553
1554    /**
1555     * {@inheritDoc}
1556     */
1557    public String[] listBackendVLVIndexes() {
1558      return impl.listChildren(INSTANCE.getBackendVLVIndexesRelationDefinition());
1559    }
1560
1561
1562
1563    /**
1564     * {@inheritDoc}
1565     */
1566    public BackendVLVIndexCfg getBackendVLVIndex(String name) throws ConfigException {
1567      return impl.getChild(INSTANCE.getBackendVLVIndexesRelationDefinition(), name).getConfiguration();
1568    }
1569
1570
1571
1572    /**
1573     * {@inheritDoc}
1574     */
1575    public void addBackendVLVIndexAddListener(
1576        ConfigurationAddListener<BackendVLVIndexCfg> listener) throws ConfigException {
1577      impl.registerAddListener(INSTANCE.getBackendVLVIndexesRelationDefinition(), listener);
1578    }
1579
1580
1581
1582    /**
1583     * {@inheritDoc}
1584     */
1585    public void removeBackendVLVIndexAddListener(
1586        ConfigurationAddListener<BackendVLVIndexCfg> listener) {
1587      impl.deregisterAddListener(INSTANCE.getBackendVLVIndexesRelationDefinition(), listener);
1588    }
1589
1590
1591
1592    /**
1593     * {@inheritDoc}
1594     */
1595    public void addBackendVLVIndexDeleteListener(
1596        ConfigurationDeleteListener<BackendVLVIndexCfg> listener) throws ConfigException {
1597      impl.registerDeleteListener(INSTANCE.getBackendVLVIndexesRelationDefinition(), listener);
1598    }
1599
1600
1601
1602    /**
1603     * {@inheritDoc}
1604     */
1605    public void removeBackendVLVIndexDeleteListener(
1606        ConfigurationDeleteListener<BackendVLVIndexCfg> listener) {
1607      impl.deregisterDeleteListener(INSTANCE.getBackendVLVIndexesRelationDefinition(), listener);
1608    }
1609
1610
1611
1612    /**
1613     * {@inheritDoc}
1614     */
1615    public Class<? extends PDBBackendCfg> configurationClass() {
1616      return PDBBackendCfg.class;
1617    }
1618
1619
1620
1621    /**
1622     * {@inheritDoc}
1623     */
1624    public DN dn() {
1625      return impl.getDN();
1626    }
1627
1628
1629
1630    /** {@inheritDoc} */
1631    public String toString() {
1632      return impl.toString();
1633    }
1634  }
1635}