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}