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