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