001// SECTION-START[License Header] 002// <editor-fold defaultstate="collapsed" desc=" Generated License "> 003/* 004 * Java Object Management and Configuration 005 * Copyright (C) Christian Schulte, 2005-206 006 * All rights reserved. 007 * 008 * Redistribution and use in source and binary forms, with or without 009 * modification, are permitted provided that the following conditions 010 * are met: 011 * 012 * o Redistributions of source code must retain the above copyright 013 * notice, this list of conditions and the following disclaimer. 014 * 015 * o Redistributions in binary form must reproduce the above copyright 016 * notice, this list of conditions and the following disclaimer in 017 * the documentation and/or other materials provided with the 018 * distribution. 019 * 020 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 021 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY 022 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 023 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT, 024 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 025 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 026 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 027 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 028 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 029 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 030 * 031 * $JOMC: DefaultObjectManager.java 4795 2013-04-21 09:09:02Z schulte $ 032 * 033 */ 034// </editor-fold> 035// SECTION-END 036package org.jomc.ri; 037 038import java.io.IOException; 039import java.lang.ref.Reference; 040import java.lang.ref.WeakReference; 041import java.lang.reflect.Array; 042import java.lang.reflect.Constructor; 043import java.lang.reflect.InvocationHandler; 044import java.lang.reflect.InvocationTargetException; 045import java.lang.reflect.Method; 046import java.math.BigInteger; 047import java.net.URI; 048import java.text.MessageFormat; 049import java.util.ArrayList; 050import java.util.Collections; 051import java.util.HashMap; 052import java.util.LinkedList; 053import java.util.List; 054import java.util.Locale; 055import java.util.Map; 056import java.util.logging.Level; 057import java.util.logging.LogRecord; 058import org.jomc.ObjectManagementException; 059import org.jomc.ObjectManager; 060import org.jomc.ObjectManagerFactory; 061import org.jomc.model.Dependency; 062import org.jomc.model.Implementation; 063import org.jomc.model.ImplementationReference; 064import org.jomc.model.Implementations; 065import org.jomc.model.Instance; 066import org.jomc.model.Message; 067import org.jomc.model.ModelObject; 068import org.jomc.model.ModelObjectException; 069import org.jomc.model.Module; 070import org.jomc.model.Modules; 071import org.jomc.model.Multiplicity; 072import org.jomc.model.Property; 073import org.jomc.model.Specification; 074import org.jomc.model.SpecificationReference; 075import org.jomc.model.Specifications; 076import org.jomc.model.modlet.ModelHelper; 077import org.jomc.modlet.Model; 078import org.jomc.modlet.ModelContext; 079import org.jomc.modlet.ModelContextFactory; 080import org.jomc.modlet.ModelException; 081import org.jomc.modlet.ModelValidationReport; 082import org.jomc.ri.model.RuntimeModelObject; 083import org.jomc.ri.model.RuntimeModules; 084import org.jomc.spi.Invocation; 085import org.jomc.spi.Invoker; 086import org.jomc.spi.Listener; 087import org.jomc.spi.Locator; 088import org.jomc.spi.Scope; 089import org.jomc.util.WeakIdentityHashMap; 090 091// SECTION-START[Documentation] 092// <editor-fold defaultstate="collapsed" desc=" Generated Documentation "> 093/** 094 * Default {@code ObjectManager} implementation. 095 * 096 * <dl> 097 * <dt><b>Identifier:</b></dt><dd>org.jomc.ri.DefaultObjectManager</dd> 098 * <dt><b>Name:</b></dt><dd>JOMC ⁑ RI ⁑ DefaultObjectManager</dd> 099 * <dt><b>Specifications:</b></dt> 100 * <dd>org.jomc.ObjectManager @ 1.0</dd> 101 * <dt><b>Abstract:</b></dt><dd>No</dd> 102 * <dt><b>Final:</b></dt><dd>No</dd> 103 * <dt><b>Stateless:</b></dt><dd>No</dd> 104 * </dl> 105 * 106 * @author <a href="mailto:cs@schulte.it">Christian Schulte</a> 1.0 107 * @version 1.2 108 */ 109// </editor-fold> 110// SECTION-END 111// SECTION-START[Annotations] 112// <editor-fold defaultstate="collapsed" desc=" Generated Annotations "> 113@javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 114// </editor-fold> 115// SECTION-END 116public class DefaultObjectManager implements ObjectManager 117{ 118 // SECTION-START[Constructors] 119 // <editor-fold defaultstate="collapsed" desc=" Generated Constructors "> 120 /** Creates a new {@code DefaultObjectManager} instance. */ 121 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 122 public DefaultObjectManager() 123 { 124 // SECTION-START[Default Constructor] 125 super(); 126 // SECTION-END 127 } 128 // </editor-fold> 129 // SECTION-END 130 // SECTION-START[ObjectManager] 131 132 public <T> T getObject( final Class<T> specification ) 133 { 134 if ( specification == null ) 135 { 136 throw new NullPointerException( "specification" ); 137 } 138 139 try 140 { 141 this.initialize(); 142 143 Class<?> specificationClass = specification; 144 if ( specification.isArray() ) 145 { 146 specificationClass = specification.getComponentType(); 147 } 148 149 final ClassLoader classLoader = this.getDefaultClassLoader( specificationClass ); 150 final Modules model = this.getModules( classLoader ); 151 final Specification s = model.getSpecification( specificationClass ); 152 153 if ( s == null ) 154 { 155 if ( this.isLoggable( Level.WARNING ) ) 156 { 157 this.log( classLoader, Level.WARNING, getMissingSpecificationMessage( 158 Locale.getDefault(), specificationClass.getName() ), null ); 159 160 } 161 162 return null; 163 } 164 165 if ( s.getMultiplicity() == Multiplicity.ONE && specification.isArray() ) 166 { 167 if ( this.isLoggable( Level.WARNING ) ) 168 { 169 this.log( classLoader, Level.WARNING, getIllegalArraySpecificationMessage( 170 Locale.getDefault(), s.getIdentifier(), s.getMultiplicity().value() ), null ); 171 172 } 173 174 return null; 175 } 176 177 if ( s.getMultiplicity() != Multiplicity.ONE && !specification.isArray() ) 178 { 179 if ( this.isLoggable( Level.WARNING ) ) 180 { 181 this.log( classLoader, Level.WARNING, getIllegalObjectSpecificationMessage( 182 Locale.getDefault(), s.getIdentifier(), s.getMultiplicity().value() ), null ); 183 184 } 185 186 return null; 187 } 188 189 Scope scope = null; 190 if ( s.getScope() != null ) 191 { 192 scope = this.getScope( s.getScope(), classLoader ); 193 194 if ( scope == null ) 195 { 196 if ( this.isLoggable( Level.WARNING ) ) 197 { 198 this.log( classLoader, Level.WARNING, getMissingScopeMessage( 199 Locale.getDefault(), s.getScope() ), null ); 200 201 } 202 203 return null; 204 } 205 } 206 207 final Implementations available = model.getImplementations( s.getIdentifier() ); 208 if ( available == null ) 209 { 210 if ( this.isLoggable( Level.WARNING ) ) 211 { 212 this.log( classLoader, Level.WARNING, getMissingImplementationsMessage( 213 Locale.getDefault(), s.getIdentifier() ), null ); 214 215 } 216 217 return null; 218 } 219 220 int idx = 0; 221 final Object[] array = new Object[ available.getImplementation().size() ]; 222 223 for ( int i = 0, s0 = available.getImplementation().size(); i < s0; i++ ) 224 { 225 final Implementation impl = available.getImplementation().get( i ); 226 227 if ( impl.getLocation() != null ) 228 { 229 if ( s.getClazz() == null ) 230 { 231 if ( this.isLoggable( Level.WARNING ) ) 232 { 233 this.log( classLoader, Level.WARNING, getMissingSpecificationClassMessage( 234 Locale.getDefault(), s.getIdentifier() ), null ); 235 236 } 237 238 return null; 239 } 240 241 final Object o = this.getObject( s.getJavaTypeName().getClass( classLoader, true ), 242 impl.getLocationUri(), classLoader ); 243 244 if ( o == null ) 245 { 246 if ( this.isLoggable( Level.WARNING ) ) 247 { 248 this.log( classLoader, Level.WARNING, getMissingObjectMessage( 249 Locale.getDefault(), impl.getIdentifier(), impl.getName() ), null ); 250 251 } 252 } 253 else if ( specificationClass.isInstance( o ) ) 254 { 255 array[idx++] = o; 256 } 257 } 258 else if ( !impl.isAbstract() ) 259 { 260 final Instance instance = model.getInstance( impl.getIdentifier() ); 261 if ( instance == null ) 262 { 263 if ( this.isLoggable( Level.WARNING ) ) 264 { 265 this.log( classLoader, Level.WARNING, getMissingInstanceMessage( 266 Locale.getDefault(), impl.getIdentifier(), impl.getName() ), null ); 267 268 } 269 270 return null; 271 } 272 273 final Object o = this.getObject( scope, instance, classLoader ); 274 if ( o == null ) 275 { 276 if ( this.isLoggable( Level.WARNING ) ) 277 { 278 this.log( classLoader, Level.WARNING, getMissingObjectMessage( 279 Locale.getDefault(), impl.getIdentifier(), impl.getName() ), null ); 280 281 } 282 } 283 else if ( specificationClass.isInstance( o ) ) 284 { 285 array[idx++] = o; 286 } 287 } 288 } 289 290 if ( specification.isArray() ) 291 { 292 @SuppressWarnings( "unchecked" ) 293 final T copy = (T) Array.newInstance( specificationClass, idx ); 294 System.arraycopy( array, 0, copy, 0, idx ); 295 return copy; 296 } 297 else if ( idx == 1 ) 298 { 299 @SuppressWarnings( "unchecked" ) 300 final T object = (T) array[0]; 301 return object; 302 } 303 304 return null; 305 } 306 catch ( final Exception e ) 307 { 308 throw new ObjectManagementException( getMessage( e ), e ); 309 } 310 } 311 312 public <T> T getObject( final Class<T> specification, final String implementationName ) 313 { 314 if ( specification == null ) 315 { 316 throw new NullPointerException( "specification" ); 317 } 318 if ( implementationName == null ) 319 { 320 throw new NullPointerException( "implementationName" ); 321 } 322 323 try 324 { 325 this.initialize(); 326 327 final ClassLoader classLoader = this.getDefaultClassLoader( specification ); 328 final Modules model = this.getModules( classLoader ); 329 final Specification s = model.getSpecification( specification ); 330 331 if ( s == null ) 332 { 333 if ( this.isLoggable( Level.WARNING ) ) 334 { 335 this.log( classLoader, Level.WARNING, getMissingSpecificationMessage( 336 Locale.getDefault(), specification.getName() ), null ); 337 338 } 339 340 return null; 341 } 342 343 Scope scope = null; 344 if ( s.getScope() != null ) 345 { 346 scope = this.getScope( s.getScope(), classLoader ); 347 348 if ( scope == null ) 349 { 350 if ( this.isLoggable( Level.WARNING ) ) 351 { 352 this.log( classLoader, Level.WARNING, getMissingScopeMessage( 353 Locale.getDefault(), s.getScope() ), null ); 354 355 } 356 357 return null; 358 } 359 } 360 361 final Implementations available = model.getImplementations( s.getIdentifier() ); 362 if ( available == null ) 363 { 364 if ( this.isLoggable( Level.WARNING ) ) 365 { 366 this.log( classLoader, Level.WARNING, getMissingImplementationsMessage( 367 Locale.getDefault(), specification.getName() ), null ); 368 369 } 370 371 return null; 372 } 373 374 final Implementation i = available.getImplementationByName( implementationName ); 375 if ( i == null ) 376 { 377 if ( this.isLoggable( Level.WARNING ) ) 378 { 379 this.log( classLoader, Level.WARNING, getMissingImplementationMessage( 380 Locale.getDefault(), s.getIdentifier(), implementationName ), null ); 381 382 } 383 384 return null; 385 } 386 387 if ( i.getLocation() != null ) 388 { 389 if ( s.getClazz() == null ) 390 { 391 if ( this.isLoggable( Level.WARNING ) ) 392 { 393 this.log( classLoader, Level.WARNING, getMissingSpecificationClassMessage( 394 Locale.getDefault(), s.getIdentifier() ), null ); 395 396 } 397 398 return null; 399 } 400 401 final T object = this.getObject( s.getJavaTypeName().getClass( classLoader, true ). 402 asSubclass( specification ), i.getLocationUri(), classLoader ); 403 404 if ( object == null ) 405 { 406 if ( this.isLoggable( Level.WARNING ) ) 407 { 408 this.log( classLoader, Level.WARNING, getMissingObjectMessage( 409 Locale.getDefault(), i.getIdentifier(), i.getName() ), null ); 410 411 } 412 413 return null; 414 } 415 416 return object; 417 } 418 else if ( !i.isAbstract() ) 419 { 420 final Instance instance = model.getInstance( i.getIdentifier() ); 421 if ( instance == null ) 422 { 423 if ( this.isLoggable( Level.WARNING ) ) 424 { 425 this.log( classLoader, Level.WARNING, getMissingInstanceMessage( 426 Locale.getDefault(), i.getIdentifier(), i.getName() ), null ); 427 428 } 429 430 return null; 431 } 432 433 final Object object = this.getObject( scope, instance, classLoader ); 434 if ( object == null ) 435 { 436 if ( this.isLoggable( Level.WARNING ) ) 437 { 438 this.log( classLoader, Level.WARNING, getMissingObjectMessage( 439 Locale.getDefault(), i.getIdentifier(), i.getName() ), null ); 440 441 } 442 443 return null; 444 } 445 else if ( specification.isInstance( object ) ) 446 { 447 @SuppressWarnings( "unchecked" ) 448 final T o = (T) object; 449 return o; 450 } 451 } 452 453 return null; 454 } 455 catch ( final Exception e ) 456 { 457 throw new ObjectManagementException( getMessage( e ), e ); 458 } 459 } 460 461 public Object getDependency( final Object object, final String dependencyName ) 462 { 463 if ( object == null ) 464 { 465 throw new NullPointerException( "object" ); 466 } 467 if ( dependencyName == null ) 468 { 469 throw new NullPointerException( "dependencyName" ); 470 } 471 472 try 473 { 474 this.initialize(); 475 476 final ClassLoader classLoader = this.getDefaultClassLoader( object.getClass() ); 477 final Modules model = this.getModules( classLoader ); 478 final Instance instance = model.getInstance( object ); 479 480 if ( instance == null ) 481 { 482 if ( this.isLoggable( Level.WARNING ) ) 483 { 484 this.log( classLoader, Level.WARNING, getMissingObjectInstanceMessage( 485 Locale.getDefault(), this.getObjectInfo( object ) ), null ); 486 487 } 488 489 return null; 490 } 491 492 synchronized ( instance ) 493 { 494 final Dependency dependency = instance.getDependencies() != null 495 ? instance.getDependencies().getDependency( dependencyName ) : null; 496 497 if ( dependency == null ) 498 { 499 if ( this.isLoggable( Level.WARNING ) ) 500 { 501 this.log( classLoader, Level.WARNING, getMissingDependencyMessage( 502 Locale.getDefault(), instance.getIdentifier(), dependencyName ), null ); 503 504 } 505 506 return null; 507 } 508 509 Object o = instance.getDependencyObjects().get( dependencyName ); 510 if ( o == null && !instance.getDependencyObjects().containsKey( dependencyName ) ) 511 { 512 final Specification ds = model.getSpecification( dependency.getIdentifier() ); 513 if ( ds == null ) 514 { 515 if ( this.isLoggable( Level.WARNING ) ) 516 { 517 this.log( classLoader, Level.WARNING, getMissingSpecificationMessage( 518 Locale.getDefault(), dependency.getIdentifier() ), null ); 519 520 } 521 522 return null; 523 } 524 525 Scope scope = null; 526 if ( ds.getScope() != null ) 527 { 528 scope = this.getScope( ds.getScope(), classLoader ); 529 530 if ( scope == null ) 531 { 532 if ( this.isLoggable( Level.WARNING ) ) 533 { 534 this.log( classLoader, Level.WARNING, getMissingScopeMessage( 535 Locale.getDefault(), ds.getScope() ), null ); 536 537 } 538 539 return null; 540 } 541 } 542 543 final Implementations available = model.getImplementations( ds.getIdentifier() ); 544 if ( available == null ) 545 { 546 if ( !dependency.isOptional() && this.isLoggable( Level.WARNING ) ) 547 { 548 this.log( classLoader, Level.WARNING, getMissingImplementationsMessage( 549 Locale.getDefault(), dependency.getIdentifier() ), null ); 550 551 } 552 553 return null; 554 } 555 556 if ( dependency.getImplementationName() != null ) 557 { 558 final Implementation i = 559 available.getImplementationByName( dependency.getImplementationName() ); 560 561 if ( i == null ) 562 { 563 if ( !dependency.isOptional() && this.isLoggable( Level.WARNING ) ) 564 { 565 this.log( classLoader, Level.WARNING, getMissingImplementationMessage( 566 Locale.getDefault(), dependency.getIdentifier(), 567 dependency.getImplementationName() ), null ); 568 569 } 570 571 return null; 572 } 573 574 if ( i.getLocation() != null ) 575 { 576 if ( ds.getClazz() == null ) 577 { 578 if ( this.isLoggable( Level.WARNING ) ) 579 { 580 this.log( classLoader, Level.WARNING, getMissingSpecificationClassMessage( 581 Locale.getDefault(), ds.getIdentifier() ), null ); 582 583 } 584 585 return null; 586 } 587 588 o = this.getObject( ds.getJavaTypeName().getClass( classLoader, true ), i.getLocationUri(), 589 classLoader ); 590 591 if ( o == null ) 592 { 593 if ( this.isLoggable( Level.WARNING ) ) 594 { 595 this.log( classLoader, Level.WARNING, getMissingObjectMessage( 596 Locale.getDefault(), i.getIdentifier(), i.getName() ), null ); 597 598 } 599 600 return null; 601 } 602 } 603 else if ( !i.isAbstract() ) 604 { 605 final Instance di = model.getInstance( i.getIdentifier(), dependency ); 606 if ( di == null ) 607 { 608 if ( this.isLoggable( Level.WARNING ) ) 609 { 610 this.log( classLoader, Level.WARNING, getMissingInstanceMessage( 611 Locale.getDefault(), i.getIdentifier(), i.getName() ), null ); 612 613 } 614 615 return null; 616 } 617 618 o = this.getObject( scope, di, classLoader ); 619 if ( o == null ) 620 { 621 if ( this.isLoggable( Level.WARNING ) ) 622 { 623 this.log( classLoader, Level.WARNING, getMissingObjectMessage( 624 Locale.getDefault(), i.getIdentifier(), i.getName() ), null ); 625 626 } 627 628 return null; 629 } 630 } 631 } 632 else if ( ds.getMultiplicity() == Multiplicity.ONE ) 633 { 634 if ( available.getImplementation().size() == 1 ) 635 { 636 final Implementation ref = available.getImplementation().get( 0 ); 637 638 if ( ref.getLocation() != null ) 639 { 640 if ( ds.getClazz() == null ) 641 { 642 if ( this.isLoggable( Level.WARNING ) ) 643 { 644 this.log( classLoader, Level.WARNING, getMissingSpecificationClassMessage( 645 Locale.getDefault(), ds.getIdentifier() ), null ); 646 647 } 648 649 return null; 650 } 651 652 o = this.getObject( ds.getJavaTypeName().getClass( classLoader, true ), 653 ref.getLocationUri(), classLoader ); 654 655 if ( o == null ) 656 { 657 if ( this.isLoggable( Level.WARNING ) ) 658 { 659 this.log( classLoader, Level.WARNING, getMissingObjectMessage( 660 Locale.getDefault(), ref.getIdentifier(), ref.getName() ), null ); 661 662 } 663 664 return null; 665 } 666 } 667 else if ( !ref.isAbstract() ) 668 { 669 final Instance di = model.getInstance( ref.getIdentifier(), dependency ); 670 if ( di == null ) 671 { 672 if ( this.isLoggable( Level.WARNING ) ) 673 { 674 this.log( classLoader, Level.WARNING, getMissingInstanceMessage( 675 Locale.getDefault(), ref.getIdentifier(), ref.getName() ), null ); 676 677 } 678 679 return null; 680 } 681 682 o = this.getObject( scope, di, classLoader ); 683 if ( o == null ) 684 { 685 if ( this.isLoggable( Level.WARNING ) ) 686 { 687 this.log( classLoader, Level.WARNING, getMissingObjectMessage( 688 Locale.getDefault(), ref.getIdentifier(), ref.getName() ), null ); 689 690 } 691 692 return null; 693 } 694 } 695 } 696 else 697 { 698 this.log( classLoader, Level.WARNING, getUnexpectedDependencyObjectsMessage( 699 Locale.getDefault(), instance.getIdentifier(), dependencyName, BigInteger.ONE, 700 available.getImplementation().size() ), null ); 701 702 } 703 } 704 else 705 { 706 int idx = 0; 707 final Object[] array = new Object[ available.getImplementation().size() ]; 708 709 if ( !available.getImplementation().isEmpty() && ds.getClazz() == null ) 710 { 711 if ( this.isLoggable( Level.WARNING ) ) 712 { 713 this.log( classLoader, Level.WARNING, getMissingSpecificationClassMessage( 714 Locale.getDefault(), ds.getIdentifier() ), null ); 715 716 } 717 718 return null; 719 } 720 721 for ( int i = 0, s0 = available.getImplementation().size(); i < s0; i++ ) 722 { 723 final Implementation a = available.getImplementation().get( i ); 724 if ( a.getLocation() != null ) 725 { 726 if ( ds.getClazz() == null ) 727 { 728 if ( this.isLoggable( Level.WARNING ) ) 729 { 730 this.log( classLoader, Level.WARNING, getMissingSpecificationClassMessage( 731 Locale.getDefault(), ds.getIdentifier() ), null ); 732 733 } 734 735 return null; 736 } 737 738 final Object o2 = this.getObject( ds.getJavaTypeName().getClass( classLoader, true ), 739 a.getLocationUri(), classLoader ); 740 741 if ( o2 == null ) 742 { 743 if ( this.isLoggable( Level.WARNING ) ) 744 { 745 this.log( classLoader, Level.WARNING, getMissingObjectMessage( 746 Locale.getDefault(), a.getIdentifier(), a.getName() ), null ); 747 748 } 749 } 750 else 751 { 752 array[idx++] = o2; 753 } 754 } 755 else if ( !a.isAbstract() ) 756 { 757 final Instance di = model.getInstance( a.getIdentifier(), dependency ); 758 if ( di == null ) 759 { 760 if ( this.isLoggable( Level.WARNING ) ) 761 { 762 this.log( classLoader, Level.WARNING, getMissingInstanceMessage( 763 Locale.getDefault(), a.getIdentifier(), a.getName() ), null ); 764 765 } 766 767 return null; 768 } 769 770 final Object o2 = this.getObject( scope, di, classLoader ); 771 if ( o2 == null ) 772 { 773 if ( this.isLoggable( Level.WARNING ) ) 774 { 775 this.log( classLoader, Level.WARNING, getMissingObjectMessage( 776 Locale.getDefault(), a.getIdentifier(), a.getName() ), null ); 777 778 } 779 } 780 else 781 { 782 array[idx++] = o2; 783 } 784 } 785 } 786 787 if ( idx > 0 ) 788 { 789 o = Array.newInstance( ds.getJavaTypeName().getClass( classLoader, true ), idx ); 790 System.arraycopy( array, 0, o, 0, idx ); 791 } 792 else 793 { 794 o = null; 795 } 796 } 797 } 798 799 if ( dependency.isBound() ) 800 { 801 instance.getDependencyObjects().put( dependencyName, o ); 802 } 803 804 return o; 805 } 806 } 807 catch ( final Exception e ) 808 { 809 throw new ObjectManagementException( getMessage( e ), e ); 810 } 811 } 812 813 public Object getProperty( final Object object, final String propertyName ) 814 { 815 if ( object == null ) 816 { 817 throw new NullPointerException( "object" ); 818 } 819 if ( propertyName == null ) 820 { 821 throw new NullPointerException( "propertyName" ); 822 } 823 824 try 825 { 826 this.initialize(); 827 828 final ClassLoader classLoader = this.getDefaultClassLoader( object.getClass() ); 829 final Modules model = this.getModules( classLoader ); 830 final Instance instance = model.getInstance( object ); 831 832 if ( instance == null ) 833 { 834 if ( this.isLoggable( Level.WARNING ) ) 835 { 836 this.log( classLoader, Level.WARNING, getMissingObjectInstanceMessage( 837 Locale.getDefault(), this.getObjectInfo( object ) ), null ); 838 839 } 840 841 return null; 842 } 843 844 synchronized ( instance ) 845 { 846 Object value = instance.getPropertyObjects().get( propertyName ); 847 848 if ( value == null && !instance.getPropertyObjects().containsKey( propertyName ) ) 849 { 850 final Property property = 851 instance.getProperties() != null ? instance.getProperties().getProperty( propertyName ) : null; 852 853 if ( property == null ) 854 { 855 if ( this.isLoggable( Level.WARNING ) ) 856 { 857 this.log( classLoader, Level.WARNING, getMissingPropertyMessage( 858 Locale.getDefault(), instance.getIdentifier(), propertyName ), null ); 859 860 } 861 862 return null; 863 } 864 865 value = property.getJavaValue( classLoader ); 866 instance.getPropertyObjects().put( propertyName, value ); 867 } 868 869 return value; 870 } 871 } 872 catch ( final Exception e ) 873 { 874 throw new ObjectManagementException( getMessage( e ), e ); 875 } 876 } 877 878 public String getMessage( final Object object, final String messageName, final Locale locale, 879 final Object... arguments ) 880 { 881 if ( object == null ) 882 { 883 throw new NullPointerException( "object" ); 884 } 885 if ( messageName == null ) 886 { 887 throw new NullPointerException( "messageName" ); 888 } 889 if ( locale == null ) 890 { 891 throw new NullPointerException( "locale" ); 892 } 893 894 try 895 { 896 this.initialize(); 897 898 final ClassLoader classLoader = this.getDefaultClassLoader( object.getClass() ); 899 final Modules model = this.getModules( classLoader ); 900 final Instance instance = model.getInstance( object ); 901 902 if ( instance == null ) 903 { 904 if ( this.isLoggable( Level.WARNING ) ) 905 { 906 this.log( classLoader, Level.WARNING, getMissingObjectInstanceMessage( 907 Locale.getDefault(), this.getObjectInfo( object ) ), null ); 908 909 } 910 911 return null; 912 } 913 914 synchronized ( instance ) 915 { 916 Map<Locale, MessageFormat> messageFormats = instance.getMessageObjects().get( messageName ); 917 918 if ( messageFormats == null ) 919 { 920 messageFormats = new HashMap<Locale, MessageFormat>(); 921 instance.getMessageObjects().put( messageName, messageFormats ); 922 } 923 924 MessageFormat messageFormat = messageFormats.get( locale ); 925 926 if ( messageFormat == null && !messageFormats.containsKey( locale ) ) 927 { 928 final Message message = 929 instance.getMessages() != null ? instance.getMessages().getMessage( messageName ) : null; 930 931 if ( message == null || message.getTemplate() == null ) 932 { 933 if ( this.isLoggable( Level.WARNING ) ) 934 { 935 this.log( classLoader, Level.WARNING, getMissingMessageMessage( 936 Locale.getDefault(), instance.getIdentifier(), messageName ), null ); 937 938 } 939 } 940 else 941 { 942 messageFormat = message.getJavaMessage( locale ); 943 } 944 945 messageFormats.put( locale, messageFormat ); 946 } 947 948 if ( messageFormat != null ) 949 { 950 synchronized ( messageFormat ) 951 { 952 return messageFormat.format( arguments ); 953 } 954 } 955 } 956 957 return null; 958 } 959 catch ( final Exception e ) 960 { 961 throw new ObjectManagementException( getMessage( e ), e ); 962 } 963 } 964 965 // SECTION-END 966 // SECTION-START[DefaultObjectManager] 967 /** Constant for the {@code Singleton} scope identifier. */ 968 protected static final String SINGLETON_SCOPE_IDENTIFIER = "Singleton"; 969 970 /** 971 * Array holding a single {@code InvocationHandler} class. 972 * @since 1.2 973 */ 974 private static final Class<?>[] INVOCATION_HANDLER_ARGUMENTS = 975 { 976 InvocationHandler.class 977 }; 978 979 /** 980 * Log level events are logged at by default. 981 * @see #getDefaultLogLevel() 982 */ 983 private static final Level DEFAULT_LOG_LEVEL = Level.WARNING; 984 985 /** Default log level. */ 986 private static volatile Level defaultLogLevel; 987 988 /** Name of the platform's bootstrap class loader class. */ 989 private static volatile String bootstrapClassLoaderClassName; 990 991 private static volatile boolean bootstrapClassLoaderClassNameInitialized; 992 993 /** 994 * Identifier of the model to search for modules by default. 995 * @since 1.1 996 */ 997 private static volatile String defaultModelIdentifier; 998 999 /** 1000 * Identifier of the model to search for modules. 1001 * @since 1.1 1002 */ 1003 private String modelIdentifier; 1004 1005 /** 1006 * Flag indicating model object class path resolution is enabled by default. 1007 * @since 1.1 1008 */ 1009 private static volatile Boolean defaultModelObjectClasspathResolutionEnabled; 1010 1011 /** 1012 * Flag indicating model object class path resolution is enabled. 1013 * @since 1.1 1014 */ 1015 private Boolean modelObjectClasspathResolutionEnabled; 1016 1017 /** 1018 * Flag indicating model processing is enabled by default. 1019 * @since 1.1 1020 */ 1021 private static volatile Boolean defaultModelProcessingEnabled; 1022 1023 /** 1024 * Flag indicating model processing is enabled. 1025 * @since 1.1 1026 */ 1027 private Boolean modelProcessingEnabled; 1028 1029 /** {@code ClassLoader} instance representing the bootstrap class loader. */ 1030 private static final ClassLoader BOOTSTRAP_CLASSLOADER = new ClassLoader( null ) 1031 { 1032 1033 @Override 1034 public String toString() 1035 { 1036 return DefaultObjectManager.class.getName() + ".BootstrapClassLoader@" 1037 + Integer.toHexString( this.hashCode() ); 1038 1039 } 1040 1041 }; 1042 1043 /** Flag indicating that initialization has been performed. */ 1044 private boolean initialized; 1045 1046 /** Log level of the instance. */ 1047 private Level logLevel; 1048 1049 /** Listeners of the instance. */ 1050 private final Map<ClassLoader, List<Listener>> listeners = 1051 new WeakIdentityHashMap<ClassLoader, List<Listener>>(); 1052 1053 /** Modules of the instance. */ 1054 private final Map<ClassLoader, Modules> modules = 1055 new WeakIdentityHashMap<ClassLoader, Modules>(); 1056 1057 /** Invokers of the instance. */ 1058 private final Map<ClassLoader, Invoker> invokers = 1059 new WeakIdentityHashMap<ClassLoader, Invoker>(); 1060 1061 /** Scopes of the instance. */ 1062 private final Map<ClassLoader, Map<String, Scope>> scopes = 1063 new WeakIdentityHashMap<ClassLoader, Map<String, Scope>>(); 1064 1065 /** Locators of the instance. */ 1066 private final Map<ClassLoader, Map<String, Locator>> locators = 1067 new WeakIdentityHashMap<ClassLoader, Map<String, Locator>>(); 1068 1069 /** Objects of the instance. */ 1070 private final Map<ClassLoader, Map<Object, Instance>> objects = 1071 new WeakIdentityHashMap<ClassLoader, Map<Object, Instance>>(); 1072 1073 /** {@code ObjectManager} singletons. */ 1074 private static final Map<ClassLoader, ObjectManager> singletons = 1075 new WeakIdentityHashMap<ClassLoader, ObjectManager>(); 1076 1077 /** 1078 * Default class loaders cache. 1079 * @since 1.2 1080 */ 1081 private static final Map<ClassLoader, Reference<ClassLoader>> defaultClassLoaders = 1082 new WeakIdentityHashMap<ClassLoader, Reference<ClassLoader>>(); 1083 1084 /** 1085 * Proxy class constructors by class loader any instance cache. 1086 * @since 1.2 1087 */ 1088 private static final Map<ClassLoader, Map<String, Reference<Constructor<?>>>> proxyClassConstructors = 1089 new WeakIdentityHashMap<ClassLoader, Map<String, Reference<Constructor<?>>>>(); 1090 1091 /** 1092 * Default {@link ObjectManagerFactory#getObjectManager(ClassLoader)} implementation. 1093 * 1094 * @param classLoader The class loader to use for getting the singleton instance; {@code null} to use the platform's 1095 * bootstrap class loader. 1096 * 1097 * @return The default {@code ObjectManager} singleton instance. 1098 * 1099 * @see ObjectManagerFactory#getObjectManager(ClassLoader) 1100 */ 1101 public static ObjectManager getObjectManager( final ClassLoader classLoader ) 1102 { 1103 ObjectManager manager; 1104 final ClassLoader singletonsLoader = getClassLoader( classLoader ); 1105 1106 synchronized ( singletons ) 1107 { 1108 manager = singletons.get( singletonsLoader ); 1109 1110 if ( manager == null ) 1111 { 1112 manager = ObjectManagerFactory.newObjectManager( classLoader ); 1113 1114 if ( singletons.put( singletonsLoader, manager ) != null ) 1115 { 1116 throw new AssertionError( getScopeContentionFailure( 1117 Locale.getDefault(), manager.getClass().getName() ) ); 1118 1119 } 1120 } 1121 } 1122 1123 return manager.getObject( ObjectManager.class ); 1124 } 1125 1126 /** 1127 * Gets the list of listeners registered with the class loader of the instance. 1128 * <p>Calling this method is the same as calling<blockquote><pre> 1129 * getListeners( getClassLoader( getClass() ) );</pre></blockquote> 1130 * 1131 * @return The list of registered listeners. 1132 * 1133 * @throws ObjectManagementException if getting the list of listeners fails. 1134 * 1135 * @see #getListeners(java.lang.ClassLoader) 1136 */ 1137 public List<Listener> getListeners() 1138 { 1139 return this.getListeners( this.getDefaultClassLoader( this.getClass() ) ); 1140 } 1141 1142 /** 1143 * Gets the list of listeners registered with a given class loader. 1144 * 1145 * @param classLoader The class loader to get registered listeners of. 1146 * 1147 * @return The list of listeners registered with {@code classLoader}. 1148 * 1149 * @throws NullPointerException if {@code classLoader} is {@code null}. 1150 * @throws ObjectManagementException if getting the list of listeners fails. 1151 * 1152 * @see #getDefaultListener(org.jomc.model.Modules) 1153 * 1154 * @since 1.1 1155 */ 1156 public List<Listener> getListeners( final ClassLoader classLoader ) 1157 { 1158 if ( classLoader == null ) 1159 { 1160 throw new NullPointerException( "classLoader" ); 1161 } 1162 1163 try 1164 { 1165 final ClassLoader listenersLoader = this.getDefaultClassLoader( classLoader ); 1166 1167 synchronized ( this.listeners ) 1168 { 1169 List<Listener> cachedListeners = this.listeners.get( listenersLoader ); 1170 1171 if ( cachedListeners == null ) 1172 { 1173 final List<LogRecord> bootstrapRecords = new ArrayList<LogRecord>( 1024 ); 1174 final Listener bootstrapListener = new Listener() 1175 { 1176 1177 public void onLog( final Level level, final String message, final Throwable throwable ) 1178 { 1179 final LogRecord r = new LogRecord( level, message ); 1180 r.setThrown( throwable ); 1181 1182 bootstrapRecords.add( r ); 1183 } 1184 1185 }; 1186 1187 cachedListeners = new LinkedList<Listener>(); 1188 cachedListeners.add( bootstrapListener ); 1189 this.listeners.put( listenersLoader, cachedListeners ); 1190 1191 final List<Listener> modelListeners = new LinkedList<Listener>(); 1192 final Modules model = this.getModules( classLoader ); 1193 final Specification listenerSpecification = model.getSpecification( Listener.class ); 1194 1195 if ( listenerSpecification != null ) 1196 { 1197 final Implementations implementations = 1198 model.getImplementations( listenerSpecification.getIdentifier() ); 1199 1200 if ( implementations != null && !implementations.getImplementation().isEmpty() ) 1201 { 1202 for ( int i = 0, s0 = implementations.getImplementation().size(); i < s0; i++ ) 1203 { 1204 final Implementation impl = implementations.getImplementation().get( i ); 1205 final Instance listenerInstance = model.getInstance( impl.getIdentifier() ); 1206 if ( listenerInstance != null ) 1207 { 1208 try 1209 { 1210 final Listener l = 1211 (Listener) model.createObject( listenerInstance, classLoader ); 1212 1213 modelListeners.add( l ); 1214 1215 if ( this.isLoggable( Level.CONFIG ) ) 1216 { 1217 this.log( classLoader, Level.CONFIG, getListenerInfoMessage( 1218 Locale.getDefault(), l.getClass().getName(), 1219 this.getClassLoaderInfo( classLoader, listenersLoader ) ), null ); 1220 1221 } 1222 } 1223 catch ( final InstantiationException e ) 1224 { 1225 if ( this.isLoggable( Level.SEVERE ) ) 1226 { 1227 this.log( classLoader, Level.SEVERE, getMessage( e ), e ); 1228 } 1229 } 1230 } 1231 else if ( this.isLoggable( Level.WARNING ) ) 1232 { 1233 this.log( classLoader, Level.WARNING, getMissingInstanceMessage( 1234 Locale.getDefault(), impl.getIdentifier(), impl.getName() ), null ); 1235 1236 } 1237 } 1238 } 1239 else if ( this.isLoggable( Level.WARNING ) ) 1240 { 1241 this.log( classLoader, Level.WARNING, getMissingImplementationsMessage( 1242 Locale.getDefault(), listenerSpecification.getIdentifier() ), null ); 1243 1244 } 1245 } 1246 else if ( this.isLoggable( Level.WARNING ) ) 1247 { 1248 this.log( classLoader, Level.WARNING, getMissingSpecificationMessage( 1249 Locale.getDefault(), Listener.class.getName() ), null ); 1250 1251 } 1252 1253 cachedListeners.remove( bootstrapListener ); 1254 cachedListeners.addAll( modelListeners ); 1255 1256 if ( cachedListeners.isEmpty() ) 1257 { 1258 if ( !classLoader.equals( this.getDefaultClassLoader( this.getClass() ) ) ) 1259 { 1260 cachedListeners.addAll( this.getListeners() ); 1261 } 1262 else 1263 { 1264 cachedListeners.add( this.getDefaultListener( model ) ); 1265 1266 if ( this.isLoggable( Level.CONFIG ) ) 1267 { 1268 this.log( Level.CONFIG, getDefaultListenerInfo( 1269 Locale.getDefault(), this.getClassLoaderInfo( classLoader, listenersLoader ) ), 1270 null ); 1271 1272 } 1273 } 1274 } 1275 1276 for ( LogRecord r : bootstrapRecords ) 1277 { 1278 this.log( classLoader, r.getLevel(), r.getMessage(), r.getThrown() ); 1279 } 1280 } 1281 1282 return cachedListeners; 1283 } 1284 } 1285 catch ( final ModelObjectException e ) 1286 { 1287 throw new ObjectManagementException( getMessage( e ), e ); 1288 } 1289 } 1290 1291 /** 1292 * Gets a new default listener implementation instance. 1293 * 1294 * @return A new default listener implementation instance. 1295 * 1296 * @see #getListeners() 1297 * @see #getListeners(java.lang.ClassLoader) 1298 * 1299 * @since 1.1 1300 * 1301 * @deprecated As of JOMC 1.2, replaced by method {@link #getDefaultListener(org.jomc.model.Modules)}. This method 1302 * will be removed in version 2.0. 1303 */ 1304 @Deprecated 1305 public Listener getDefaultListener() 1306 { 1307 return new DefaultListener(); 1308 } 1309 1310 /** 1311 * Gets a new default listener implementation instance. 1312 * 1313 * @param model The model to get a new default listener implementation instance of. 1314 * 1315 * @return A new default listener implementation instance. 1316 * 1317 * @throws NullPointerException if {@code model} is {@code null}. 1318 * @throws ObjectManagementException if getting a new default listener implementation instance fails. 1319 * 1320 * @see #getListeners() 1321 * @see #getListeners(java.lang.ClassLoader) 1322 * 1323 * @since 1.2 1324 */ 1325 public Listener getDefaultListener( final Modules model ) 1326 { 1327 if ( model == null ) 1328 { 1329 throw new NullPointerException( "model" ); 1330 } 1331 1332 try 1333 { 1334 final Listener defaultListener = new DefaultListener(); 1335 model.getInstance( defaultListener ); 1336 return defaultListener; 1337 } 1338 catch ( final ModelObjectException e ) 1339 { 1340 throw new ObjectManagementException( getMessage( e ), e ); 1341 } 1342 } 1343 1344 /** 1345 * Gets the default log level events are logged at. 1346 * <p>The default log level is controlled by system property 1347 * {@code org.jomc.ri.DefaultObjectManager.defaultLogLevel} holding the log level to log events at by default. 1348 * If that property is not set, the {@code WARNING} default is returned.</p> 1349 * 1350 * @return The log level events are logged at by default. 1351 * 1352 * @see #getLogLevel() 1353 * @see Level#parse(java.lang.String) 1354 */ 1355 public static Level getDefaultLogLevel() 1356 { 1357 if ( defaultLogLevel == null ) 1358 { 1359 defaultLogLevel = Level.parse( System.getProperty( "org.jomc.ri.DefaultObjectManager.defaultLogLevel", 1360 DEFAULT_LOG_LEVEL.getName() ) ); 1361 1362 } 1363 1364 return defaultLogLevel; 1365 } 1366 1367 /** 1368 * Sets the default log level events are logged at. 1369 * 1370 * @param value The new default level events are logged at or {@code null}. 1371 * 1372 * @see #getDefaultLogLevel() 1373 */ 1374 public static void setDefaultLogLevel( final Level value ) 1375 { 1376 defaultLogLevel = value; 1377 } 1378 1379 /** 1380 * Gets the log level of the instance. 1381 * 1382 * @return The log level of the instance. 1383 * 1384 * @see #getDefaultLogLevel() 1385 * @see #setLogLevel(java.util.logging.Level) 1386 * @see #isLoggable(java.util.logging.Level) 1387 */ 1388 public final Level getLogLevel() 1389 { 1390 if ( this.logLevel == null ) 1391 { 1392 this.logLevel = getDefaultLogLevel(); 1393 1394 if ( this.isLoggable( Level.CONFIG ) ) 1395 { 1396 this.log( Level.CONFIG, getDefaultLogLevelInfoMessage( 1397 Locale.getDefault(), this.logLevel.getLocalizedName() ), null ); 1398 1399 } 1400 } 1401 1402 return this.logLevel; 1403 } 1404 1405 /** 1406 * Sets the log level of the instance. 1407 * 1408 * @param value The new log level of the instance or {@code null}. 1409 * 1410 * @see #getLogLevel() 1411 * @see #isLoggable(java.util.logging.Level) 1412 */ 1413 public final void setLogLevel( final Level value ) 1414 { 1415 this.logLevel = value; 1416 } 1417 1418 /** 1419 * Checks if a message at a given level is provided to the listeners of the instance. 1420 * 1421 * @param level The level to test. 1422 * 1423 * @return {@code true}, if messages at {@code level} are provided to the listeners of the instance; 1424 * {@code false}, if messages at {@code level} are not provided to the listeners of the instance. 1425 * 1426 * @throws NullPointerException if {@code level} is {@code null}. 1427 * 1428 * @see #getLogLevel() 1429 * @see #setLogLevel(java.util.logging.Level) 1430 * @see #log(java.util.logging.Level, java.lang.String, java.lang.Throwable) 1431 * @see #log(java.lang.ClassLoader, java.util.logging.Level, java.lang.String, java.lang.Throwable) 1432 */ 1433 public boolean isLoggable( final Level level ) 1434 { 1435 if ( level == null ) 1436 { 1437 throw new NullPointerException( "level" ); 1438 } 1439 1440 return level.intValue() >= this.getLogLevel().intValue(); 1441 } 1442 1443 /** 1444 * Notifies listeners registered with the class loader of the instance. 1445 * <p>Calling this method is the same as calling<blockquote><pre> 1446 * log( getClassLoader( getClass() ), level, message, throwable );</pre></blockquote></p> 1447 * 1448 * @param level The level of the event. 1449 * @param message The message of the event or {@code null}. 1450 * @param throwable The throwable of the event or {@code null}. 1451 * 1452 * @throws NullPointerException if {@code level} is {@code null}. 1453 * @throws ObjectManagementException if notifying listeners fails. 1454 * 1455 * @see #log(java.lang.ClassLoader, java.util.logging.Level, java.lang.String, java.lang.Throwable) 1456 */ 1457 public void log( final Level level, final String message, final Throwable throwable ) 1458 { 1459 this.log( this.getDefaultClassLoader( this.getClass() ), level, message, throwable ); 1460 } 1461 1462 /** 1463 * Notifies listeners registered with a given class loader. 1464 * 1465 * @param classLoader The class loader to notify listeners of. 1466 * @param level The level of the event. 1467 * @param message The message of the event or {@code null}. 1468 * @param throwable The throwable of the event or {@code null}. 1469 * 1470 * @throws NullPointerException if {@code classLoader} or {@code level} is {@code null}. 1471 * @throws ObjectManagementException if notifying listeners fails. 1472 * 1473 * @since 1.1 1474 */ 1475 public void log( final ClassLoader classLoader, final Level level, final String message, final Throwable throwable ) 1476 { 1477 if ( level == null ) 1478 { 1479 throw new NullPointerException( "level" ); 1480 } 1481 if ( classLoader == null ) 1482 { 1483 throw new NullPointerException( "classLoader" ); 1484 } 1485 1486 if ( this.isLoggable( level ) ) 1487 { 1488 final List<Listener> l = this.getListeners( classLoader ); 1489 1490 for ( int i = 0, s0 = l.size(); i < s0; i++ ) 1491 { 1492 l.get( i ).onLog( level, message, throwable ); 1493 } 1494 } 1495 } 1496 1497 /** 1498 * Gets the identifier of the model to search for modules by default. 1499 * <p>The identifier of the model to search for modules by default is controlled by system property 1500 * {@code org.jomc.ri.DefaultObjectManager.defaultModelIdentifier} holding the identifier of the model to search for 1501 * modules by default. If that property is not set, the {@code http://jomc.org/model} default is returned.</p> 1502 * 1503 * @return The identifier of the model to search for modules by default. 1504 * 1505 * @see #getModelIdentifier() 1506 * @see #setDefaultModelIdentifier(java.lang.String) 1507 * @see ModelObject#MODEL_PUBLIC_ID 1508 * 1509 * @since 1.1 1510 */ 1511 public static String getDefaultModelIdentifier() 1512 { 1513 if ( defaultModelIdentifier == null ) 1514 { 1515 defaultModelIdentifier = System.getProperty( "org.jomc.ri.DefaultObjectManager.defaultModelIdentifier", 1516 ModelObject.MODEL_PUBLIC_ID ); 1517 1518 } 1519 1520 return defaultModelIdentifier; 1521 } 1522 1523 /** 1524 * Sets the identifier of the model to search for modules by default. 1525 * 1526 * @param value The new identifier of the model to search for modules by default or {@code null}. 1527 * 1528 * @see #getDefaultModelIdentifier() 1529 * 1530 * @since 1.1 1531 */ 1532 public static void setDefaultModelIdentifier( final String value ) 1533 { 1534 defaultModelIdentifier = value; 1535 } 1536 1537 /** 1538 * Gets the identifier of the model to search for modules. 1539 * 1540 * @return The identifier of the model to search for modules. 1541 * 1542 * @see #getDefaultModelIdentifier() 1543 * @see #setModelIdentifier(java.lang.String) 1544 * 1545 * @since 1.1 1546 */ 1547 public final String getModelIdentifier() 1548 { 1549 if ( this.modelIdentifier == null ) 1550 { 1551 this.modelIdentifier = getDefaultModelIdentifier(); 1552 1553 if ( this.isLoggable( Level.CONFIG ) ) 1554 { 1555 this.log( Level.CONFIG, getDefaultModelIdentifierInfo( 1556 Locale.getDefault(), this.modelIdentifier ), null ); 1557 1558 } 1559 } 1560 1561 return this.modelIdentifier; 1562 } 1563 1564 /** 1565 * Sets the identifier of the model to search for modules. 1566 * 1567 * @param value The new identifier of the model to search for modules or {@code null}. 1568 * 1569 * @since 1.1 1570 */ 1571 public final void setModelIdentifier( final String value ) 1572 { 1573 this.modelIdentifier = value; 1574 } 1575 1576 /** 1577 * Gets a flag indicating model object class path resolution is enabled by default. 1578 * <p>The default model object class path resolution enabled flag is controlled by system property 1579 * {@code org.jomc.ri.DefaultObjectManager.defaultModelObjectClasspathResolutionEnabled} holding a boolean 1580 * indicating model object class path resolution is enabled by default. If that property is not set, the 1581 * {@code true} default is returned.</p> 1582 * 1583 * @return {@code true}, if model object class path resolution is enabled by default; {@code false}, if model object 1584 * class path resolution is disabled by default. 1585 * 1586 * @see #isModelObjectClasspathResolutionEnabled() 1587 * @see #setDefaultModelObjectClasspathResolutionEnabled(java.lang.Boolean) 1588 * 1589 * @since 1.1 1590 */ 1591 public static boolean isDefaultModelObjectClasspathResolutionEnabled() 1592 { 1593 if ( defaultModelObjectClasspathResolutionEnabled == null ) 1594 { 1595 defaultModelObjectClasspathResolutionEnabled = Boolean.valueOf( System.getProperty( 1596 "org.jomc.ri.DefaultObjectManager.defaultModelObjectClasspathResolutionEnabled", 1597 Boolean.toString( true ) ) ); 1598 1599 } 1600 1601 return defaultModelObjectClasspathResolutionEnabled; 1602 } 1603 1604 /** 1605 * Sets the flag indicating model object class path resolution is enabled by default. 1606 * 1607 * @param value The new value of the flag indicating model object class path resolution is enabled by default or 1608 * {@code null}. 1609 * 1610 * @see #isDefaultModelObjectClasspathResolutionEnabled() 1611 * 1612 * @since 1.1 1613 */ 1614 public static void setDefaultModelObjectClasspathResolutionEnabled( final Boolean value ) 1615 { 1616 defaultModelObjectClasspathResolutionEnabled = value; 1617 } 1618 1619 /** 1620 * Gets a flag indicating model object class path resolution is enabled. 1621 * 1622 * @return {@code true}, if model object class path resolution is enabled; {@code false}, if model object class path 1623 * resolution is disabled. 1624 * 1625 * @see #isDefaultModelObjectClasspathResolutionEnabled() 1626 * @see #setModelObjectClasspathResolutionEnabled(java.lang.Boolean) 1627 * 1628 * @since 1.1 1629 */ 1630 public final boolean isModelObjectClasspathResolutionEnabled() 1631 { 1632 if ( this.modelObjectClasspathResolutionEnabled == null ) 1633 { 1634 this.modelObjectClasspathResolutionEnabled = isDefaultModelObjectClasspathResolutionEnabled(); 1635 1636 if ( this.isLoggable( Level.CONFIG ) ) 1637 { 1638 this.log( Level.CONFIG, getDefaultModelObjectClasspahResolutionEnabledInfo( 1639 Locale.getDefault(), Boolean.toString( this.modelObjectClasspathResolutionEnabled ) ), null ); 1640 1641 } 1642 } 1643 1644 return this.modelObjectClasspathResolutionEnabled; 1645 } 1646 1647 /** 1648 * Sets the flag indicating model object class path resolution is enabled. 1649 * 1650 * @param value The new value of the flag indicating model object class path resolution is enabled or {@code null}. 1651 * 1652 * @see #isModelObjectClasspathResolutionEnabled() 1653 * 1654 * @since 1.1 1655 */ 1656 public final void setModelObjectClasspathResolutionEnabled( final Boolean value ) 1657 { 1658 this.modelObjectClasspathResolutionEnabled = value; 1659 } 1660 1661 /** 1662 * Gets a flag indicating model processing is enabled by default. 1663 * <p>The default model processing enabled flag is controlled by system property 1664 * {@code org.jomc.ri.DefaultObjectManager.defaultModelProcessingEnabled} holding a boolean indicating model 1665 * processing is enabled by default. If that property is not set, the {@code true} default is returned.</p> 1666 * 1667 * @return {@code true}, if model processing is enabled by default; {@code false}, if model processing is disabled 1668 * by default. 1669 * 1670 * @see #isModelProcessingEnabled() 1671 * @see #setDefaultModelProcessingEnabled(java.lang.Boolean) 1672 * 1673 * @since 1.1 1674 */ 1675 public static boolean isDefaultModelProcessingEnabled() 1676 { 1677 if ( defaultModelProcessingEnabled == null ) 1678 { 1679 defaultModelProcessingEnabled = Boolean.valueOf( System.getProperty( 1680 "org.jomc.ri.DefaultObjectManager.defaultModelProcessingEnabled", Boolean.toString( true ) ) ); 1681 1682 } 1683 1684 return defaultModelProcessingEnabled; 1685 } 1686 1687 /** 1688 * Sets the flag indicating model processing is enabled by default. 1689 * 1690 * @param value The new value of the flag indicating model processing is enabled by default or {@code null}. 1691 * 1692 * @see #isDefaultModelProcessingEnabled() 1693 * 1694 * @since 1.1 1695 */ 1696 public static void setDefaultModelProcessingEnabled( final Boolean value ) 1697 { 1698 defaultModelProcessingEnabled = value; 1699 } 1700 1701 /** 1702 * Gets a flag indicating model processing is enabled. 1703 * 1704 * @return {@code true}, if model processing is enabled; {@code false}, if model processing is disabled . 1705 * 1706 * @see #isDefaultModelProcessingEnabled() 1707 * @see #setModelProcessingEnabled(java.lang.Boolean) 1708 * 1709 * @since 1.1 1710 */ 1711 public final boolean isModelProcessingEnabled() 1712 { 1713 if ( this.modelProcessingEnabled == null ) 1714 { 1715 this.modelProcessingEnabled = isDefaultModelProcessingEnabled(); 1716 1717 if ( this.isLoggable( Level.CONFIG ) ) 1718 { 1719 this.log( Level.CONFIG, getDefaultModelProcessingEnabledInfo( 1720 Locale.getDefault(), Boolean.toString( this.modelProcessingEnabled ) ), null ); 1721 1722 } 1723 } 1724 1725 return this.modelProcessingEnabled; 1726 } 1727 1728 /** 1729 * Sets the flag indicating model processing is enabled. 1730 * 1731 * @param value The new value of the flag indicating model processing is enabled or {@code null}. 1732 * 1733 * @see #isModelProcessingEnabled() 1734 * 1735 * @since 1.1 1736 */ 1737 public final void setModelProcessingEnabled( final Boolean value ) 1738 { 1739 this.modelProcessingEnabled = value; 1740 } 1741 1742 /** 1743 * Gets the name of the platform's bootstrap class loader class. 1744 * <p>The name of the platform's bootstrap class loader class is controlled by system property 1745 * {@code org.jomc.ri.DefaultObjectManager.bootstrapClassLoaderClassName} holding the name of the platform's 1746 * bootstrap class loader class. If that property is not set, the bootstrap class loader is assumed to be 1747 * represented by a {@code null} parent class loader.</p> 1748 * 1749 * @return The name of the platform's bootstrap class loader class or {@code null}. 1750 * 1751 * @see #getClassLoader(java.lang.ClassLoader) 1752 */ 1753 public static String getBootstrapClassLoaderClassName() 1754 { 1755 if ( bootstrapClassLoaderClassName == null && !bootstrapClassLoaderClassNameInitialized ) 1756 { 1757 bootstrapClassLoaderClassName = 1758 System.getProperty( "org.jomc.ri.DefaultObjectManager.bootstrapClassLoaderClassName" ); 1759 1760 bootstrapClassLoaderClassNameInitialized = true; 1761 } 1762 1763 return bootstrapClassLoaderClassName; 1764 } 1765 1766 /** 1767 * Sets the name of the platform's bootstrap class loader class. 1768 * 1769 * @param value The new name of the platform's bootstrap class loader class or {@code null}. 1770 * 1771 * @see #getBootstrapClassLoaderClassName() 1772 */ 1773 public static void setBootstrapClassLoaderClassName( final String value ) 1774 { 1775 bootstrapClassLoaderClassName = value; 1776 bootstrapClassLoaderClassNameInitialized = false; 1777 } 1778 1779 /** 1780 * Gets the modules registered with a given class loader. 1781 * 1782 * @param classLoader The class loader to get the modules of. 1783 * 1784 * @return The modules of the given class loader. 1785 * 1786 * @throws NullPointerException if {@code classLoader} is {@code null}. 1787 * @throws ObjectManagementException if getting the modules fails. 1788 * 1789 * @see #getDefaultModules() 1790 * @see #getModelIdentifier() 1791 * @see #isModelObjectClasspathResolutionEnabled() 1792 * @see #isModelProcessingEnabled() 1793 * @see #getRuntimeModules(org.jomc.model.Modules, java.util.Map) 1794 */ 1795 public Modules getModules( final ClassLoader classLoader ) 1796 { 1797 if ( classLoader == null ) 1798 { 1799 throw new NullPointerException( "classLoader" ); 1800 } 1801 1802 synchronized ( this.modules ) 1803 { 1804 Modules cachedModules = this.modules.get( classLoader ); 1805 1806 if ( cachedModules == null ) 1807 { 1808 final List<LogRecord> logRecords = new ArrayList<LogRecord>( 1024 ); 1809 1810 try 1811 { 1812 final ModelContext modelContext = ModelContextFactory.newInstance().newModelContext( classLoader ); 1813 1814 logRecords.add( new LogRecord( Level.FINER, getCreatingModulesInfo( 1815 Locale.getDefault(), this.getClassLoaderInfo( classLoader, null ) ) ) ); 1816 1817 modelContext.setLogLevel( this.getLogLevel() ); 1818 modelContext.getListeners().add( new ModelContext.Listener() 1819 { 1820 1821 @Override 1822 public void onLog( final Level level, final String message, final Throwable t ) 1823 { 1824 super.onLog( level, message, t ); 1825 final LogRecord r = new LogRecord( level, message ); 1826 r.setThrown( t ); 1827 1828 logRecords.add( r ); 1829 } 1830 1831 } ); 1832 1833 Model model = modelContext.findModel( this.getModelIdentifier() ); 1834 cachedModules = ModelHelper.getModules( model ); 1835 1836 if ( cachedModules != null ) 1837 { 1838 if ( this.isModelObjectClasspathResolutionEnabled() ) 1839 { 1840 final Module classpathModule = cachedModules.getClasspathModule( 1841 Modules.getDefaultClasspathModuleName(), classLoader ); 1842 1843 if ( classpathModule != null ) 1844 { 1845 cachedModules.getModule().add( classpathModule ); 1846 } 1847 } 1848 1849 if ( this.isModelProcessingEnabled() ) 1850 { 1851 model = modelContext.processModel( model ); 1852 } 1853 1854 final ModelValidationReport validationReport = modelContext.validateModel( model ); 1855 1856 for ( ModelValidationReport.Detail d : validationReport.getDetails() ) 1857 { 1858 final LogRecord r = new LogRecord( d.getLevel(), d.getMessage() ); 1859 logRecords.add( r ); 1860 } 1861 1862 cachedModules = validationReport.isModelValid() ? ModelHelper.getModules( model ) : null; 1863 } 1864 } 1865 catch ( final ModelException e ) 1866 { 1867 cachedModules = null; 1868 1869 final LogRecord r = new LogRecord( Level.SEVERE, getMessage( e ) ); 1870 r.setThrown( e ); 1871 logRecords.add( r ); 1872 } 1873 1874 if ( cachedModules == null ) 1875 { 1876 cachedModules = this.getDefaultModules(); 1877 1878 logRecords.add( new LogRecord( Level.WARNING, getDefaultModulesWarning( 1879 Locale.getDefault(), this.getModelIdentifier(), 1880 this.getClassLoaderInfo( classLoader, null ) ) ) ); 1881 1882 } 1883 1884 final ClassLoader objectsLoader = this.getDefaultClassLoader( classLoader ); 1885 1886 synchronized ( this.objects ) 1887 { 1888 Map<Object, Instance> objectMap = this.objects.get( objectsLoader ); 1889 if ( objectMap == null ) 1890 { 1891 objectMap = new WeakIdentityHashMap<Object, Instance>(); 1892 this.objects.put( objectsLoader, objectMap ); 1893 } 1894 1895 cachedModules = this.getRuntimeModules( cachedModules, objectMap ); 1896 1897 if ( cachedModules instanceof RuntimeModelObject ) 1898 { 1899 ( (RuntimeModelObject) cachedModules ).clear(); 1900 } 1901 } 1902 1903 this.modules.put( classLoader, cachedModules ); 1904 1905 for ( LogRecord r : logRecords ) 1906 { 1907 this.log( classLoader, r.getLevel(), r.getMessage(), r.getThrown() ); 1908 } 1909 1910 if ( this.isLoggable( Level.FINEST ) ) 1911 { 1912 this.logModulesReport( cachedModules, classLoader ); 1913 } 1914 } 1915 1916 return cachedModules; 1917 } 1918 } 1919 1920 /** 1921 * Gets a new default modules instance. 1922 * 1923 * @return A new default modules instance. 1924 * 1925 * @throws ObjectManagementException if getting a new default modules instance fails. 1926 * 1927 * @see #getModules(java.lang.ClassLoader) 1928 * 1929 * @since 1.1 1930 */ 1931 public Modules getDefaultModules() 1932 { 1933 final Modules defaultModules = new Modules(); 1934 final Module defaultModule = new Module(); 1935 defaultModule.setSpecifications( new Specifications() ); 1936 defaultModule.setImplementations( new Implementations() ); 1937 defaultModules.getModule().add( defaultModule ); 1938 defaultModule.setName( getDefaultModuleName( Locale.getDefault() ) ); 1939 1940 defaultModule.getSpecifications().getSpecification().add( createDefaultSpecification( 1941 ObjectManager.class, Multiplicity.ONE, SINGLETON_SCOPE_IDENTIFIER ) ); 1942 1943 defaultModule.getSpecifications().getSpecification().add( createDefaultSpecification( 1944 Scope.class, null, null ) ); 1945 1946 defaultModule.getSpecifications().getSpecification().add( createDefaultSpecification( 1947 Listener.class, null, null ) ); 1948 1949 defaultModule.getSpecifications().getSpecification().add( createDefaultSpecification( 1950 Locator.class, null, null ) ); 1951 1952 defaultModule.getSpecifications().getSpecification().add( createDefaultSpecification( 1953 Invoker.class, null, null ) ); 1954 1955 defaultModule.getSpecifications().getSpecification().add( createDefaultSpecification( 1956 Invocation.class, Multiplicity.ONE, null ) ); 1957 1958 defaultModule.getImplementations().getImplementation().add( createDefaultImplementation( 1959 ObjectManagerFactory.class, getDefaultImplementationName( Locale.getDefault() ) ) ); 1960 1961 defaultModule.getImplementations().getImplementation().add( createDefaultImplementation( 1962 ObjectManagementException.class, getDefaultImplementationName( Locale.getDefault() ) ) ); 1963 1964 defaultModule.getImplementations().getImplementation().add( createDefaultImplementation( 1965 DefaultInvocation.class, getDefaultImplementationName( Locale.getDefault() ) ) ); 1966 1967 defaultModule.getImplementations().getImplementation().add( createDefaultImplementation( 1968 DefaultInvoker.class, getDefaultImplementationName( Locale.getDefault() ) ) ); 1969 1970 defaultModule.getImplementations().getImplementation().add( createDefaultImplementation( 1971 DefaultListener.class, getDefaultImplementationName( Locale.getDefault() ) ) ); 1972 1973 defaultModule.getImplementations().getImplementation().add( createDefaultImplementation( 1974 DefaultLocator.class, getDefaultImplementationName( Locale.getDefault() ) ) ); 1975 1976 defaultModule.getImplementations().getImplementation().add( createDefaultImplementation( 1977 DefaultScope.class, getDefaultImplementationName( Locale.getDefault() ) ) ); 1978 1979 final Implementation defaultObjectManager = createDefaultImplementation( 1980 DefaultObjectManager.class, getDefaultImplementationName( Locale.getDefault() ) ); 1981 1982 defaultObjectManager.setSpecifications( new Specifications() ); 1983 1984 final SpecificationReference refObjectManager = new SpecificationReference(); 1985 refObjectManager.setIdentifier( ObjectManager.class.getName() ); 1986 refObjectManager.setVersion( getDefaultModulesVersion( Locale.getDefault() ) ); 1987 defaultObjectManager.getSpecifications().getReference().add( refObjectManager ); 1988 1989 defaultModule.getImplementations().getImplementation().add( defaultObjectManager ); 1990 return defaultModules; 1991 } 1992 1993 /** 1994 * Gets a new {@code Modules} instance to register with a class loader. 1995 * 1996 * @param modules The modules prepared for registration with a class loader. 1997 * @param objectMap The object map to associate with the given modules. 1998 * 1999 * @return The instance to register with a class loader. 2000 * 2001 * @throws NullPointerException if {@code modules} or {@code objectMap} is {@code null}. 2002 * 2003 * @see #getModules(java.lang.ClassLoader) 2004 * @see RuntimeModules 2005 * 2006 * @since 1.2 2007 */ 2008 public Modules getRuntimeModules( final Modules modules, final Map<Object, Instance> objectMap ) 2009 { 2010 if ( modules == null ) 2011 { 2012 throw new NullPointerException( "modules" ); 2013 } 2014 if ( objectMap == null ) 2015 { 2016 throw new NullPointerException( "objectMap" ); 2017 } 2018 2019 return new RuntimeModules( modules, objectMap ); 2020 } 2021 2022 /** 2023 * Gets the class loader of a given class. 2024 * 2025 * @param clazz The class whose class loader to get. 2026 * 2027 * @return The class loader of {@code clazz}. 2028 * 2029 * @throws NullPointerException if {@code clazz} is {@code null}. 2030 * 2031 * @since 1.1 2032 */ 2033 public ClassLoader getDefaultClassLoader( final Class<?> clazz ) 2034 { 2035 if ( clazz == null ) 2036 { 2037 throw new NullPointerException( "clazz" ); 2038 } 2039 2040 ClassLoader cl = clazz.getClassLoader(); 2041 if ( cl == null ) 2042 { 2043 cl = BOOTSTRAP_CLASSLOADER; 2044 } 2045 2046 return cl; 2047 } 2048 2049 /** 2050 * Gets the parent class loader of a given class loader recursively. 2051 * <p>This method recursively finds the parent class loader of the given class loader. Recursion stops at the 2052 * platform's bootstrap class loader. That class loader is detected when either the current class loader has no 2053 * parent (a call to the {@code getParent()} method returns {@code null}) or when the class name of the 2054 * current class loader's parent class loader is equal to the name returned by method 2055 * {@code getBootstrapClassLoaderClassName()}. Configuration of the name of the platform's bootstrap class loader 2056 * class is needed when the platform's {@code getParent()} method of the {@code ClassLoader} class does not return 2057 * {@code null} to indicate the bootstrap class loader but instead returns an instance of {@code ClassLoader}.</p> 2058 * 2059 * @param classLoader The class loader whose parent class loader to return or {@code null} to return a 2060 * {@code ClassLoader} instance representing the platform's bootstrap class loader. 2061 * 2062 * @return The parent class loader of {@code classLoader}. 2063 * 2064 * @throws NullPointerException if {@code classLoader} is {@code null}. 2065 * 2066 * @see #getBootstrapClassLoaderClassName() 2067 * @see ClassLoader#getParent() 2068 * 2069 * @since 1.1 2070 */ 2071 public ClassLoader getDefaultClassLoader( final ClassLoader classLoader ) 2072 { 2073 if ( classLoader == null ) 2074 { 2075 return BOOTSTRAP_CLASSLOADER; 2076 } 2077 2078 synchronized ( defaultClassLoaders ) 2079 { 2080 ClassLoader loader = null; 2081 Reference<ClassLoader> reference = defaultClassLoaders.get( classLoader ); 2082 2083 if ( reference != null ) 2084 { 2085 loader = reference.get(); 2086 } 2087 2088 if ( loader == null ) 2089 { 2090 if ( classLoader.getParent() != null 2091 && !classLoader.getParent().getClass().getName().equals( getBootstrapClassLoaderClassName() ) ) 2092 { 2093 loader = this.getDefaultClassLoader( classLoader.getParent() ); 2094 } 2095 else 2096 { 2097 loader = classLoader; 2098 } 2099 2100 defaultClassLoaders.put( classLoader, new WeakReference<ClassLoader>( loader ) ); 2101 } 2102 2103 return loader; 2104 } 2105 } 2106 2107 /** 2108 * Gets the class loader of a given class. 2109 * 2110 * @param clazz The class whose class loader to return. 2111 * 2112 * @return The class loader of {@code clazz}. 2113 * 2114 * @throws NullPointerException if {@code clazz} is {@code null}. 2115 * 2116 * @deprecated As of JOMC 1.1, please use method {@link #getDefaultClassLoader(java.lang.Class)}. This method will 2117 * be removed in version 2.0. 2118 */ 2119 @Deprecated 2120 public static ClassLoader getClassLoader( final Class<?> clazz ) 2121 { 2122 if ( clazz == null ) 2123 { 2124 throw new NullPointerException( "clazz" ); 2125 } 2126 2127 ClassLoader cl = clazz.getClassLoader(); 2128 if ( cl == null ) 2129 { 2130 cl = BOOTSTRAP_CLASSLOADER; 2131 } 2132 2133 return cl; 2134 } 2135 2136 /** 2137 * Gets the parent class loader of a given class loader recursively. 2138 * <p>This method recursively finds the parent class loader of the given class loader. Recursion stops at the 2139 * platform's bootstrap class loader. That class loader is detected when either the current class loader has no 2140 * parent (a call to the {@code getParent()} method returns {@code null}) or when the class name of the 2141 * current class loader's parent class loader is equal to the name returned by method 2142 * {@code getBootstrapClassLoaderClassName()}. Configuration of the name of the platform's bootstrap class loader 2143 * class is needed when the platform's {@code getParent()} method of the {@code ClassLoader} class does not return 2144 * {@code null} to indicate the bootstrap class loader but instead returns an instance of {@code ClassLoader}.</p> 2145 * 2146 * @param classLoader The class loader whose parent class loader to return or {@code null} to return a 2147 * {@code ClassLoader} instance representing the platform's bootstrap class loader. 2148 * 2149 * @return The parent class loader of {@code classLoader}. 2150 * 2151 * @throws NullPointerException if {@code classLoader} is {@code null}. 2152 * 2153 * @see #getBootstrapClassLoaderClassName() 2154 * @see ClassLoader#getParent() 2155 * 2156 * @deprecated As of JOMC 1.1, please use method {@link #getDefaultClassLoader(java.lang.ClassLoader)}. This method 2157 * will be removed in version 2.0. 2158 */ 2159 @Deprecated 2160 public static ClassLoader getClassLoader( final ClassLoader classLoader ) 2161 { 2162 if ( classLoader == null ) 2163 { 2164 return BOOTSTRAP_CLASSLOADER; 2165 } 2166 2167 synchronized ( defaultClassLoaders ) 2168 { 2169 ClassLoader loader = null; 2170 Reference<ClassLoader> reference = defaultClassLoaders.get( classLoader ); 2171 2172 if ( reference != null ) 2173 { 2174 loader = reference.get(); 2175 } 2176 2177 if ( loader == null ) 2178 { 2179 if ( classLoader.getParent() != null 2180 && !classLoader.getParent().getClass().getName().equals( getBootstrapClassLoaderClassName() ) ) 2181 { 2182 loader = getClassLoader( classLoader.getParent() ); 2183 } 2184 else 2185 { 2186 loader = classLoader; 2187 } 2188 2189 defaultClassLoaders.put( classLoader, new WeakReference<ClassLoader>( loader ) ); 2190 } 2191 2192 return loader; 2193 } 2194 } 2195 2196 /** 2197 * Gets an object of a given instance from a given scope. 2198 * 2199 * @param scope The scope to get the object from or {@code null}. 2200 * @param instance The instance of the object to get. 2201 * @param classLoader The class loader to use for creating the object. 2202 * 2203 * @return An object of {@code instance} from {@code scope} or {@code null}, if no such object is found. 2204 * 2205 * @throws NullPointerException if {@code instance} or {@code classLoader} is {@code null}. 2206 * @throws ObjectManagementException if getting an object fails. 2207 */ 2208 public Object getObject( final Scope scope, final Instance instance, final ClassLoader classLoader ) 2209 { 2210 if ( instance == null ) 2211 { 2212 throw new NullPointerException( "instance" ); 2213 } 2214 if ( classLoader == null ) 2215 { 2216 throw new NullPointerException( "classLoader" ); 2217 } 2218 2219 try 2220 { 2221 Object object = null; 2222 2223 if ( scope != null ) 2224 { 2225 synchronized ( instance ) 2226 { 2227 boolean created = true; 2228 2229 synchronized ( scope ) 2230 { 2231 object = scope.getObject( instance.getIdentifier() ); 2232 2233 if ( object == null ) 2234 { 2235 scope.putObject( instance.getIdentifier(), instance ); 2236 created = false; 2237 } 2238 } 2239 2240 if ( object instanceof Instance ) 2241 { 2242 synchronized ( object ) 2243 { 2244 synchronized ( scope ) 2245 { 2246 object = scope.getObject( instance.getIdentifier() ); 2247 2248 if ( object instanceof Instance ) 2249 { 2250 throw new ObjectManagementException( getDependencyCycleMessage( 2251 Locale.getDefault(), instance.getIdentifier() ) ); 2252 2253 } 2254 } 2255 } 2256 } 2257 2258 if ( !created ) 2259 { 2260 try 2261 { 2262 object = this.getModules( classLoader ).createObject( instance, classLoader ); 2263 2264 if ( object != null ) 2265 { 2266 object = this.createProxy( instance, object, classLoader ); 2267 } 2268 2269 created = true; 2270 } 2271 finally 2272 { 2273 synchronized ( scope ) 2274 { 2275 if ( created && object != null ) 2276 { 2277 final Object o = scope.putObject( instance.getIdentifier(), object ); 2278 2279 if ( o != instance ) 2280 { 2281 scope.putObject( instance.getIdentifier(), o ); 2282 throw new AssertionError( getScopeContentionFailure( 2283 Locale.getDefault(), instance.getIdentifier() ) ); 2284 2285 } 2286 } 2287 else 2288 { 2289 scope.removeObject( instance.getIdentifier() ); 2290 } 2291 } 2292 } 2293 } 2294 } 2295 } 2296 else 2297 { 2298 object = this.getModules( classLoader ).createObject( instance, classLoader ); 2299 2300 if ( object != null ) 2301 { 2302 object = this.createProxy( instance, object, classLoader ); 2303 } 2304 } 2305 2306 return object; 2307 } 2308 catch ( final ModelObjectException e ) 2309 { 2310 throw new ObjectManagementException( getMessage( e ), e ); 2311 } 2312 catch ( final InstantiationException e ) 2313 { 2314 throw new ObjectManagementException( getMessage( e ), e ); 2315 } 2316 } 2317 2318 /** 2319 * Gets an object for a given location URI. 2320 * 2321 * @param specification The specification class of the object to locate. 2322 * @param location The location URI of the object to locate. 2323 * @param classLoader The class loader to use for loading locator classes. 2324 * @param <T> The type of the object. 2325 * 2326 * @return An object located at {@code location} or {@code null}, if no such object is found. 2327 * 2328 * @throws NullPointerException if {@code specification}, {@code location} or {@code classLoader} is {@code null}. 2329 * @throws ObjectManagementException if getting an object fails. 2330 */ 2331 public <T> T getObject( final Class<T> specification, final URI location, final ClassLoader classLoader ) 2332 { 2333 if ( specification == null ) 2334 { 2335 throw new NullPointerException( "specification" ); 2336 } 2337 if ( location == null ) 2338 { 2339 throw new NullPointerException( "location" ); 2340 } 2341 if ( classLoader == null ) 2342 { 2343 throw new NullPointerException( "classLoader" ); 2344 } 2345 2346 try 2347 { 2348 T object = null; 2349 final Locator locator = this.getLocator( location, classLoader ); 2350 2351 if ( locator != null ) 2352 { 2353 object = locator.getObject( specification, location ); 2354 } 2355 else if ( this.isLoggable( Level.WARNING ) ) 2356 { 2357 this.log( classLoader, Level.WARNING, getMissingLocatorMessage( 2358 Locale.getDefault(), location.getScheme() ), null ); 2359 2360 } 2361 2362 return object; 2363 } 2364 catch ( final IOException e ) 2365 { 2366 throw new ObjectManagementException( getMessage( e ), e ); 2367 } 2368 } 2369 2370 /** 2371 * Gets the scope implementation for a given scope identifier registered with a given class loader. 2372 * 2373 * @param identifier The identifier of the scope to get an implementation of. 2374 * @param classLoader The class loader to use for loading scope implementations. 2375 * 2376 * @return The implementation of the scope identified by {@code identifier} or {@code null}, if no such scope 2377 * implementation is found. 2378 * 2379 * @throws NullPointerException if {@code classLoader} or {@code identifier} is {@code null}. 2380 * @throws ObjectManagementException if getting the scope implementation fails. 2381 * 2382 * @see #getDefaultScope(org.jomc.model.Modules, java.lang.String) 2383 */ 2384 public Scope getScope( final String identifier, final ClassLoader classLoader ) 2385 { 2386 if ( classLoader == null ) 2387 { 2388 throw new NullPointerException( "classLoader" ); 2389 } 2390 if ( identifier == null ) 2391 { 2392 throw new NullPointerException( "identifier" ); 2393 } 2394 2395 try 2396 { 2397 final ClassLoader scopesLoader = this.getDefaultClassLoader( classLoader ); 2398 2399 synchronized ( this.scopes ) 2400 { 2401 Map<String, Scope> cachedScopes = this.scopes.get( scopesLoader ); 2402 if ( cachedScopes == null ) 2403 { 2404 cachedScopes = new HashMap<String, Scope>(); 2405 this.scopes.put( scopesLoader, cachedScopes ); 2406 } 2407 2408 Scope scope = cachedScopes.get( identifier ); 2409 2410 if ( scope == null ) 2411 { 2412 // Bootstrap scope loading. 2413 final Modules model = this.getModules( classLoader ); 2414 final Specification scopeSpecification = model.getSpecification( Scope.class ); 2415 2416 if ( scopeSpecification != null ) 2417 { 2418 final Implementations implementations = 2419 model.getImplementations( scopeSpecification.getIdentifier() ); 2420 2421 if ( implementations != null ) 2422 { 2423 for ( int i = 0, s0 = implementations.getImplementation().size(); i < s0; i++ ) 2424 { 2425 final Implementation impl = implementations.getImplementation().get( i ); 2426 2427 if ( identifier.equals( impl.getName() ) ) 2428 { 2429 final Instance instance = model.getInstance( impl.getIdentifier() ); 2430 2431 if ( instance != null ) 2432 { 2433 scope = (Scope) model.createObject( instance, classLoader ); 2434 cachedScopes.put( identifier, scope ); 2435 if ( this.isLoggable( Level.CONFIG ) ) 2436 { 2437 this.log( classLoader, Level.CONFIG, getScopeInfoMessage( 2438 Locale.getDefault(), impl.getIdentifier(), identifier, 2439 this.getClassLoaderInfo( classLoader, scopesLoader ) ), null ); 2440 2441 } 2442 break; 2443 } 2444 else if ( this.isLoggable( Level.WARNING ) ) 2445 { 2446 this.log( classLoader, Level.WARNING, getMissingInstanceMessage( 2447 Locale.getDefault(), impl.getIdentifier(), impl.getName() ), null ); 2448 2449 } 2450 } 2451 } 2452 } 2453 } 2454 else if ( this.isLoggable( Level.WARNING ) ) 2455 { 2456 this.log( classLoader, Level.WARNING, getMissingSpecificationMessage( 2457 Locale.getDefault(), Scope.class.getName() ), null ); 2458 2459 } 2460 2461 if ( scope == null ) 2462 { 2463 scope = this.getDefaultScope( model, identifier ); 2464 if ( scope != null ) 2465 { 2466 cachedScopes.put( identifier, scope ); 2467 if ( this.isLoggable( Level.CONFIG ) ) 2468 { 2469 this.log( classLoader, Level.CONFIG, getDefaultScopeInfoMessage( 2470 Locale.getDefault(), identifier, 2471 this.getClassLoaderInfo( classLoader, scopesLoader ) ), null ); 2472 2473 } 2474 } 2475 } 2476 } 2477 2478 return scope; 2479 } 2480 } 2481 catch ( final ModelObjectException e ) 2482 { 2483 throw new ObjectManagementException( getMessage( e ), e ); 2484 } 2485 catch ( final InstantiationException e ) 2486 { 2487 throw new ObjectManagementException( getMessage( e ), e ); 2488 } 2489 } 2490 2491 /** 2492 * Gets a new default scope implementation instance for a given identifier. 2493 * 2494 * @param identifier The identifier to get a new default scope implementation instance for. 2495 * 2496 * @return A new default scope implementation instance for {@code identifier} or {@code null}, if no such instance 2497 * is available. 2498 * 2499 * @throws NullPointerException if {@code identifier} is {@code null}. 2500 * 2501 * @see #getScope(java.lang.String, java.lang.ClassLoader) 2502 * 2503 * @deprecated As of JOMC 1.2, replaced by method {@link #getDefaultScope(org.jomc.model.Modules,java.lang.String)}. 2504 * This method will be removed in version 2.0. 2505 */ 2506 @Deprecated 2507 public Scope getDefaultScope( final String identifier ) 2508 { 2509 if ( identifier == null ) 2510 { 2511 throw new NullPointerException( "identifier" ); 2512 } 2513 2514 DefaultScope defaultScope = null; 2515 2516 if ( identifier.equals( SINGLETON_SCOPE_IDENTIFIER ) ) 2517 { 2518 defaultScope = new DefaultScope( new HashMap<String, Object>() ); 2519 } 2520 2521 return defaultScope; 2522 } 2523 2524 /** 2525 * Gets a new default scope implementation instance for a given identifier. 2526 * 2527 * @param model The model to get a new default scope implementation instance of. 2528 * @param identifier The identifier to get a new default scope implementation instance for. 2529 * 2530 * @return A new default scope implementation instance for {@code identifier} or {@code null}, if no such instance 2531 * is available. 2532 * 2533 * @throws NullPointerException if {@code model} or {@code identifier} is {@code null}. 2534 * @throws ObjectManagementException if getting a new default scope implementation instance fails. 2535 * 2536 * @see #getScope(java.lang.String, java.lang.ClassLoader) 2537 */ 2538 public Scope getDefaultScope( final Modules model, final String identifier ) 2539 { 2540 if ( model == null ) 2541 { 2542 throw new NullPointerException( "model" ); 2543 } 2544 if ( identifier == null ) 2545 { 2546 throw new NullPointerException( "identifier" ); 2547 } 2548 2549 try 2550 { 2551 Scope defaultScope = null; 2552 2553 if ( identifier.equals( SINGLETON_SCOPE_IDENTIFIER ) ) 2554 { 2555 defaultScope = new DefaultScope( new HashMap<String, Object>() ); 2556 model.getInstance( defaultScope ); 2557 } 2558 2559 return defaultScope; 2560 } 2561 catch ( final ModelObjectException e ) 2562 { 2563 throw new ObjectManagementException( getMessage( e ), e ); 2564 } 2565 } 2566 2567 /** 2568 * Gets a locator to use with a given location URI registered with a given class loader. 2569 * 2570 * @param location The location URI to get a locator for. 2571 * @param classLoader The class loader to use for loading locator implementations. 2572 * 2573 * @return The locator to use for locating objects at {@code location} or {@code null}, if no such locator is 2574 * available. 2575 * 2576 * @throws NullPointerException if {@code classLoader} or {@code location} is {@code null}. 2577 * @throws ObjectManagementException if getting a locator fails. 2578 * 2579 * @see #getDefaultLocator(org.jomc.model.Modules, java.net.URI) 2580 */ 2581 public Locator getLocator( final URI location, final ClassLoader classLoader ) 2582 { 2583 if ( classLoader == null ) 2584 { 2585 throw new NullPointerException( "classLoader" ); 2586 } 2587 if ( location == null ) 2588 { 2589 throw new NullPointerException( "location" ); 2590 } 2591 2592 try 2593 { 2594 final String scheme = location.getScheme(); 2595 2596 if ( scheme != null ) 2597 { 2598 final ClassLoader locatorsLoader = this.getDefaultClassLoader( classLoader ); 2599 2600 synchronized ( this.locators ) 2601 { 2602 Map<String, Locator> cachedLocators = this.locators.get( locatorsLoader ); 2603 if ( cachedLocators == null ) 2604 { 2605 cachedLocators = new HashMap<String, Locator>(); 2606 this.locators.put( locatorsLoader, cachedLocators ); 2607 } 2608 2609 Locator locator = cachedLocators.get( scheme ); 2610 2611 if ( locator == null ) 2612 { 2613 // Bootstrap locator loading. 2614 final Modules model = this.getModules( classLoader ); 2615 final Specification locatorSpecification = model.getSpecification( Locator.class ); 2616 2617 if ( locatorSpecification != null ) 2618 { 2619 final Implementations implementations = 2620 model.getImplementations( locatorSpecification.getIdentifier() ); 2621 2622 if ( implementations != null ) 2623 { 2624 for ( int i = 0, s0 = implementations.getImplementation().size(); i < s0; i++ ) 2625 { 2626 final Implementation impl = implementations.getImplementation().get( i ); 2627 2628 if ( scheme.equals( impl.getName() ) ) 2629 { 2630 final Instance instance = model.getInstance( impl.getIdentifier() ); 2631 2632 if ( instance != null ) 2633 { 2634 locator = (Locator) model.createObject( instance, classLoader ); 2635 cachedLocators.put( scheme, locator ); 2636 2637 if ( this.isLoggable( Level.CONFIG ) ) 2638 { 2639 this.log( classLoader, Level.CONFIG, getLocatorInfoMessage( 2640 Locale.getDefault(), impl.getIdentifier(), scheme, 2641 this.getClassLoaderInfo( classLoader, locatorsLoader ) ), null ); 2642 2643 } 2644 2645 break; 2646 } 2647 else if ( this.isLoggable( Level.WARNING ) ) 2648 { 2649 this.log( classLoader, Level.WARNING, getMissingInstanceMessage( 2650 Locale.getDefault(), impl.getIdentifier(), impl.getName() ), null ); 2651 2652 } 2653 } 2654 } 2655 } 2656 } 2657 else if ( this.isLoggable( Level.WARNING ) ) 2658 { 2659 this.log( classLoader, Level.WARNING, getMissingSpecificationMessage( 2660 Locale.getDefault(), Locator.class.getName() ), null ); 2661 2662 } 2663 2664 if ( locator == null ) 2665 { 2666 locator = this.getDefaultLocator( model, location ); 2667 if ( locator != null ) 2668 { 2669 cachedLocators.put( scheme, locator ); 2670 if ( this.isLoggable( Level.CONFIG ) ) 2671 { 2672 this.log( classLoader, Level.CONFIG, getDefaultLocatorInfoMessage( 2673 Locale.getDefault(), scheme, 2674 this.getClassLoaderInfo( classLoader, locatorsLoader ) ), null ); 2675 2676 } 2677 } 2678 } 2679 } 2680 2681 return locator; 2682 } 2683 } 2684 2685 return null; 2686 } 2687 catch ( final ModelObjectException e ) 2688 { 2689 throw new ObjectManagementException( getMessage( e ), e ); 2690 } 2691 catch ( final InstantiationException e ) 2692 { 2693 throw new ObjectManagementException( getMessage( e ), e ); 2694 } 2695 } 2696 2697 /** 2698 * Gets a new default locator implementation instance for a given location URI. 2699 * 2700 * @param location The location URI to get a new default locator implementation instance for. 2701 * 2702 * @return A new default locator implementation instance for {@code location} or {@code null}, if no such instance 2703 * is available. 2704 * 2705 * @throws NullPointerException if {@code location} is {@code null}. 2706 * 2707 * @see #getLocator(java.net.URI, java.lang.ClassLoader) 2708 * 2709 * @deprecated As of JOMC 1.2, replaced by method {@link #getDefaultLocator(org.jomc.model.Modules, java.net.URI)}. 2710 * This method will be removed in version 2.0. 2711 */ 2712 @Deprecated 2713 public Locator getDefaultLocator( final URI location ) 2714 { 2715 if ( location == null ) 2716 { 2717 throw new NullPointerException( "location" ); 2718 } 2719 2720 Locator locator = null; 2721 final DefaultLocator defaultLocator = new DefaultLocator(); 2722 2723 if ( defaultLocator.isLocationSupported( location ) ) 2724 { 2725 locator = defaultLocator; 2726 } 2727 2728 return locator; 2729 } 2730 2731 /** 2732 * Gets a new default locator implementation instance for a given location URI. 2733 * 2734 * @param model The model to get a new default location implementation instance of. 2735 * @param location The location URI to get a new default locator implementation instance for. 2736 * 2737 * @return A new default locator implementation instance for {@code location} or {@code null}, if no such instance 2738 * is available. 2739 * 2740 * @throws NullPointerException if {@code model} or {@code location} is {@code null}. 2741 * @throws ObjectManagementException if getting a new default locator implementation instance fails. 2742 * 2743 * @see #getLocator(java.net.URI, java.lang.ClassLoader) 2744 * 2745 * @since 1.2 2746 */ 2747 public Locator getDefaultLocator( final Modules model, final URI location ) 2748 { 2749 if ( model == null ) 2750 { 2751 throw new NullPointerException( "model" ); 2752 } 2753 if ( location == null ) 2754 { 2755 throw new NullPointerException( "location" ); 2756 } 2757 2758 try 2759 { 2760 Locator locator = null; 2761 final DefaultLocator defaultLocator = new DefaultLocator(); 2762 2763 if ( defaultLocator.isLocationSupported( location ) ) 2764 { 2765 locator = defaultLocator; 2766 model.getInstance( locator ); 2767 } 2768 2769 return locator; 2770 } 2771 catch ( final ModelObjectException e ) 2772 { 2773 throw new ObjectManagementException( getMessage( e ), e ); 2774 } 2775 } 2776 2777 /** 2778 * Gets the invoker registered with a given class loader. 2779 * 2780 * @param classLoader The class loader to use for loading invoker implementations. 2781 * 2782 * @return The invoker of the given class loader. 2783 * 2784 * @throws NullPointerException if {@code classLoader} is {@code null}. 2785 * @throws ObjectManagementException if getting the invoker fails. 2786 * 2787 * @see #getDefaultInvoker(org.jomc.model.Modules) 2788 */ 2789 public Invoker getInvoker( final ClassLoader classLoader ) 2790 { 2791 if ( classLoader == null ) 2792 { 2793 throw new NullPointerException( "classLoader" ); 2794 } 2795 2796 try 2797 { 2798 final ClassLoader invokersLoader = this.getDefaultClassLoader( classLoader ); 2799 2800 synchronized ( this.invokers ) 2801 { 2802 Invoker invoker = this.invokers.get( invokersLoader ); 2803 2804 if ( invoker == null ) 2805 { 2806 final Modules model = this.getModules( classLoader ); 2807 final Specification invokerSpecification = model.getSpecification( Invoker.class ); 2808 2809 if ( invokerSpecification != null ) 2810 { 2811 final Implementations implementations = 2812 model.getImplementations( invokerSpecification.getIdentifier() ); 2813 2814 if ( implementations != null && !implementations.getImplementation().isEmpty() ) 2815 { 2816 for ( int i = 0, s0 = implementations.getImplementation().size(); i < s0; i++ ) 2817 { 2818 final Implementation impl = implementations.getImplementation().get( i ); 2819 2820 if ( invoker == null ) 2821 { 2822 final Instance invokerInstance = model.getInstance( impl.getIdentifier() ); 2823 2824 if ( invokerInstance != null ) 2825 { 2826 invoker = (Invoker) model.createObject( invokerInstance, classLoader ); 2827 this.invokers.put( invokersLoader, invoker ); 2828 2829 if ( this.isLoggable( Level.CONFIG ) ) 2830 { 2831 this.log( classLoader, Level.CONFIG, getInvokerInfoMessage( 2832 Locale.getDefault(), impl.getIdentifier(), 2833 this.getClassLoaderInfo( classLoader, invokersLoader ) ), null ); 2834 2835 } 2836 } 2837 else if ( this.isLoggable( Level.WARNING ) ) 2838 { 2839 this.log( classLoader, Level.WARNING, getMissingInstanceMessage( 2840 Locale.getDefault(), impl.getIdentifier(), impl.getName() ), null ); 2841 2842 } 2843 } 2844 else if ( this.isLoggable( Level.CONFIG ) ) 2845 { 2846 this.log( classLoader, Level.CONFIG, getIgnoredInvokerMessage( 2847 Locale.getDefault(), impl.getIdentifier() ), null ); 2848 2849 } 2850 } 2851 } 2852 } 2853 else if ( this.isLoggable( Level.WARNING ) ) 2854 { 2855 this.log( classLoader, Level.WARNING, getMissingSpecificationMessage( 2856 Locale.getDefault(), Invoker.class.getName() ), null ); 2857 2858 } 2859 2860 if ( invoker == null ) 2861 { 2862 invoker = this.getDefaultInvoker( model ); 2863 this.invokers.put( invokersLoader, invoker ); 2864 if ( this.isLoggable( Level.CONFIG ) ) 2865 { 2866 this.log( classLoader, Level.CONFIG, getDefaultInvokerInfoMessage( 2867 Locale.getDefault(), this.getClassLoaderInfo( classLoader, invokersLoader ) ), null ); 2868 2869 } 2870 } 2871 } 2872 2873 return invoker; 2874 } 2875 } 2876 catch ( final ModelObjectException e ) 2877 { 2878 throw new ObjectManagementException( getMessage( e ), e ); 2879 } 2880 catch ( final InstantiationException e ) 2881 { 2882 throw new ObjectManagementException( getMessage( e ), e ); 2883 } 2884 } 2885 2886 /** 2887 * Gets a new default invoker implementation instance. 2888 * 2889 * @return A new default invoker implementation instance. 2890 * 2891 * @see #getInvoker(java.lang.ClassLoader) 2892 * 2893 * @since 1.1 2894 * 2895 * @deprecated As of JOMC 1.2, replaced by method {@link #getDefaultInvoker(org.jomc.model.Modules)}. This method 2896 * will be removed in version 2.0. 2897 */ 2898 @Deprecated 2899 public Invoker getDefaultInvoker() 2900 { 2901 return new DefaultInvoker(); 2902 } 2903 2904 /** 2905 * Gets a new default invoker implementation instance. 2906 * 2907 * @param model The model to get a new default invoker implementation instance of. 2908 * 2909 * @return A new default invoker implementation instance. 2910 * 2911 * @throws NullPointerException if {@code model} is {@code null}. 2912 * @throws ObjectManagementException if getting a new default invoker implementation instance fails. 2913 * 2914 * @see #getInvoker(java.lang.ClassLoader) 2915 * 2916 * @since 1.2 2917 */ 2918 public Invoker getDefaultInvoker( final Modules model ) 2919 { 2920 if ( model == null ) 2921 { 2922 throw new NullPointerException( "model" ); 2923 } 2924 2925 try 2926 { 2927 final Invoker defaultInvoker = new DefaultInvoker(); 2928 model.getInstance( defaultInvoker ); 2929 return defaultInvoker; 2930 } 2931 catch ( final ModelObjectException e ) 2932 { 2933 throw new ObjectManagementException( getMessage( e ), e ); 2934 } 2935 } 2936 2937 /** 2938 * Gets an invocation for a given object, instance, method and arguments. 2939 * 2940 * @param object The object to invoke. 2941 * @param instance The instance of the object to invoke. 2942 * @param method The method to invoke on {@code object}. 2943 * @param arguments The arguments of the invocation or {@code null}. 2944 * 2945 * @return An invocation with {@code object}, {@code instance}, {@code method} and {@code arguments}. 2946 * 2947 * @throws NullPointerException if {@code object}, {@code instance} or {@code method} is {@code null}. 2948 * @throws InstantiationException if instantiating a new invocation fails. 2949 * 2950 * @deprecated As of JOMC 1.1, please use method {@link #getInvocation(java.lang.ClassLoader, java.lang.Object, org.jomc.model.Instance, java.lang.reflect.Method, java.lang.Object[])}. 2951 * This method will be removed in version 2.0. 2952 */ 2953 @Deprecated 2954 public Invocation getInvocation( final Object object, final Instance instance, final Method method, 2955 final Object[] arguments ) throws InstantiationException 2956 { 2957 return this.getInvocation( this.getDefaultClassLoader( object.getClass() ), object, instance, method, 2958 arguments ); 2959 2960 } 2961 2962 /** 2963 * Gets an invocation for a given class loader, object, instance, method and arguments. 2964 * 2965 * @param classLoader The class loader of the invocation. 2966 * @param object The object to invoke. 2967 * @param instance The instance of the object to invoke. 2968 * @param method The method to invoke on {@code object}. 2969 * @param arguments The arguments of the invocation or {@code null}. 2970 * 2971 * @return An invocation with {@code classLoader}, {@code object}, {@code instance}, {@code method} and 2972 * {@code arguments}. 2973 * 2974 * @throws NullPointerException if {@code classLoader} {@code object}, {@code instance} or {@code method} is 2975 * {@code null}. 2976 * @throws ObjectManagementException if getting an invocation fails. 2977 * 2978 * @see #getDefaultInvocation(org.jomc.model.Modules) 2979 * 2980 * @since 1.1 2981 */ 2982 public Invocation getInvocation( final ClassLoader classLoader, final Object object, final Instance instance, 2983 final Method method, final Object[] arguments ) 2984 { 2985 if ( classLoader == null ) 2986 { 2987 throw new NullPointerException( "classLoader" ); 2988 } 2989 if ( object == null ) 2990 { 2991 throw new NullPointerException( "object" ); 2992 } 2993 if ( instance == null ) 2994 { 2995 throw new NullPointerException( "instance" ); 2996 } 2997 if ( method == null ) 2998 { 2999 throw new NullPointerException( "method" ); 3000 } 3001 3002 try 3003 { 3004 Invocation invocation = null; 3005 final Modules model = this.getModules( classLoader ); 3006 final Specification invocationSpecification = model.getSpecification( Invocation.class ); 3007 3008 if ( invocationSpecification != null ) 3009 { 3010 final Implementations implementations = 3011 model.getImplementations( invocationSpecification.getIdentifier() ); 3012 3013 if ( implementations != null && !implementations.getImplementation().isEmpty() ) 3014 { 3015 for ( int i = 0, s0 = implementations.getImplementation().size(); i < s0; i++ ) 3016 { 3017 final Implementation impl = implementations.getImplementation().get( i ); 3018 3019 if ( invocation == null ) 3020 { 3021 final Instance invocationInstance = model.getInstance( impl.getIdentifier() ); 3022 3023 if ( invocationInstance != null ) 3024 { 3025 invocation = (Invocation) model.createObject( invocationInstance, classLoader ); 3026 } 3027 else if ( this.isLoggable( Level.WARNING ) ) 3028 { 3029 this.log( classLoader, Level.WARNING, getMissingInstanceMessage( 3030 Locale.getDefault(), impl.getIdentifier(), impl.getName() ), null ); 3031 3032 } 3033 } 3034 else if ( this.isLoggable( Level.CONFIG ) ) 3035 { 3036 this.log( classLoader, Level.CONFIG, getIgnoredInvocationMessage( 3037 Locale.getDefault(), impl.getIdentifier() ), null ); 3038 3039 } 3040 } 3041 } 3042 } 3043 else if ( this.isLoggable( Level.WARNING ) ) 3044 { 3045 this.log( classLoader, Level.WARNING, getMissingSpecificationMessage( 3046 Locale.getDefault(), Invocation.class.getName() ), null ); 3047 3048 } 3049 3050 if ( invocation == null ) 3051 { 3052 invocation = this.getDefaultInvocation( model ); 3053 } 3054 3055 invocation.getContext().put( DefaultInvocation.OBJECT_KEY, object ); 3056 invocation.getContext().put( DefaultInvocation.METHOD_KEY, method ); 3057 invocation.getContext().put( DefaultInvocation.ARGUMENTS_KEY, arguments ); 3058 invocation.getContext().put( DefaultInvocation.INSTANCE_KEY, instance ); 3059 invocation.getContext().put( DefaultInvocation.MODULES_KEY, model ); 3060 invocation.getContext().put( DefaultInvocation.CLASSLOADER_KEY, classLoader ); 3061 return invocation; 3062 } 3063 catch ( final ModelObjectException e ) 3064 { 3065 throw new ObjectManagementException( getMessage( e ), e ); 3066 } 3067 catch ( final InstantiationException e ) 3068 { 3069 throw new ObjectManagementException( getMessage( e ), e ); 3070 } 3071 } 3072 3073 /** 3074 * Gets a new default invocation implementation instance. 3075 * 3076 * @return A new default invocation implementation instance. 3077 * 3078 * @see #getInvocation(java.lang.Object, org.jomc.model.Instance, java.lang.reflect.Method, java.lang.Object[]) 3079 * 3080 * @since 1.1 3081 * 3082 * @deprecated As of JOMC 1.2, replaced by method {@link #getDefaultInvocation(org.jomc.model.Modules)}. This method 3083 * will be removed in version 2.0. 3084 */ 3085 @Deprecated 3086 public Invocation getDefaultInvocation() 3087 { 3088 return new DefaultInvocation(); 3089 } 3090 3091 /** 3092 * Gets a new default invocation implementation instance. 3093 * 3094 * @param model The model to get a new default invocation implementation instance of. 3095 * 3096 * @return A new default invocation implementation instance. 3097 * 3098 * @throws NullPointerException if {@code model} is {@code null}. 3099 * @throws ObjectManagementException if getting a new default invocation implementation instance fails. 3100 * 3101 * @see #getInvocation(java.lang.ClassLoader, java.lang.Object, org.jomc.model.Instance, java.lang.reflect.Method, java.lang.Object[]) 3102 * 3103 * @since 1.2 3104 */ 3105 public Invocation getDefaultInvocation( final Modules model ) 3106 { 3107 if ( model == null ) 3108 { 3109 throw new NullPointerException( "model" ); 3110 } 3111 3112 try 3113 { 3114 final Invocation defaultInvocation = new DefaultInvocation(); 3115 model.getInstance( defaultInvocation ); 3116 return defaultInvocation; 3117 } 3118 catch ( final ModelObjectException e ) 3119 { 3120 throw new ObjectManagementException( getMessage( e ), e ); 3121 } 3122 } 3123 3124 /** 3125 * Initializes the instance. 3126 * <p>This method is called once on first usage of a new instance.</p> 3127 * 3128 * @throws ObjectManagementException if initialization fails. 3129 */ 3130 public synchronized void initialize() 3131 { 3132 try 3133 { 3134 if ( !this.initialized ) 3135 { 3136 try 3137 { 3138 final long t0 = System.currentTimeMillis(); 3139 this.initialized = true; 3140 3141 this.listeners.clear(); 3142 this.modules.clear(); 3143 this.invokers.clear(); 3144 this.locators.clear(); 3145 this.scopes.clear(); 3146 3147 final ClassLoader classLoader = this.getDefaultClassLoader( this.getClass() ); 3148 final List<LogRecord> bootstrapLogRecords = new ArrayList<LogRecord>( 1024 ); 3149 final List<Listener> bootstrapListeners = new ArrayList<Listener>( 1 ); 3150 bootstrapListeners.add( new Listener() 3151 { 3152 3153 public void onLog( final Level level, final String message, final Throwable throwable ) 3154 { 3155 final LogRecord r = new LogRecord( level, message ); 3156 r.setThrown( throwable ); 3157 3158 bootstrapLogRecords.add( r ); 3159 } 3160 3161 } ); 3162 3163 this.listeners.put( this.getDefaultClassLoader( classLoader ), 3164 Collections.unmodifiableList( bootstrapListeners ) ); 3165 3166 final Modules model = this.getModules( classLoader ); 3167 final Specification objectManager = model.getSpecification( ObjectManager.class ); 3168 if ( objectManager == null ) 3169 { 3170 throw new InstantiationException( getMissingSpecificationMessage( 3171 Locale.getDefault(), ObjectManager.class.getName() ) ); 3172 3173 } 3174 3175 final Implementation thisImplementation = model.getImplementation( this.getClass() ); 3176 if ( thisImplementation == null ) 3177 { 3178 throw new InstantiationException( getMissingImplementationMessage( 3179 Locale.getDefault(), objectManager.getIdentifier(), this.getClass().getName() ) ); 3180 3181 } 3182 3183 final Instance thisInstance = model.getInstance( this ); 3184 if ( thisInstance == null ) 3185 { 3186 throw new InstantiationException( getMissingInstanceMessage( 3187 Locale.getDefault(), objectManager.getIdentifier(), thisImplementation.getName() ) ); 3188 3189 } 3190 3191 if ( objectManager.getScope() != null ) 3192 { 3193 final Scope scope = this.getScope( objectManager.getScope(), classLoader ); 3194 if ( scope == null ) 3195 { 3196 throw new InstantiationException( getMissingScopeMessage( 3197 Locale.getDefault(), objectManager.getScope() ) ); 3198 3199 } 3200 3201 scope.putObject( thisInstance.getIdentifier(), this ); 3202 } 3203 3204 if ( this.isLoggable( Level.FINE ) ) 3205 { 3206 this.log( Level.FINE, getImplementationInfoMessage( 3207 Locale.getDefault(), Long.valueOf( System.currentTimeMillis() - t0 ) ), null ); 3208 3209 } 3210 3211 this.listeners.clear(); 3212 3213 for ( LogRecord r : bootstrapLogRecords ) 3214 { 3215 this.log( classLoader, r.getLevel(), r.getMessage(), r.getThrown() ); 3216 } 3217 } 3218 catch ( final InstantiationException e ) 3219 { 3220 this.listeners.clear(); 3221 this.modules.clear(); 3222 this.invokers.clear(); 3223 this.locators.clear(); 3224 this.scopes.clear(); 3225 this.initialized = false; 3226 3227 throw new ObjectManagementException( getMessage( e ), e ); 3228 } 3229 } 3230 } 3231 catch ( final ModelObjectException e ) 3232 { 3233 throw new ObjectManagementException( getMessage( e ), e ); 3234 } 3235 } 3236 3237 /** 3238 * Creates a proxy object for a given object. 3239 * 3240 * @param instance The instance of {@code object}. 3241 * @param object The object to create a proxy object for. 3242 * @param classLoader The class loader to create the proxy object with. 3243 * 3244 * @return A new proxy object for {@code object}. 3245 * 3246 * @throws ObjectManagementException if creating a proxy object fails. 3247 */ 3248 private Object createProxy( final Instance instance, final Object object, final ClassLoader classLoader ) 3249 { 3250 try 3251 { 3252 Constructor<?> proxyClassConstructor = null; 3253 3254 synchronized ( proxyClassConstructors ) 3255 { 3256 Map<String, Reference<Constructor<?>>> map = proxyClassConstructors.get( classLoader ); 3257 3258 if ( map == null ) 3259 { 3260 map = new HashMap<String, Reference<Constructor<?>>>(); 3261 proxyClassConstructors.put( classLoader, map ); 3262 } 3263 3264 Reference<Constructor<?>> reference = map.get( instance.getIdentifier() ); 3265 3266 if ( reference != null ) 3267 { 3268 proxyClassConstructor = reference.get(); 3269 } 3270 3271 if ( proxyClassConstructor == null 3272 && ( reference != null || !map.containsKey( instance.getIdentifier() ) ) ) 3273 { 3274 final Class<?> proxyClass = instance.getJavaProxyClass( classLoader ); 3275 3276 if ( proxyClass != null ) 3277 { 3278 proxyClassConstructor = proxyClass.getConstructor( INVOCATION_HANDLER_ARGUMENTS ); 3279 } 3280 3281 map.put( instance.getIdentifier(), new WeakReference<Constructor<?>>( proxyClassConstructor ) ); 3282 } 3283 } 3284 3285 Object proxyObject = object; 3286 3287 if ( proxyClassConstructor != null ) 3288 { 3289 proxyObject = proxyClassConstructor.newInstance( new Object[] 3290 { 3291 new InvocationHandler() 3292 { 3293 3294 private final Invoker invoker = getInvoker( classLoader ); 3295 3296 public Object invoke( final Object proxy, final Method method, final Object[] args ) 3297 throws Throwable 3298 { 3299 if ( args != null ) 3300 { 3301 Object[] clonedArgs = args; 3302 3303 for ( int i = 0, s0 = clonedArgs.length; i < s0; i++ ) 3304 { 3305 if ( clonedArgs[i] == proxy ) 3306 { 3307 if ( clonedArgs == args ) 3308 { 3309 clonedArgs = clonedArgs.clone(); 3310 } 3311 3312 clonedArgs[i] = object; 3313 } 3314 } 3315 3316 return this.invoker.invoke( getInvocation( 3317 classLoader, object, instance, method, clonedArgs ) ); 3318 3319 } 3320 3321 return this.invoker.invoke( getInvocation( 3322 classLoader, object, instance, method, null ) ); 3323 3324 } 3325 3326 } 3327 } ); 3328 3329 } 3330 3331 return proxyObject; 3332 } 3333 catch ( final ModelObjectException e ) 3334 { 3335 throw new ObjectManagementException( getMessage( e ), e ); 3336 } 3337 catch ( final ClassNotFoundException e ) 3338 { 3339 throw new ObjectManagementException( getMessage( e ), e ); 3340 } 3341 catch ( final NoSuchMethodException e ) 3342 { 3343 throw new ObjectManagementException( getMessage( e ), e ); 3344 } 3345 catch ( final IllegalAccessException e ) 3346 { 3347 throw new ObjectManagementException( getMessage( e ), e ); 3348 } 3349 catch ( final InstantiationException e ) 3350 { 3351 throw new ObjectManagementException( getMessage( e ), e ); 3352 } 3353 catch ( final InvocationTargetException e ) 3354 { 3355 throw new ObjectManagementException( getMessage( e ), e ); 3356 } 3357 } 3358 3359 private void logModulesReport( final Modules mods, final ClassLoader classLoader ) 3360 { 3361 final StringBuilder modulesInfo = new StringBuilder( 8192 ); 3362 3363 this.log( classLoader, Level.FINEST, getModulesReportMessage( Locale.getDefault() ), null ); 3364 3365 modulesInfo.append( "\tClassLoader:" ).append( classLoader ); 3366 3367 if ( mods.getDocumentation() != null ) 3368 { 3369 modulesInfo.append( "|Documentation:" ).append( mods.getDocumentation().getText( 3370 Locale.getDefault().getLanguage() ).getValue() ); 3371 3372 } 3373 3374 this.log( classLoader, Level.FINEST, modulesInfo.toString(), null ); 3375 3376 for ( Module m : mods.getModule() ) 3377 { 3378 modulesInfo.setLength( 0 ); 3379 modulesInfo.append( "\tM:" ).append( m.getName() ); 3380 3381 if ( m.getVersion() != null ) 3382 { 3383 modulesInfo.append( "|Version:" ).append( m.getVersion() ); 3384 } 3385 if ( m.getVendor() != null ) 3386 { 3387 modulesInfo.append( "|Vendor:" ).append( m.getVendor() ); 3388 } 3389 3390 this.log( classLoader, Level.FINEST, modulesInfo.toString(), null ); 3391 modulesInfo.setLength( 0 ); 3392 3393 if ( m.getSpecifications() != null ) 3394 { 3395 for ( Specification s : m.getSpecifications().getSpecification() ) 3396 { 3397 modulesInfo.append( "\t\t" ); 3398 this.appendSpecificationInfo( s, modulesInfo ); 3399 this.log( classLoader, Level.FINEST, modulesInfo.toString(), null ); 3400 modulesInfo.setLength( 0 ); 3401 3402 final Implementations available = mods.getImplementations( s.getIdentifier() ); 3403 3404 if ( available != null ) 3405 { 3406 for ( Implementation i : available.getImplementation() ) 3407 { 3408 modulesInfo.append( "\t\t\t" ); 3409 this.appendImplementationInfo( i, modulesInfo ).append( "|Module:" ). 3410 append( mods.getModuleOfImplementation( i.getIdentifier() ).getName() ); 3411 3412 this.log( classLoader, Level.FINEST, modulesInfo.toString(), null ); 3413 modulesInfo.setLength( 0 ); 3414 } 3415 } 3416 } 3417 } 3418 3419 if ( m.getImplementations() != null ) 3420 { 3421 for ( Implementation i : m.getImplementations().getImplementation() ) 3422 { 3423 modulesInfo.append( "\t\t" ); 3424 this.appendImplementationInfo( i, modulesInfo ); 3425 this.log( classLoader, Level.FINEST, modulesInfo.toString(), null ); 3426 modulesInfo.setLength( 0 ); 3427 3428 if ( i.getImplementations() != null ) 3429 { 3430 modulesInfo.append( "\t\t\t" ); 3431 for ( ImplementationReference r : i.getImplementations().getReference() ) 3432 { 3433 this.appendImplementationInfo( 3434 mods.getImplementation( r.getIdentifier() ), modulesInfo ).append( "|Module:" ). 3435 append( mods.getModuleOfImplementation( r.getIdentifier() ).getName() ); 3436 3437 this.log( classLoader, Level.FINEST, modulesInfo.toString(), null ); 3438 modulesInfo.setLength( 0 ); 3439 } 3440 } 3441 if ( i.getSpecifications() != null ) 3442 { 3443 for ( SpecificationReference s : i.getSpecifications().getReference() ) 3444 { 3445 modulesInfo.append( "\t\t\tS:" ).append( s.getIdentifier() ); 3446 3447 if ( s.getVersion() != null ) 3448 { 3449 modulesInfo.append( "|Version:" ).append( s.getVersion() ); 3450 } 3451 3452 modulesInfo.append( "|Module:" ).append( mods.getModuleOfSpecification( 3453 s.getIdentifier() ).getName() ); 3454 3455 this.log( classLoader, Level.FINEST, modulesInfo.toString(), null ); 3456 modulesInfo.setLength( 0 ); 3457 } 3458 } 3459 3460 if ( i.getDependencies() != null ) 3461 { 3462 for ( Dependency d : i.getDependencies().getDependency() ) 3463 { 3464 modulesInfo.append( "\t\t\tD:" ).append( d.getName() ).append( "|Identifier:" ). 3465 append( d.getIdentifier() ); 3466 3467 if ( d.getImplementationName() != null ) 3468 { 3469 modulesInfo.append( "|Name:" ).append( d.getImplementationName() ); 3470 } 3471 3472 modulesInfo.append( "|Module:" ).append( mods.getModuleOfSpecification( 3473 d.getIdentifier() ).getName() ); 3474 3475 this.log( classLoader, Level.FINEST, modulesInfo.toString(), null ); 3476 modulesInfo.setLength( 0 ); 3477 3478 final Implementations available = mods.getImplementations( d.getIdentifier() ); 3479 3480 if ( available != null ) 3481 { 3482 for ( Implementation di : available.getImplementation() ) 3483 { 3484 modulesInfo.append( "\t\t\t\t" ); 3485 this.appendImplementationInfo( di, modulesInfo ).append( "|Module:" ). 3486 append( mods.getModuleOfImplementation( di.getIdentifier() ).getName() ); 3487 3488 this.log( classLoader, Level.FINEST, modulesInfo.toString(), null ); 3489 modulesInfo.setLength( 0 ); 3490 } 3491 } 3492 } 3493 } 3494 3495 if ( i.getMessages() != null ) 3496 { 3497 for ( Message msg : i.getMessages().getMessage() ) 3498 { 3499 modulesInfo.append( "\t\t\tM:" ).append( msg.getName() ).append( "|Text:" ). 3500 append( msg.getTemplate().getText( Locale.getDefault().getLanguage() ).getValue() ); 3501 3502 this.log( classLoader, Level.FINEST, modulesInfo.toString(), null ); 3503 modulesInfo.setLength( 0 ); 3504 } 3505 } 3506 3507 if ( i.getProperties() != null ) 3508 { 3509 for ( Property p : i.getProperties().getProperty() ) 3510 { 3511 modulesInfo.append( "\t\t\tP:" ).append( p.getName() ); 3512 modulesInfo.append( "|Type:" ).append( p.getType() ); 3513 modulesInfo.append( "|Value:" ).append( p.getValue() ); 3514 3515 try 3516 { 3517 modulesInfo.append( "|JavaValue:" ).append( p.getJavaValue( classLoader ) ); 3518 } 3519 catch ( final ModelObjectException e ) 3520 { 3521 modulesInfo.append( "|JavaValue:" ).append( e ); 3522 } 3523 3524 this.log( classLoader, Level.FINEST, modulesInfo.toString(), null ); 3525 modulesInfo.setLength( 0 ); 3526 } 3527 } 3528 } 3529 } 3530 } 3531 } 3532 3533 private StringBuilder appendSpecificationInfo( final Specification s, final StringBuilder b ) 3534 { 3535 b.append( "S:" ).append( s.getIdentifier() ); 3536 if ( s.getVersion() != null ) 3537 { 3538 b.append( "|Version:" ).append( s.getVersion() ); 3539 } 3540 if ( s.getVendor() != null ) 3541 { 3542 b.append( "|Vendor:" ).append( s.getVendor() ); 3543 } 3544 3545 b.append( "|Multiplicity:" ).append( s.getMultiplicity() ).append( "|Scope:" ). 3546 append( s.getScope() == null ? "Multiton" : s.getScope() ); 3547 3548 if ( s.getClazz() != null ) 3549 { 3550 b.append( "|Class:" ).append( s.getClazz() ); 3551 } 3552 3553 return b; 3554 } 3555 3556 private StringBuilder appendImplementationInfo( final Implementation i, final StringBuilder b ) 3557 { 3558 b.append( "I:" ).append( i.getIdentifier() ).append( "|Name:" ).append( i.getName() ).append( "|Abstract:" ). 3559 append( i.isAbstract() ).append( "|Final:" ).append( i.isFinal() ).append( "|Stateless:" ). 3560 append( i.isStateless() ); 3561 3562 if ( i.getVersion() != null ) 3563 { 3564 b.append( "|Version:" ).append( i.getVersion() ); 3565 } 3566 if ( i.getVendor() != null ) 3567 { 3568 b.append( "|Vendor:" ).append( i.getVendor() ); 3569 } 3570 if ( i.getClazz() != null ) 3571 { 3572 b.append( "|Class:" ).append( i.getClazz() ); 3573 } 3574 if ( i.getLocation() != null ) 3575 { 3576 b.append( "|Location:" ).append( i.getLocation() ); 3577 } 3578 3579 return b; 3580 } 3581 3582 private String getClassLoaderInfo( final ClassLoader current, final ClassLoader parent ) 3583 { 3584 final StringBuilder b = new StringBuilder(); 3585 appendClassLoaderInfo( b, current ); 3586 3587 if ( parent != null ) 3588 { 3589 b.append( " => " ); 3590 appendClassLoaderInfo( b, parent ); 3591 } 3592 3593 return b.toString(); 3594 } 3595 3596 private String getObjectInfo( final Object object ) 3597 { 3598 final StringBuilder b = new StringBuilder(); 3599 appendObjectInfo( b, object ); 3600 b.append( " @ " ); 3601 appendClassLoaderInfo( b, this.getDefaultClassLoader( object.getClass() ) ); 3602 return b.toString(); 3603 } 3604 3605 private static StringBuilder appendClassLoaderInfo( final StringBuilder b, final ClassLoader classLoader ) 3606 { 3607 return b.append( "(" ).append( Integer.toHexString( System.identityHashCode( classLoader ) ) ).append( ")" ). 3608 append( classLoader ); 3609 3610 } 3611 3612 private static StringBuilder appendObjectInfo( final StringBuilder b, final Object object ) 3613 { 3614 return b.append( "(" ).append( Integer.toHexString( System.identityHashCode( object ) ) ).append( ")" ). 3615 append( object ); 3616 3617 } 3618 3619 private static String getMessage( final Throwable t ) 3620 { 3621 return t != null 3622 ? t.getMessage() != null && t.getMessage().trim().length() > 0 3623 ? t.getMessage() 3624 : getMessage( t.getCause() ) 3625 : null; 3626 3627 } 3628 3629 private static Specification createDefaultSpecification( final Class<?> specification, 3630 final Multiplicity multiplicity, final String scope ) 3631 { 3632 final Specification s = new Specification(); 3633 s.setClassDeclaration( true ); 3634 s.setClazz( specification.getName() ); 3635 s.setIdentifier( specification.getName() ); 3636 s.setMultiplicity( multiplicity ); 3637 s.setScope( scope ); 3638 s.setVendor( getDefaultModulesVendor( Locale.getDefault() ) ); 3639 s.setVersion( getDefaultModulesVersion( Locale.getDefault() ) ); 3640 return s; 3641 } 3642 3643 private static Implementation createDefaultImplementation( final Class<?> implementation, final String name ) 3644 { 3645 final Implementation i = new Implementation(); 3646 i.setClassDeclaration( true ); 3647 i.setClazz( implementation.getName() ); 3648 i.setIdentifier( implementation.getName() ); 3649 i.setName( name ); 3650 i.setVendor( getDefaultModulesVendor( Locale.getDefault() ) ); 3651 i.setVersion( getDefaultModulesVersion( Locale.getDefault() ) ); 3652 return i; 3653 } 3654 3655 // SECTION-END 3656 // SECTION-START[Dependencies] 3657 // SECTION-END 3658 // SECTION-START[Properties] 3659 // SECTION-END 3660 // SECTION-START[Messages] 3661 // <editor-fold defaultstate="collapsed" desc=" Generated Messages "> 3662 /** 3663 * Gets the text of the {@code <Creating Modules Info>} message. 3664 * <p><dl> 3665 * <dt><b>Languages:</b></dt> 3666 * <dd>English (default)</dd> 3667 * <dd>Deutsch</dd> 3668 * <dt><b>Final:</b></dt><dd>No</dd> 3669 * </dl></p> 3670 * @param locale The locale of the message to return. 3671 * @param classLoaderInfo Format argument. 3672 * @return The text of the {@code <Creating Modules Info>} message for {@code locale}. 3673 * @throws org.jomc.ObjectManagementException if getting the message instance fails. 3674 */ 3675 @SuppressWarnings("unused") 3676 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 3677 private static String getCreatingModulesInfo( final java.util.Locale locale, final java.lang.String classLoaderInfo ) 3678 { 3679 java.io.BufferedReader reader = null; 3680 boolean suppressExceptionOnClose = true; 3681 3682 try 3683 { 3684 final String message = java.text.MessageFormat.format( java.util.ResourceBundle.getBundle( "org.jomc.ri.DefaultObjectManager", locale ).getString( "Creating Modules Info" ), classLoaderInfo, (Object) null ); 3685 final java.lang.StringBuilder builder = new java.lang.StringBuilder( message.length() ); 3686 reader = new java.io.BufferedReader( new java.io.StringReader( message ) ); 3687 final String lineSeparator = System.getProperty( "line.separator", "\n" ); 3688 3689 String line; 3690 while ( ( line = reader.readLine() ) != null ) 3691 { 3692 builder.append( lineSeparator ).append( line ); 3693 } 3694 3695 suppressExceptionOnClose = false; 3696 return builder.length() > 0 ? builder.substring( lineSeparator.length() ) : ""; 3697 } 3698 catch( final java.lang.ClassCastException e ) 3699 { 3700 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 3701 } 3702 catch( final java.lang.IllegalArgumentException e ) 3703 { 3704 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 3705 } 3706 catch( final java.util.MissingResourceException e ) 3707 { 3708 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 3709 } 3710 catch( final java.io.IOException e ) 3711 { 3712 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 3713 } 3714 finally 3715 { 3716 try 3717 { 3718 if( reader != null ) 3719 { 3720 reader.close(); 3721 } 3722 } 3723 catch( final java.io.IOException e ) 3724 { 3725 if( !suppressExceptionOnClose ) 3726 { 3727 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 3728 } 3729 } 3730 } 3731 } 3732 /** 3733 * Gets the text of the {@code <Default Implementation Name>} message. 3734 * <p><dl> 3735 * <dt><b>Languages:</b></dt> 3736 * <dd>English (default)</dd> 3737 * <dd>Deutsch</dd> 3738 * <dt><b>Final:</b></dt><dd>No</dd> 3739 * </dl></p> 3740 * @param locale The locale of the message to return. 3741 * @return The text of the {@code <Default Implementation Name>} message for {@code locale}. 3742 * @throws org.jomc.ObjectManagementException if getting the message instance fails. 3743 */ 3744 @SuppressWarnings("unused") 3745 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 3746 private static String getDefaultImplementationName( final java.util.Locale locale ) 3747 { 3748 java.io.BufferedReader reader = null; 3749 boolean suppressExceptionOnClose = true; 3750 3751 try 3752 { 3753 final String message = java.text.MessageFormat.format( java.util.ResourceBundle.getBundle( "org.jomc.ri.DefaultObjectManager", locale ).getString( "Default Implementation Name" ), (Object) null ); 3754 final java.lang.StringBuilder builder = new java.lang.StringBuilder( message.length() ); 3755 reader = new java.io.BufferedReader( new java.io.StringReader( message ) ); 3756 final String lineSeparator = System.getProperty( "line.separator", "\n" ); 3757 3758 String line; 3759 while ( ( line = reader.readLine() ) != null ) 3760 { 3761 builder.append( lineSeparator ).append( line ); 3762 } 3763 3764 suppressExceptionOnClose = false; 3765 return builder.length() > 0 ? builder.substring( lineSeparator.length() ) : ""; 3766 } 3767 catch( final java.lang.ClassCastException e ) 3768 { 3769 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 3770 } 3771 catch( final java.lang.IllegalArgumentException e ) 3772 { 3773 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 3774 } 3775 catch( final java.util.MissingResourceException e ) 3776 { 3777 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 3778 } 3779 catch( final java.io.IOException e ) 3780 { 3781 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 3782 } 3783 finally 3784 { 3785 try 3786 { 3787 if( reader != null ) 3788 { 3789 reader.close(); 3790 } 3791 } 3792 catch( final java.io.IOException e ) 3793 { 3794 if( !suppressExceptionOnClose ) 3795 { 3796 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 3797 } 3798 } 3799 } 3800 } 3801 /** 3802 * Gets the text of the {@code <Default Invoker Info Message>} message. 3803 * <p><dl> 3804 * <dt><b>Languages:</b></dt> 3805 * <dd>English (default)</dd> 3806 * <dd>Deutsch</dd> 3807 * <dt><b>Final:</b></dt><dd>No</dd> 3808 * </dl></p> 3809 * @param locale The locale of the message to return. 3810 * @param classLoaderInfo Format argument. 3811 * @return The text of the {@code <Default Invoker Info Message>} message for {@code locale}. 3812 * @throws org.jomc.ObjectManagementException if getting the message instance fails. 3813 */ 3814 @SuppressWarnings("unused") 3815 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 3816 private static String getDefaultInvokerInfoMessage( final java.util.Locale locale, final java.lang.String classLoaderInfo ) 3817 { 3818 java.io.BufferedReader reader = null; 3819 boolean suppressExceptionOnClose = true; 3820 3821 try 3822 { 3823 final String message = java.text.MessageFormat.format( java.util.ResourceBundle.getBundle( "org.jomc.ri.DefaultObjectManager", locale ).getString( "Default Invoker Info Message" ), classLoaderInfo, (Object) null ); 3824 final java.lang.StringBuilder builder = new java.lang.StringBuilder( message.length() ); 3825 reader = new java.io.BufferedReader( new java.io.StringReader( message ) ); 3826 final String lineSeparator = System.getProperty( "line.separator", "\n" ); 3827 3828 String line; 3829 while ( ( line = reader.readLine() ) != null ) 3830 { 3831 builder.append( lineSeparator ).append( line ); 3832 } 3833 3834 suppressExceptionOnClose = false; 3835 return builder.length() > 0 ? builder.substring( lineSeparator.length() ) : ""; 3836 } 3837 catch( final java.lang.ClassCastException e ) 3838 { 3839 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 3840 } 3841 catch( final java.lang.IllegalArgumentException e ) 3842 { 3843 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 3844 } 3845 catch( final java.util.MissingResourceException e ) 3846 { 3847 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 3848 } 3849 catch( final java.io.IOException e ) 3850 { 3851 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 3852 } 3853 finally 3854 { 3855 try 3856 { 3857 if( reader != null ) 3858 { 3859 reader.close(); 3860 } 3861 } 3862 catch( final java.io.IOException e ) 3863 { 3864 if( !suppressExceptionOnClose ) 3865 { 3866 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 3867 } 3868 } 3869 } 3870 } 3871 /** 3872 * Gets the text of the {@code <Default Listener Info>} message. 3873 * <p><dl> 3874 * <dt><b>Languages:</b></dt> 3875 * <dd>English (default)</dd> 3876 * <dd>Deutsch</dd> 3877 * <dt><b>Final:</b></dt><dd>No</dd> 3878 * </dl></p> 3879 * @param locale The locale of the message to return. 3880 * @param classLoaderInfo Format argument. 3881 * @return The text of the {@code <Default Listener Info>} message for {@code locale}. 3882 * @throws org.jomc.ObjectManagementException if getting the message instance fails. 3883 */ 3884 @SuppressWarnings("unused") 3885 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 3886 private static String getDefaultListenerInfo( final java.util.Locale locale, final java.lang.String classLoaderInfo ) 3887 { 3888 java.io.BufferedReader reader = null; 3889 boolean suppressExceptionOnClose = true; 3890 3891 try 3892 { 3893 final String message = java.text.MessageFormat.format( java.util.ResourceBundle.getBundle( "org.jomc.ri.DefaultObjectManager", locale ).getString( "Default Listener Info" ), classLoaderInfo, (Object) null ); 3894 final java.lang.StringBuilder builder = new java.lang.StringBuilder( message.length() ); 3895 reader = new java.io.BufferedReader( new java.io.StringReader( message ) ); 3896 final String lineSeparator = System.getProperty( "line.separator", "\n" ); 3897 3898 String line; 3899 while ( ( line = reader.readLine() ) != null ) 3900 { 3901 builder.append( lineSeparator ).append( line ); 3902 } 3903 3904 suppressExceptionOnClose = false; 3905 return builder.length() > 0 ? builder.substring( lineSeparator.length() ) : ""; 3906 } 3907 catch( final java.lang.ClassCastException e ) 3908 { 3909 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 3910 } 3911 catch( final java.lang.IllegalArgumentException e ) 3912 { 3913 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 3914 } 3915 catch( final java.util.MissingResourceException e ) 3916 { 3917 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 3918 } 3919 catch( final java.io.IOException e ) 3920 { 3921 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 3922 } 3923 finally 3924 { 3925 try 3926 { 3927 if( reader != null ) 3928 { 3929 reader.close(); 3930 } 3931 } 3932 catch( final java.io.IOException e ) 3933 { 3934 if( !suppressExceptionOnClose ) 3935 { 3936 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 3937 } 3938 } 3939 } 3940 } 3941 /** 3942 * Gets the text of the {@code <Default Locator Info Message>} message. 3943 * <p><dl> 3944 * <dt><b>Languages:</b></dt> 3945 * <dd>English (default)</dd> 3946 * <dd>Deutsch</dd> 3947 * <dt><b>Final:</b></dt><dd>No</dd> 3948 * </dl></p> 3949 * @param locale The locale of the message to return. 3950 * @param schemeInfo Format argument. 3951 * @param classLoaderInfo Format argument. 3952 * @return The text of the {@code <Default Locator Info Message>} message for {@code locale}. 3953 * @throws org.jomc.ObjectManagementException if getting the message instance fails. 3954 */ 3955 @SuppressWarnings("unused") 3956 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 3957 private static String getDefaultLocatorInfoMessage( final java.util.Locale locale, final java.lang.String schemeInfo, final java.lang.String classLoaderInfo ) 3958 { 3959 java.io.BufferedReader reader = null; 3960 boolean suppressExceptionOnClose = true; 3961 3962 try 3963 { 3964 final String message = java.text.MessageFormat.format( java.util.ResourceBundle.getBundle( "org.jomc.ri.DefaultObjectManager", locale ).getString( "Default Locator Info Message" ), schemeInfo, classLoaderInfo, (Object) null ); 3965 final java.lang.StringBuilder builder = new java.lang.StringBuilder( message.length() ); 3966 reader = new java.io.BufferedReader( new java.io.StringReader( message ) ); 3967 final String lineSeparator = System.getProperty( "line.separator", "\n" ); 3968 3969 String line; 3970 while ( ( line = reader.readLine() ) != null ) 3971 { 3972 builder.append( lineSeparator ).append( line ); 3973 } 3974 3975 suppressExceptionOnClose = false; 3976 return builder.length() > 0 ? builder.substring( lineSeparator.length() ) : ""; 3977 } 3978 catch( final java.lang.ClassCastException e ) 3979 { 3980 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 3981 } 3982 catch( final java.lang.IllegalArgumentException e ) 3983 { 3984 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 3985 } 3986 catch( final java.util.MissingResourceException e ) 3987 { 3988 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 3989 } 3990 catch( final java.io.IOException e ) 3991 { 3992 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 3993 } 3994 finally 3995 { 3996 try 3997 { 3998 if( reader != null ) 3999 { 4000 reader.close(); 4001 } 4002 } 4003 catch( final java.io.IOException e ) 4004 { 4005 if( !suppressExceptionOnClose ) 4006 { 4007 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4008 } 4009 } 4010 } 4011 } 4012 /** 4013 * Gets the text of the {@code <Default Log Level Info Message>} message. 4014 * <p><dl> 4015 * <dt><b>Languages:</b></dt> 4016 * <dd>English (default)</dd> 4017 * <dd>Deutsch</dd> 4018 * <dt><b>Final:</b></dt><dd>No</dd> 4019 * </dl></p> 4020 * @param locale The locale of the message to return. 4021 * @param logLevel Format argument. 4022 * @return The text of the {@code <Default Log Level Info Message>} message for {@code locale}. 4023 * @throws org.jomc.ObjectManagementException if getting the message instance fails. 4024 */ 4025 @SuppressWarnings("unused") 4026 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 4027 private static String getDefaultLogLevelInfoMessage( final java.util.Locale locale, final java.lang.String logLevel ) 4028 { 4029 java.io.BufferedReader reader = null; 4030 boolean suppressExceptionOnClose = true; 4031 4032 try 4033 { 4034 final String message = java.text.MessageFormat.format( java.util.ResourceBundle.getBundle( "org.jomc.ri.DefaultObjectManager", locale ).getString( "Default Log Level Info Message" ), logLevel, (Object) null ); 4035 final java.lang.StringBuilder builder = new java.lang.StringBuilder( message.length() ); 4036 reader = new java.io.BufferedReader( new java.io.StringReader( message ) ); 4037 final String lineSeparator = System.getProperty( "line.separator", "\n" ); 4038 4039 String line; 4040 while ( ( line = reader.readLine() ) != null ) 4041 { 4042 builder.append( lineSeparator ).append( line ); 4043 } 4044 4045 suppressExceptionOnClose = false; 4046 return builder.length() > 0 ? builder.substring( lineSeparator.length() ) : ""; 4047 } 4048 catch( final java.lang.ClassCastException e ) 4049 { 4050 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4051 } 4052 catch( final java.lang.IllegalArgumentException e ) 4053 { 4054 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4055 } 4056 catch( final java.util.MissingResourceException e ) 4057 { 4058 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4059 } 4060 catch( final java.io.IOException e ) 4061 { 4062 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4063 } 4064 finally 4065 { 4066 try 4067 { 4068 if( reader != null ) 4069 { 4070 reader.close(); 4071 } 4072 } 4073 catch( final java.io.IOException e ) 4074 { 4075 if( !suppressExceptionOnClose ) 4076 { 4077 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4078 } 4079 } 4080 } 4081 } 4082 /** 4083 * Gets the text of the {@code <Default Model Identifier Info>} message. 4084 * <p><dl> 4085 * <dt><b>Languages:</b></dt> 4086 * <dd>English (default)</dd> 4087 * <dd>Deutsch</dd> 4088 * <dt><b>Final:</b></dt><dd>No</dd> 4089 * </dl></p> 4090 * @param locale The locale of the message to return. 4091 * @param defaultValue Format argument. 4092 * @return The text of the {@code <Default Model Identifier Info>} message for {@code locale}. 4093 * @throws org.jomc.ObjectManagementException if getting the message instance fails. 4094 */ 4095 @SuppressWarnings("unused") 4096 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 4097 private static String getDefaultModelIdentifierInfo( final java.util.Locale locale, final java.lang.String defaultValue ) 4098 { 4099 java.io.BufferedReader reader = null; 4100 boolean suppressExceptionOnClose = true; 4101 4102 try 4103 { 4104 final String message = java.text.MessageFormat.format( java.util.ResourceBundle.getBundle( "org.jomc.ri.DefaultObjectManager", locale ).getString( "Default Model Identifier Info" ), defaultValue, (Object) null ); 4105 final java.lang.StringBuilder builder = new java.lang.StringBuilder( message.length() ); 4106 reader = new java.io.BufferedReader( new java.io.StringReader( message ) ); 4107 final String lineSeparator = System.getProperty( "line.separator", "\n" ); 4108 4109 String line; 4110 while ( ( line = reader.readLine() ) != null ) 4111 { 4112 builder.append( lineSeparator ).append( line ); 4113 } 4114 4115 suppressExceptionOnClose = false; 4116 return builder.length() > 0 ? builder.substring( lineSeparator.length() ) : ""; 4117 } 4118 catch( final java.lang.ClassCastException e ) 4119 { 4120 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4121 } 4122 catch( final java.lang.IllegalArgumentException e ) 4123 { 4124 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4125 } 4126 catch( final java.util.MissingResourceException e ) 4127 { 4128 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4129 } 4130 catch( final java.io.IOException e ) 4131 { 4132 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4133 } 4134 finally 4135 { 4136 try 4137 { 4138 if( reader != null ) 4139 { 4140 reader.close(); 4141 } 4142 } 4143 catch( final java.io.IOException e ) 4144 { 4145 if( !suppressExceptionOnClose ) 4146 { 4147 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4148 } 4149 } 4150 } 4151 } 4152 /** 4153 * Gets the text of the {@code <Default Model Object Classpah Resolution Enabled Info>} message. 4154 * <p><dl> 4155 * <dt><b>Languages:</b></dt> 4156 * <dd>English (default)</dd> 4157 * <dd>Deutsch</dd> 4158 * <dt><b>Final:</b></dt><dd>No</dd> 4159 * </dl></p> 4160 * @param locale The locale of the message to return. 4161 * @param defaultValue Format argument. 4162 * @return The text of the {@code <Default Model Object Classpah Resolution Enabled Info>} message for {@code locale}. 4163 * @throws org.jomc.ObjectManagementException if getting the message instance fails. 4164 */ 4165 @SuppressWarnings("unused") 4166 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 4167 private static String getDefaultModelObjectClasspahResolutionEnabledInfo( final java.util.Locale locale, final java.lang.String defaultValue ) 4168 { 4169 java.io.BufferedReader reader = null; 4170 boolean suppressExceptionOnClose = true; 4171 4172 try 4173 { 4174 final String message = java.text.MessageFormat.format( java.util.ResourceBundle.getBundle( "org.jomc.ri.DefaultObjectManager", locale ).getString( "Default Model Object Classpah Resolution Enabled Info" ), defaultValue, (Object) null ); 4175 final java.lang.StringBuilder builder = new java.lang.StringBuilder( message.length() ); 4176 reader = new java.io.BufferedReader( new java.io.StringReader( message ) ); 4177 final String lineSeparator = System.getProperty( "line.separator", "\n" ); 4178 4179 String line; 4180 while ( ( line = reader.readLine() ) != null ) 4181 { 4182 builder.append( lineSeparator ).append( line ); 4183 } 4184 4185 suppressExceptionOnClose = false; 4186 return builder.length() > 0 ? builder.substring( lineSeparator.length() ) : ""; 4187 } 4188 catch( final java.lang.ClassCastException e ) 4189 { 4190 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4191 } 4192 catch( final java.lang.IllegalArgumentException e ) 4193 { 4194 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4195 } 4196 catch( final java.util.MissingResourceException e ) 4197 { 4198 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4199 } 4200 catch( final java.io.IOException e ) 4201 { 4202 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4203 } 4204 finally 4205 { 4206 try 4207 { 4208 if( reader != null ) 4209 { 4210 reader.close(); 4211 } 4212 } 4213 catch( final java.io.IOException e ) 4214 { 4215 if( !suppressExceptionOnClose ) 4216 { 4217 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4218 } 4219 } 4220 } 4221 } 4222 /** 4223 * Gets the text of the {@code <Default Model Processing Enabled Info>} message. 4224 * <p><dl> 4225 * <dt><b>Languages:</b></dt> 4226 * <dd>English (default)</dd> 4227 * <dd>Deutsch</dd> 4228 * <dt><b>Final:</b></dt><dd>No</dd> 4229 * </dl></p> 4230 * @param locale The locale of the message to return. 4231 * @param defaultValue Format argument. 4232 * @return The text of the {@code <Default Model Processing Enabled Info>} message for {@code locale}. 4233 * @throws org.jomc.ObjectManagementException if getting the message instance fails. 4234 */ 4235 @SuppressWarnings("unused") 4236 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 4237 private static String getDefaultModelProcessingEnabledInfo( final java.util.Locale locale, final java.lang.String defaultValue ) 4238 { 4239 java.io.BufferedReader reader = null; 4240 boolean suppressExceptionOnClose = true; 4241 4242 try 4243 { 4244 final String message = java.text.MessageFormat.format( java.util.ResourceBundle.getBundle( "org.jomc.ri.DefaultObjectManager", locale ).getString( "Default Model Processing Enabled Info" ), defaultValue, (Object) null ); 4245 final java.lang.StringBuilder builder = new java.lang.StringBuilder( message.length() ); 4246 reader = new java.io.BufferedReader( new java.io.StringReader( message ) ); 4247 final String lineSeparator = System.getProperty( "line.separator", "\n" ); 4248 4249 String line; 4250 while ( ( line = reader.readLine() ) != null ) 4251 { 4252 builder.append( lineSeparator ).append( line ); 4253 } 4254 4255 suppressExceptionOnClose = false; 4256 return builder.length() > 0 ? builder.substring( lineSeparator.length() ) : ""; 4257 } 4258 catch( final java.lang.ClassCastException e ) 4259 { 4260 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4261 } 4262 catch( final java.lang.IllegalArgumentException e ) 4263 { 4264 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4265 } 4266 catch( final java.util.MissingResourceException e ) 4267 { 4268 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4269 } 4270 catch( final java.io.IOException e ) 4271 { 4272 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4273 } 4274 finally 4275 { 4276 try 4277 { 4278 if( reader != null ) 4279 { 4280 reader.close(); 4281 } 4282 } 4283 catch( final java.io.IOException e ) 4284 { 4285 if( !suppressExceptionOnClose ) 4286 { 4287 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4288 } 4289 } 4290 } 4291 } 4292 /** 4293 * Gets the text of the {@code <Default Module Name>} message. 4294 * <p><dl> 4295 * <dt><b>Languages:</b></dt> 4296 * <dd>English (default)</dd> 4297 * <dd>Deutsch</dd> 4298 * <dt><b>Final:</b></dt><dd>No</dd> 4299 * </dl></p> 4300 * @param locale The locale of the message to return. 4301 * @return The text of the {@code <Default Module Name>} message for {@code locale}. 4302 * @throws org.jomc.ObjectManagementException if getting the message instance fails. 4303 */ 4304 @SuppressWarnings("unused") 4305 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 4306 private static String getDefaultModuleName( final java.util.Locale locale ) 4307 { 4308 java.io.BufferedReader reader = null; 4309 boolean suppressExceptionOnClose = true; 4310 4311 try 4312 { 4313 final String message = java.text.MessageFormat.format( java.util.ResourceBundle.getBundle( "org.jomc.ri.DefaultObjectManager", locale ).getString( "Default Module Name" ), (Object) null ); 4314 final java.lang.StringBuilder builder = new java.lang.StringBuilder( message.length() ); 4315 reader = new java.io.BufferedReader( new java.io.StringReader( message ) ); 4316 final String lineSeparator = System.getProperty( "line.separator", "\n" ); 4317 4318 String line; 4319 while ( ( line = reader.readLine() ) != null ) 4320 { 4321 builder.append( lineSeparator ).append( line ); 4322 } 4323 4324 suppressExceptionOnClose = false; 4325 return builder.length() > 0 ? builder.substring( lineSeparator.length() ) : ""; 4326 } 4327 catch( final java.lang.ClassCastException e ) 4328 { 4329 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4330 } 4331 catch( final java.lang.IllegalArgumentException e ) 4332 { 4333 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4334 } 4335 catch( final java.util.MissingResourceException e ) 4336 { 4337 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4338 } 4339 catch( final java.io.IOException e ) 4340 { 4341 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4342 } 4343 finally 4344 { 4345 try 4346 { 4347 if( reader != null ) 4348 { 4349 reader.close(); 4350 } 4351 } 4352 catch( final java.io.IOException e ) 4353 { 4354 if( !suppressExceptionOnClose ) 4355 { 4356 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4357 } 4358 } 4359 } 4360 } 4361 /** 4362 * Gets the text of the {@code <Default Modules Vendor>} message. 4363 * <p><dl> 4364 * <dt><b>Languages:</b></dt> 4365 * <dd>English (default)</dd> 4366 * <dd>Deutsch</dd> 4367 * <dt><b>Final:</b></dt><dd>No</dd> 4368 * </dl></p> 4369 * @param locale The locale of the message to return. 4370 * @return The text of the {@code <Default Modules Vendor>} message for {@code locale}. 4371 * @throws org.jomc.ObjectManagementException if getting the message instance fails. 4372 */ 4373 @SuppressWarnings("unused") 4374 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 4375 private static String getDefaultModulesVendor( final java.util.Locale locale ) 4376 { 4377 java.io.BufferedReader reader = null; 4378 boolean suppressExceptionOnClose = true; 4379 4380 try 4381 { 4382 final String message = java.text.MessageFormat.format( java.util.ResourceBundle.getBundle( "org.jomc.ri.DefaultObjectManager", locale ).getString( "Default Modules Vendor" ), (Object) null ); 4383 final java.lang.StringBuilder builder = new java.lang.StringBuilder( message.length() ); 4384 reader = new java.io.BufferedReader( new java.io.StringReader( message ) ); 4385 final String lineSeparator = System.getProperty( "line.separator", "\n" ); 4386 4387 String line; 4388 while ( ( line = reader.readLine() ) != null ) 4389 { 4390 builder.append( lineSeparator ).append( line ); 4391 } 4392 4393 suppressExceptionOnClose = false; 4394 return builder.length() > 0 ? builder.substring( lineSeparator.length() ) : ""; 4395 } 4396 catch( final java.lang.ClassCastException e ) 4397 { 4398 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4399 } 4400 catch( final java.lang.IllegalArgumentException e ) 4401 { 4402 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4403 } 4404 catch( final java.util.MissingResourceException e ) 4405 { 4406 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4407 } 4408 catch( final java.io.IOException e ) 4409 { 4410 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4411 } 4412 finally 4413 { 4414 try 4415 { 4416 if( reader != null ) 4417 { 4418 reader.close(); 4419 } 4420 } 4421 catch( final java.io.IOException e ) 4422 { 4423 if( !suppressExceptionOnClose ) 4424 { 4425 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4426 } 4427 } 4428 } 4429 } 4430 /** 4431 * Gets the text of the {@code <Default Modules Version>} message. 4432 * <p><dl> 4433 * <dt><b>Languages:</b></dt> 4434 * <dd>English (default)</dd> 4435 * <dd>Deutsch</dd> 4436 * <dt><b>Final:</b></dt><dd>No</dd> 4437 * </dl></p> 4438 * @param locale The locale of the message to return. 4439 * @return The text of the {@code <Default Modules Version>} message for {@code locale}. 4440 * @throws org.jomc.ObjectManagementException if getting the message instance fails. 4441 */ 4442 @SuppressWarnings("unused") 4443 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 4444 private static String getDefaultModulesVersion( final java.util.Locale locale ) 4445 { 4446 java.io.BufferedReader reader = null; 4447 boolean suppressExceptionOnClose = true; 4448 4449 try 4450 { 4451 final String message = java.text.MessageFormat.format( java.util.ResourceBundle.getBundle( "org.jomc.ri.DefaultObjectManager", locale ).getString( "Default Modules Version" ), (Object) null ); 4452 final java.lang.StringBuilder builder = new java.lang.StringBuilder( message.length() ); 4453 reader = new java.io.BufferedReader( new java.io.StringReader( message ) ); 4454 final String lineSeparator = System.getProperty( "line.separator", "\n" ); 4455 4456 String line; 4457 while ( ( line = reader.readLine() ) != null ) 4458 { 4459 builder.append( lineSeparator ).append( line ); 4460 } 4461 4462 suppressExceptionOnClose = false; 4463 return builder.length() > 0 ? builder.substring( lineSeparator.length() ) : ""; 4464 } 4465 catch( final java.lang.ClassCastException e ) 4466 { 4467 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4468 } 4469 catch( final java.lang.IllegalArgumentException e ) 4470 { 4471 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4472 } 4473 catch( final java.util.MissingResourceException e ) 4474 { 4475 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4476 } 4477 catch( final java.io.IOException e ) 4478 { 4479 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4480 } 4481 finally 4482 { 4483 try 4484 { 4485 if( reader != null ) 4486 { 4487 reader.close(); 4488 } 4489 } 4490 catch( final java.io.IOException e ) 4491 { 4492 if( !suppressExceptionOnClose ) 4493 { 4494 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4495 } 4496 } 4497 } 4498 } 4499 /** 4500 * Gets the text of the {@code <Default Modules Warning>} message. 4501 * <p><dl> 4502 * <dt><b>Languages:</b></dt> 4503 * <dd>English (default)</dd> 4504 * <dd>Deutsch</dd> 4505 * <dt><b>Final:</b></dt><dd>No</dd> 4506 * </dl></p> 4507 * @param locale The locale of the message to return. 4508 * @param modelInfo Format argument. 4509 * @param classLoaderInfo Format argument. 4510 * @return The text of the {@code <Default Modules Warning>} message for {@code locale}. 4511 * @throws org.jomc.ObjectManagementException if getting the message instance fails. 4512 */ 4513 @SuppressWarnings("unused") 4514 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 4515 private static String getDefaultModulesWarning( final java.util.Locale locale, final java.lang.String modelInfo, final java.lang.String classLoaderInfo ) 4516 { 4517 java.io.BufferedReader reader = null; 4518 boolean suppressExceptionOnClose = true; 4519 4520 try 4521 { 4522 final String message = java.text.MessageFormat.format( java.util.ResourceBundle.getBundle( "org.jomc.ri.DefaultObjectManager", locale ).getString( "Default Modules Warning" ), modelInfo, classLoaderInfo, (Object) null ); 4523 final java.lang.StringBuilder builder = new java.lang.StringBuilder( message.length() ); 4524 reader = new java.io.BufferedReader( new java.io.StringReader( message ) ); 4525 final String lineSeparator = System.getProperty( "line.separator", "\n" ); 4526 4527 String line; 4528 while ( ( line = reader.readLine() ) != null ) 4529 { 4530 builder.append( lineSeparator ).append( line ); 4531 } 4532 4533 suppressExceptionOnClose = false; 4534 return builder.length() > 0 ? builder.substring( lineSeparator.length() ) : ""; 4535 } 4536 catch( final java.lang.ClassCastException e ) 4537 { 4538 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4539 } 4540 catch( final java.lang.IllegalArgumentException e ) 4541 { 4542 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4543 } 4544 catch( final java.util.MissingResourceException e ) 4545 { 4546 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4547 } 4548 catch( final java.io.IOException e ) 4549 { 4550 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4551 } 4552 finally 4553 { 4554 try 4555 { 4556 if( reader != null ) 4557 { 4558 reader.close(); 4559 } 4560 } 4561 catch( final java.io.IOException e ) 4562 { 4563 if( !suppressExceptionOnClose ) 4564 { 4565 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4566 } 4567 } 4568 } 4569 } 4570 /** 4571 * Gets the text of the {@code <Default Scope Info Message>} message. 4572 * <p><dl> 4573 * <dt><b>Languages:</b></dt> 4574 * <dd>English (default)</dd> 4575 * <dd>Deutsch</dd> 4576 * <dt><b>Final:</b></dt><dd>No</dd> 4577 * </dl></p> 4578 * @param locale The locale of the message to return. 4579 * @param scopeIdentifier Format argument. 4580 * @param classLoaderInfo Format argument. 4581 * @return The text of the {@code <Default Scope Info Message>} message for {@code locale}. 4582 * @throws org.jomc.ObjectManagementException if getting the message instance fails. 4583 */ 4584 @SuppressWarnings("unused") 4585 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 4586 private static String getDefaultScopeInfoMessage( final java.util.Locale locale, final java.lang.String scopeIdentifier, final java.lang.String classLoaderInfo ) 4587 { 4588 java.io.BufferedReader reader = null; 4589 boolean suppressExceptionOnClose = true; 4590 4591 try 4592 { 4593 final String message = java.text.MessageFormat.format( java.util.ResourceBundle.getBundle( "org.jomc.ri.DefaultObjectManager", locale ).getString( "Default Scope Info Message" ), scopeIdentifier, classLoaderInfo, (Object) null ); 4594 final java.lang.StringBuilder builder = new java.lang.StringBuilder( message.length() ); 4595 reader = new java.io.BufferedReader( new java.io.StringReader( message ) ); 4596 final String lineSeparator = System.getProperty( "line.separator", "\n" ); 4597 4598 String line; 4599 while ( ( line = reader.readLine() ) != null ) 4600 { 4601 builder.append( lineSeparator ).append( line ); 4602 } 4603 4604 suppressExceptionOnClose = false; 4605 return builder.length() > 0 ? builder.substring( lineSeparator.length() ) : ""; 4606 } 4607 catch( final java.lang.ClassCastException e ) 4608 { 4609 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4610 } 4611 catch( final java.lang.IllegalArgumentException e ) 4612 { 4613 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4614 } 4615 catch( final java.util.MissingResourceException e ) 4616 { 4617 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4618 } 4619 catch( final java.io.IOException e ) 4620 { 4621 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4622 } 4623 finally 4624 { 4625 try 4626 { 4627 if( reader != null ) 4628 { 4629 reader.close(); 4630 } 4631 } 4632 catch( final java.io.IOException e ) 4633 { 4634 if( !suppressExceptionOnClose ) 4635 { 4636 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4637 } 4638 } 4639 } 4640 } 4641 /** 4642 * Gets the text of the {@code <Dependency Cycle Message>} message. 4643 * <p><dl> 4644 * <dt><b>Languages:</b></dt> 4645 * <dd>English (default)</dd> 4646 * <dd>Deutsch</dd> 4647 * <dt><b>Final:</b></dt><dd>No</dd> 4648 * </dl></p> 4649 * @param locale The locale of the message to return. 4650 * @param implementationIdentifier Format argument. 4651 * @return The text of the {@code <Dependency Cycle Message>} message for {@code locale}. 4652 * @throws org.jomc.ObjectManagementException if getting the message instance fails. 4653 */ 4654 @SuppressWarnings("unused") 4655 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 4656 private static String getDependencyCycleMessage( final java.util.Locale locale, final java.lang.String implementationIdentifier ) 4657 { 4658 java.io.BufferedReader reader = null; 4659 boolean suppressExceptionOnClose = true; 4660 4661 try 4662 { 4663 final String message = java.text.MessageFormat.format( java.util.ResourceBundle.getBundle( "org.jomc.ri.DefaultObjectManager", locale ).getString( "Dependency Cycle Message" ), implementationIdentifier, (Object) null ); 4664 final java.lang.StringBuilder builder = new java.lang.StringBuilder( message.length() ); 4665 reader = new java.io.BufferedReader( new java.io.StringReader( message ) ); 4666 final String lineSeparator = System.getProperty( "line.separator", "\n" ); 4667 4668 String line; 4669 while ( ( line = reader.readLine() ) != null ) 4670 { 4671 builder.append( lineSeparator ).append( line ); 4672 } 4673 4674 suppressExceptionOnClose = false; 4675 return builder.length() > 0 ? builder.substring( lineSeparator.length() ) : ""; 4676 } 4677 catch( final java.lang.ClassCastException e ) 4678 { 4679 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4680 } 4681 catch( final java.lang.IllegalArgumentException e ) 4682 { 4683 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4684 } 4685 catch( final java.util.MissingResourceException e ) 4686 { 4687 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4688 } 4689 catch( final java.io.IOException e ) 4690 { 4691 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4692 } 4693 finally 4694 { 4695 try 4696 { 4697 if( reader != null ) 4698 { 4699 reader.close(); 4700 } 4701 } 4702 catch( final java.io.IOException e ) 4703 { 4704 if( !suppressExceptionOnClose ) 4705 { 4706 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4707 } 4708 } 4709 } 4710 } 4711 /** 4712 * Gets the text of the {@code <Ignored Invocation Message>} message. 4713 * <p><dl> 4714 * <dt><b>Languages:</b></dt> 4715 * <dd>English (default)</dd> 4716 * <dd>Deutsch</dd> 4717 * <dt><b>Final:</b></dt><dd>No</dd> 4718 * </dl></p> 4719 * @param locale The locale of the message to return. 4720 * @param implementationIdentifier Format argument. 4721 * @return The text of the {@code <Ignored Invocation Message>} message for {@code locale}. 4722 * @throws org.jomc.ObjectManagementException if getting the message instance fails. 4723 */ 4724 @SuppressWarnings("unused") 4725 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 4726 private static String getIgnoredInvocationMessage( final java.util.Locale locale, final java.lang.String implementationIdentifier ) 4727 { 4728 java.io.BufferedReader reader = null; 4729 boolean suppressExceptionOnClose = true; 4730 4731 try 4732 { 4733 final String message = java.text.MessageFormat.format( java.util.ResourceBundle.getBundle( "org.jomc.ri.DefaultObjectManager", locale ).getString( "Ignored Invocation Message" ), implementationIdentifier, (Object) null ); 4734 final java.lang.StringBuilder builder = new java.lang.StringBuilder( message.length() ); 4735 reader = new java.io.BufferedReader( new java.io.StringReader( message ) ); 4736 final String lineSeparator = System.getProperty( "line.separator", "\n" ); 4737 4738 String line; 4739 while ( ( line = reader.readLine() ) != null ) 4740 { 4741 builder.append( lineSeparator ).append( line ); 4742 } 4743 4744 suppressExceptionOnClose = false; 4745 return builder.length() > 0 ? builder.substring( lineSeparator.length() ) : ""; 4746 } 4747 catch( final java.lang.ClassCastException e ) 4748 { 4749 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4750 } 4751 catch( final java.lang.IllegalArgumentException e ) 4752 { 4753 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4754 } 4755 catch( final java.util.MissingResourceException e ) 4756 { 4757 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4758 } 4759 catch( final java.io.IOException e ) 4760 { 4761 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4762 } 4763 finally 4764 { 4765 try 4766 { 4767 if( reader != null ) 4768 { 4769 reader.close(); 4770 } 4771 } 4772 catch( final java.io.IOException e ) 4773 { 4774 if( !suppressExceptionOnClose ) 4775 { 4776 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4777 } 4778 } 4779 } 4780 } 4781 /** 4782 * Gets the text of the {@code <Ignored Invoker Message>} message. 4783 * <p><dl> 4784 * <dt><b>Languages:</b></dt> 4785 * <dd>English (default)</dd> 4786 * <dd>Deutsch</dd> 4787 * <dt><b>Final:</b></dt><dd>No</dd> 4788 * </dl></p> 4789 * @param locale The locale of the message to return. 4790 * @param implementationIdentifier Format argument. 4791 * @return The text of the {@code <Ignored Invoker Message>} message for {@code locale}. 4792 * @throws org.jomc.ObjectManagementException if getting the message instance fails. 4793 */ 4794 @SuppressWarnings("unused") 4795 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 4796 private static String getIgnoredInvokerMessage( final java.util.Locale locale, final java.lang.String implementationIdentifier ) 4797 { 4798 java.io.BufferedReader reader = null; 4799 boolean suppressExceptionOnClose = true; 4800 4801 try 4802 { 4803 final String message = java.text.MessageFormat.format( java.util.ResourceBundle.getBundle( "org.jomc.ri.DefaultObjectManager", locale ).getString( "Ignored Invoker Message" ), implementationIdentifier, (Object) null ); 4804 final java.lang.StringBuilder builder = new java.lang.StringBuilder( message.length() ); 4805 reader = new java.io.BufferedReader( new java.io.StringReader( message ) ); 4806 final String lineSeparator = System.getProperty( "line.separator", "\n" ); 4807 4808 String line; 4809 while ( ( line = reader.readLine() ) != null ) 4810 { 4811 builder.append( lineSeparator ).append( line ); 4812 } 4813 4814 suppressExceptionOnClose = false; 4815 return builder.length() > 0 ? builder.substring( lineSeparator.length() ) : ""; 4816 } 4817 catch( final java.lang.ClassCastException e ) 4818 { 4819 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4820 } 4821 catch( final java.lang.IllegalArgumentException e ) 4822 { 4823 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4824 } 4825 catch( final java.util.MissingResourceException e ) 4826 { 4827 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4828 } 4829 catch( final java.io.IOException e ) 4830 { 4831 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4832 } 4833 finally 4834 { 4835 try 4836 { 4837 if( reader != null ) 4838 { 4839 reader.close(); 4840 } 4841 } 4842 catch( final java.io.IOException e ) 4843 { 4844 if( !suppressExceptionOnClose ) 4845 { 4846 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4847 } 4848 } 4849 } 4850 } 4851 /** 4852 * Gets the text of the {@code <Illegal Array Specification Message>} message. 4853 * <p><dl> 4854 * <dt><b>Languages:</b></dt> 4855 * <dd>English (default)</dd> 4856 * <dd>Deutsch</dd> 4857 * <dt><b>Final:</b></dt><dd>No</dd> 4858 * </dl></p> 4859 * @param locale The locale of the message to return. 4860 * @param specificationIdentifier Format argument. 4861 * @param specificationMultiplicity Format argument. 4862 * @return The text of the {@code <Illegal Array Specification Message>} message for {@code locale}. 4863 * @throws org.jomc.ObjectManagementException if getting the message instance fails. 4864 */ 4865 @SuppressWarnings("unused") 4866 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 4867 private static String getIllegalArraySpecificationMessage( final java.util.Locale locale, final java.lang.String specificationIdentifier, final java.lang.String specificationMultiplicity ) 4868 { 4869 java.io.BufferedReader reader = null; 4870 boolean suppressExceptionOnClose = true; 4871 4872 try 4873 { 4874 final String message = java.text.MessageFormat.format( java.util.ResourceBundle.getBundle( "org.jomc.ri.DefaultObjectManager", locale ).getString( "Illegal Array Specification Message" ), specificationIdentifier, specificationMultiplicity, (Object) null ); 4875 final java.lang.StringBuilder builder = new java.lang.StringBuilder( message.length() ); 4876 reader = new java.io.BufferedReader( new java.io.StringReader( message ) ); 4877 final String lineSeparator = System.getProperty( "line.separator", "\n" ); 4878 4879 String line; 4880 while ( ( line = reader.readLine() ) != null ) 4881 { 4882 builder.append( lineSeparator ).append( line ); 4883 } 4884 4885 suppressExceptionOnClose = false; 4886 return builder.length() > 0 ? builder.substring( lineSeparator.length() ) : ""; 4887 } 4888 catch( final java.lang.ClassCastException e ) 4889 { 4890 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4891 } 4892 catch( final java.lang.IllegalArgumentException e ) 4893 { 4894 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4895 } 4896 catch( final java.util.MissingResourceException e ) 4897 { 4898 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4899 } 4900 catch( final java.io.IOException e ) 4901 { 4902 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4903 } 4904 finally 4905 { 4906 try 4907 { 4908 if( reader != null ) 4909 { 4910 reader.close(); 4911 } 4912 } 4913 catch( final java.io.IOException e ) 4914 { 4915 if( !suppressExceptionOnClose ) 4916 { 4917 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4918 } 4919 } 4920 } 4921 } 4922 /** 4923 * Gets the text of the {@code <Illegal Object Specification Message>} message. 4924 * <p><dl> 4925 * <dt><b>Languages:</b></dt> 4926 * <dd>English (default)</dd> 4927 * <dd>Deutsch</dd> 4928 * <dt><b>Final:</b></dt><dd>No</dd> 4929 * </dl></p> 4930 * @param locale The locale of the message to return. 4931 * @param specificationIdentifier Format argument. 4932 * @param specificationMultiplicity Format argument. 4933 * @return The text of the {@code <Illegal Object Specification Message>} message for {@code locale}. 4934 * @throws org.jomc.ObjectManagementException if getting the message instance fails. 4935 */ 4936 @SuppressWarnings("unused") 4937 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 4938 private static String getIllegalObjectSpecificationMessage( final java.util.Locale locale, final java.lang.String specificationIdentifier, final java.lang.String specificationMultiplicity ) 4939 { 4940 java.io.BufferedReader reader = null; 4941 boolean suppressExceptionOnClose = true; 4942 4943 try 4944 { 4945 final String message = java.text.MessageFormat.format( java.util.ResourceBundle.getBundle( "org.jomc.ri.DefaultObjectManager", locale ).getString( "Illegal Object Specification Message" ), specificationIdentifier, specificationMultiplicity, (Object) null ); 4946 final java.lang.StringBuilder builder = new java.lang.StringBuilder( message.length() ); 4947 reader = new java.io.BufferedReader( new java.io.StringReader( message ) ); 4948 final String lineSeparator = System.getProperty( "line.separator", "\n" ); 4949 4950 String line; 4951 while ( ( line = reader.readLine() ) != null ) 4952 { 4953 builder.append( lineSeparator ).append( line ); 4954 } 4955 4956 suppressExceptionOnClose = false; 4957 return builder.length() > 0 ? builder.substring( lineSeparator.length() ) : ""; 4958 } 4959 catch( final java.lang.ClassCastException e ) 4960 { 4961 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4962 } 4963 catch( final java.lang.IllegalArgumentException e ) 4964 { 4965 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4966 } 4967 catch( final java.util.MissingResourceException e ) 4968 { 4969 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4970 } 4971 catch( final java.io.IOException e ) 4972 { 4973 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4974 } 4975 finally 4976 { 4977 try 4978 { 4979 if( reader != null ) 4980 { 4981 reader.close(); 4982 } 4983 } 4984 catch( final java.io.IOException e ) 4985 { 4986 if( !suppressExceptionOnClose ) 4987 { 4988 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 4989 } 4990 } 4991 } 4992 } 4993 /** 4994 * Gets the text of the {@code <Implementation Info Message>} message. 4995 * <p><dl> 4996 * <dt><b>Languages:</b></dt> 4997 * <dd>English (default)</dd> 4998 * <dd>Deutsch</dd> 4999 * <dt><b>Final:</b></dt><dd>No</dd> 5000 * </dl></p> 5001 * @param locale The locale of the message to return. 5002 * @param initializationMillis Format argument. 5003 * @return The text of the {@code <Implementation Info Message>} message for {@code locale}. 5004 * @throws org.jomc.ObjectManagementException if getting the message instance fails. 5005 */ 5006 @SuppressWarnings("unused") 5007 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 5008 private static String getImplementationInfoMessage( final java.util.Locale locale, final java.lang.Number initializationMillis ) 5009 { 5010 java.io.BufferedReader reader = null; 5011 boolean suppressExceptionOnClose = true; 5012 5013 try 5014 { 5015 final String message = java.text.MessageFormat.format( java.util.ResourceBundle.getBundle( "org.jomc.ri.DefaultObjectManager", locale ).getString( "Implementation Info Message" ), initializationMillis, (Object) null ); 5016 final java.lang.StringBuilder builder = new java.lang.StringBuilder( message.length() ); 5017 reader = new java.io.BufferedReader( new java.io.StringReader( message ) ); 5018 final String lineSeparator = System.getProperty( "line.separator", "\n" ); 5019 5020 String line; 5021 while ( ( line = reader.readLine() ) != null ) 5022 { 5023 builder.append( lineSeparator ).append( line ); 5024 } 5025 5026 suppressExceptionOnClose = false; 5027 return builder.length() > 0 ? builder.substring( lineSeparator.length() ) : ""; 5028 } 5029 catch( final java.lang.ClassCastException e ) 5030 { 5031 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5032 } 5033 catch( final java.lang.IllegalArgumentException e ) 5034 { 5035 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5036 } 5037 catch( final java.util.MissingResourceException e ) 5038 { 5039 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5040 } 5041 catch( final java.io.IOException e ) 5042 { 5043 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5044 } 5045 finally 5046 { 5047 try 5048 { 5049 if( reader != null ) 5050 { 5051 reader.close(); 5052 } 5053 } 5054 catch( final java.io.IOException e ) 5055 { 5056 if( !suppressExceptionOnClose ) 5057 { 5058 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5059 } 5060 } 5061 } 5062 } 5063 /** 5064 * Gets the text of the {@code <Invoker Info Message>} message. 5065 * <p><dl> 5066 * <dt><b>Languages:</b></dt> 5067 * <dd>English (default)</dd> 5068 * <dd>Deutsch</dd> 5069 * <dt><b>Final:</b></dt><dd>No</dd> 5070 * </dl></p> 5071 * @param locale The locale of the message to return. 5072 * @param implementationIdentifier Format argument. 5073 * @param classLoaderInfo Format argument. 5074 * @return The text of the {@code <Invoker Info Message>} message for {@code locale}. 5075 * @throws org.jomc.ObjectManagementException if getting the message instance fails. 5076 */ 5077 @SuppressWarnings("unused") 5078 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 5079 private static String getInvokerInfoMessage( final java.util.Locale locale, final java.lang.String implementationIdentifier, final java.lang.String classLoaderInfo ) 5080 { 5081 java.io.BufferedReader reader = null; 5082 boolean suppressExceptionOnClose = true; 5083 5084 try 5085 { 5086 final String message = java.text.MessageFormat.format( java.util.ResourceBundle.getBundle( "org.jomc.ri.DefaultObjectManager", locale ).getString( "Invoker Info Message" ), implementationIdentifier, classLoaderInfo, (Object) null ); 5087 final java.lang.StringBuilder builder = new java.lang.StringBuilder( message.length() ); 5088 reader = new java.io.BufferedReader( new java.io.StringReader( message ) ); 5089 final String lineSeparator = System.getProperty( "line.separator", "\n" ); 5090 5091 String line; 5092 while ( ( line = reader.readLine() ) != null ) 5093 { 5094 builder.append( lineSeparator ).append( line ); 5095 } 5096 5097 suppressExceptionOnClose = false; 5098 return builder.length() > 0 ? builder.substring( lineSeparator.length() ) : ""; 5099 } 5100 catch( final java.lang.ClassCastException e ) 5101 { 5102 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5103 } 5104 catch( final java.lang.IllegalArgumentException e ) 5105 { 5106 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5107 } 5108 catch( final java.util.MissingResourceException e ) 5109 { 5110 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5111 } 5112 catch( final java.io.IOException e ) 5113 { 5114 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5115 } 5116 finally 5117 { 5118 try 5119 { 5120 if( reader != null ) 5121 { 5122 reader.close(); 5123 } 5124 } 5125 catch( final java.io.IOException e ) 5126 { 5127 if( !suppressExceptionOnClose ) 5128 { 5129 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5130 } 5131 } 5132 } 5133 } 5134 /** 5135 * Gets the text of the {@code <Listener Info Message>} message. 5136 * <p><dl> 5137 * <dt><b>Languages:</b></dt> 5138 * <dd>English (default)</dd> 5139 * <dd>Deutsch</dd> 5140 * <dt><b>Final:</b></dt><dd>No</dd> 5141 * </dl></p> 5142 * @param locale The locale of the message to return. 5143 * @param implementationIdentifier Format argument. 5144 * @param classLoaderInfo Format argument. 5145 * @return The text of the {@code <Listener Info Message>} message for {@code locale}. 5146 * @throws org.jomc.ObjectManagementException if getting the message instance fails. 5147 */ 5148 @SuppressWarnings("unused") 5149 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 5150 private static String getListenerInfoMessage( final java.util.Locale locale, final java.lang.String implementationIdentifier, final java.lang.String classLoaderInfo ) 5151 { 5152 java.io.BufferedReader reader = null; 5153 boolean suppressExceptionOnClose = true; 5154 5155 try 5156 { 5157 final String message = java.text.MessageFormat.format( java.util.ResourceBundle.getBundle( "org.jomc.ri.DefaultObjectManager", locale ).getString( "Listener Info Message" ), implementationIdentifier, classLoaderInfo, (Object) null ); 5158 final java.lang.StringBuilder builder = new java.lang.StringBuilder( message.length() ); 5159 reader = new java.io.BufferedReader( new java.io.StringReader( message ) ); 5160 final String lineSeparator = System.getProperty( "line.separator", "\n" ); 5161 5162 String line; 5163 while ( ( line = reader.readLine() ) != null ) 5164 { 5165 builder.append( lineSeparator ).append( line ); 5166 } 5167 5168 suppressExceptionOnClose = false; 5169 return builder.length() > 0 ? builder.substring( lineSeparator.length() ) : ""; 5170 } 5171 catch( final java.lang.ClassCastException e ) 5172 { 5173 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5174 } 5175 catch( final java.lang.IllegalArgumentException e ) 5176 { 5177 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5178 } 5179 catch( final java.util.MissingResourceException e ) 5180 { 5181 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5182 } 5183 catch( final java.io.IOException e ) 5184 { 5185 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5186 } 5187 finally 5188 { 5189 try 5190 { 5191 if( reader != null ) 5192 { 5193 reader.close(); 5194 } 5195 } 5196 catch( final java.io.IOException e ) 5197 { 5198 if( !suppressExceptionOnClose ) 5199 { 5200 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5201 } 5202 } 5203 } 5204 } 5205 /** 5206 * Gets the text of the {@code <Locator Info Message>} message. 5207 * <p><dl> 5208 * <dt><b>Languages:</b></dt> 5209 * <dd>English (default)</dd> 5210 * <dd>Deutsch</dd> 5211 * <dt><b>Final:</b></dt><dd>No</dd> 5212 * </dl></p> 5213 * @param locale The locale of the message to return. 5214 * @param implementationIdentifier Format argument. 5215 * @param schemeInfo Format argument. 5216 * @param classLoaderInfo Format argument. 5217 * @return The text of the {@code <Locator Info Message>} message for {@code locale}. 5218 * @throws org.jomc.ObjectManagementException if getting the message instance fails. 5219 */ 5220 @SuppressWarnings("unused") 5221 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 5222 private static String getLocatorInfoMessage( final java.util.Locale locale, final java.lang.String implementationIdentifier, final java.lang.String schemeInfo, final java.lang.String classLoaderInfo ) 5223 { 5224 java.io.BufferedReader reader = null; 5225 boolean suppressExceptionOnClose = true; 5226 5227 try 5228 { 5229 final String message = java.text.MessageFormat.format( java.util.ResourceBundle.getBundle( "org.jomc.ri.DefaultObjectManager", locale ).getString( "Locator Info Message" ), implementationIdentifier, schemeInfo, classLoaderInfo, (Object) null ); 5230 final java.lang.StringBuilder builder = new java.lang.StringBuilder( message.length() ); 5231 reader = new java.io.BufferedReader( new java.io.StringReader( message ) ); 5232 final String lineSeparator = System.getProperty( "line.separator", "\n" ); 5233 5234 String line; 5235 while ( ( line = reader.readLine() ) != null ) 5236 { 5237 builder.append( lineSeparator ).append( line ); 5238 } 5239 5240 suppressExceptionOnClose = false; 5241 return builder.length() > 0 ? builder.substring( lineSeparator.length() ) : ""; 5242 } 5243 catch( final java.lang.ClassCastException e ) 5244 { 5245 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5246 } 5247 catch( final java.lang.IllegalArgumentException e ) 5248 { 5249 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5250 } 5251 catch( final java.util.MissingResourceException e ) 5252 { 5253 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5254 } 5255 catch( final java.io.IOException e ) 5256 { 5257 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5258 } 5259 finally 5260 { 5261 try 5262 { 5263 if( reader != null ) 5264 { 5265 reader.close(); 5266 } 5267 } 5268 catch( final java.io.IOException e ) 5269 { 5270 if( !suppressExceptionOnClose ) 5271 { 5272 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5273 } 5274 } 5275 } 5276 } 5277 /** 5278 * Gets the text of the {@code <Missing Dependency Message>} message. 5279 * <p><dl> 5280 * <dt><b>Languages:</b></dt> 5281 * <dd>English (default)</dd> 5282 * <dd>Deutsch</dd> 5283 * <dt><b>Final:</b></dt><dd>No</dd> 5284 * </dl></p> 5285 * @param locale The locale of the message to return. 5286 * @param implementationIdentifier Format argument. 5287 * @param dependencyName Format argument. 5288 * @return The text of the {@code <Missing Dependency Message>} message for {@code locale}. 5289 * @throws org.jomc.ObjectManagementException if getting the message instance fails. 5290 */ 5291 @SuppressWarnings("unused") 5292 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 5293 private static String getMissingDependencyMessage( final java.util.Locale locale, final java.lang.String implementationIdentifier, final java.lang.String dependencyName ) 5294 { 5295 java.io.BufferedReader reader = null; 5296 boolean suppressExceptionOnClose = true; 5297 5298 try 5299 { 5300 final String message = java.text.MessageFormat.format( java.util.ResourceBundle.getBundle( "org.jomc.ri.DefaultObjectManager", locale ).getString( "Missing Dependency Message" ), implementationIdentifier, dependencyName, (Object) null ); 5301 final java.lang.StringBuilder builder = new java.lang.StringBuilder( message.length() ); 5302 reader = new java.io.BufferedReader( new java.io.StringReader( message ) ); 5303 final String lineSeparator = System.getProperty( "line.separator", "\n" ); 5304 5305 String line; 5306 while ( ( line = reader.readLine() ) != null ) 5307 { 5308 builder.append( lineSeparator ).append( line ); 5309 } 5310 5311 suppressExceptionOnClose = false; 5312 return builder.length() > 0 ? builder.substring( lineSeparator.length() ) : ""; 5313 } 5314 catch( final java.lang.ClassCastException e ) 5315 { 5316 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5317 } 5318 catch( final java.lang.IllegalArgumentException e ) 5319 { 5320 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5321 } 5322 catch( final java.util.MissingResourceException e ) 5323 { 5324 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5325 } 5326 catch( final java.io.IOException e ) 5327 { 5328 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5329 } 5330 finally 5331 { 5332 try 5333 { 5334 if( reader != null ) 5335 { 5336 reader.close(); 5337 } 5338 } 5339 catch( final java.io.IOException e ) 5340 { 5341 if( !suppressExceptionOnClose ) 5342 { 5343 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5344 } 5345 } 5346 } 5347 } 5348 /** 5349 * Gets the text of the {@code <Missing Implementation Message>} message. 5350 * <p><dl> 5351 * <dt><b>Languages:</b></dt> 5352 * <dd>English (default)</dd> 5353 * <dd>Deutsch</dd> 5354 * <dt><b>Final:</b></dt><dd>No</dd> 5355 * </dl></p> 5356 * @param locale The locale of the message to return. 5357 * @param specificationIdentifier Format argument. 5358 * @param implementationName Format argument. 5359 * @return The text of the {@code <Missing Implementation Message>} message for {@code locale}. 5360 * @throws org.jomc.ObjectManagementException if getting the message instance fails. 5361 */ 5362 @SuppressWarnings("unused") 5363 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 5364 private static String getMissingImplementationMessage( final java.util.Locale locale, final java.lang.String specificationIdentifier, final java.lang.String implementationName ) 5365 { 5366 java.io.BufferedReader reader = null; 5367 boolean suppressExceptionOnClose = true; 5368 5369 try 5370 { 5371 final String message = java.text.MessageFormat.format( java.util.ResourceBundle.getBundle( "org.jomc.ri.DefaultObjectManager", locale ).getString( "Missing Implementation Message" ), specificationIdentifier, implementationName, (Object) null ); 5372 final java.lang.StringBuilder builder = new java.lang.StringBuilder( message.length() ); 5373 reader = new java.io.BufferedReader( new java.io.StringReader( message ) ); 5374 final String lineSeparator = System.getProperty( "line.separator", "\n" ); 5375 5376 String line; 5377 while ( ( line = reader.readLine() ) != null ) 5378 { 5379 builder.append( lineSeparator ).append( line ); 5380 } 5381 5382 suppressExceptionOnClose = false; 5383 return builder.length() > 0 ? builder.substring( lineSeparator.length() ) : ""; 5384 } 5385 catch( final java.lang.ClassCastException e ) 5386 { 5387 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5388 } 5389 catch( final java.lang.IllegalArgumentException e ) 5390 { 5391 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5392 } 5393 catch( final java.util.MissingResourceException e ) 5394 { 5395 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5396 } 5397 catch( final java.io.IOException e ) 5398 { 5399 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5400 } 5401 finally 5402 { 5403 try 5404 { 5405 if( reader != null ) 5406 { 5407 reader.close(); 5408 } 5409 } 5410 catch( final java.io.IOException e ) 5411 { 5412 if( !suppressExceptionOnClose ) 5413 { 5414 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5415 } 5416 } 5417 } 5418 } 5419 /** 5420 * Gets the text of the {@code <Missing Implementations Message>} message. 5421 * <p><dl> 5422 * <dt><b>Languages:</b></dt> 5423 * <dd>English (default)</dd> 5424 * <dd>Deutsch</dd> 5425 * <dt><b>Final:</b></dt><dd>No</dd> 5426 * </dl></p> 5427 * @param locale The locale of the message to return. 5428 * @param specificationIdentifier Format argument. 5429 * @return The text of the {@code <Missing Implementations Message>} message for {@code locale}. 5430 * @throws org.jomc.ObjectManagementException if getting the message instance fails. 5431 */ 5432 @SuppressWarnings("unused") 5433 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 5434 private static String getMissingImplementationsMessage( final java.util.Locale locale, final java.lang.String specificationIdentifier ) 5435 { 5436 java.io.BufferedReader reader = null; 5437 boolean suppressExceptionOnClose = true; 5438 5439 try 5440 { 5441 final String message = java.text.MessageFormat.format( java.util.ResourceBundle.getBundle( "org.jomc.ri.DefaultObjectManager", locale ).getString( "Missing Implementations Message" ), specificationIdentifier, (Object) null ); 5442 final java.lang.StringBuilder builder = new java.lang.StringBuilder( message.length() ); 5443 reader = new java.io.BufferedReader( new java.io.StringReader( message ) ); 5444 final String lineSeparator = System.getProperty( "line.separator", "\n" ); 5445 5446 String line; 5447 while ( ( line = reader.readLine() ) != null ) 5448 { 5449 builder.append( lineSeparator ).append( line ); 5450 } 5451 5452 suppressExceptionOnClose = false; 5453 return builder.length() > 0 ? builder.substring( lineSeparator.length() ) : ""; 5454 } 5455 catch( final java.lang.ClassCastException e ) 5456 { 5457 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5458 } 5459 catch( final java.lang.IllegalArgumentException e ) 5460 { 5461 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5462 } 5463 catch( final java.util.MissingResourceException e ) 5464 { 5465 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5466 } 5467 catch( final java.io.IOException e ) 5468 { 5469 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5470 } 5471 finally 5472 { 5473 try 5474 { 5475 if( reader != null ) 5476 { 5477 reader.close(); 5478 } 5479 } 5480 catch( final java.io.IOException e ) 5481 { 5482 if( !suppressExceptionOnClose ) 5483 { 5484 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5485 } 5486 } 5487 } 5488 } 5489 /** 5490 * Gets the text of the {@code <Missing Instance Message>} message. 5491 * <p><dl> 5492 * <dt><b>Languages:</b></dt> 5493 * <dd>English (default)</dd> 5494 * <dd>Deutsch</dd> 5495 * <dt><b>Final:</b></dt><dd>No</dd> 5496 * </dl></p> 5497 * @param locale The locale of the message to return. 5498 * @param implementationIdentifier Format argument. 5499 * @param implementationName Format argument. 5500 * @return The text of the {@code <Missing Instance Message>} message for {@code locale}. 5501 * @throws org.jomc.ObjectManagementException if getting the message instance fails. 5502 */ 5503 @SuppressWarnings("unused") 5504 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 5505 private static String getMissingInstanceMessage( final java.util.Locale locale, final java.lang.String implementationIdentifier, final java.lang.String implementationName ) 5506 { 5507 java.io.BufferedReader reader = null; 5508 boolean suppressExceptionOnClose = true; 5509 5510 try 5511 { 5512 final String message = java.text.MessageFormat.format( java.util.ResourceBundle.getBundle( "org.jomc.ri.DefaultObjectManager", locale ).getString( "Missing Instance Message" ), implementationIdentifier, implementationName, (Object) null ); 5513 final java.lang.StringBuilder builder = new java.lang.StringBuilder( message.length() ); 5514 reader = new java.io.BufferedReader( new java.io.StringReader( message ) ); 5515 final String lineSeparator = System.getProperty( "line.separator", "\n" ); 5516 5517 String line; 5518 while ( ( line = reader.readLine() ) != null ) 5519 { 5520 builder.append( lineSeparator ).append( line ); 5521 } 5522 5523 suppressExceptionOnClose = false; 5524 return builder.length() > 0 ? builder.substring( lineSeparator.length() ) : ""; 5525 } 5526 catch( final java.lang.ClassCastException e ) 5527 { 5528 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5529 } 5530 catch( final java.lang.IllegalArgumentException e ) 5531 { 5532 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5533 } 5534 catch( final java.util.MissingResourceException e ) 5535 { 5536 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5537 } 5538 catch( final java.io.IOException e ) 5539 { 5540 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5541 } 5542 finally 5543 { 5544 try 5545 { 5546 if( reader != null ) 5547 { 5548 reader.close(); 5549 } 5550 } 5551 catch( final java.io.IOException e ) 5552 { 5553 if( !suppressExceptionOnClose ) 5554 { 5555 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5556 } 5557 } 5558 } 5559 } 5560 /** 5561 * Gets the text of the {@code <Missing Locator Message>} message. 5562 * <p><dl> 5563 * <dt><b>Languages:</b></dt> 5564 * <dd>English (default)</dd> 5565 * <dd>Deutsch</dd> 5566 * <dt><b>Final:</b></dt><dd>No</dd> 5567 * </dl></p> 5568 * @param locale The locale of the message to return. 5569 * @param locationInfo Format argument. 5570 * @return The text of the {@code <Missing Locator Message>} message for {@code locale}. 5571 * @throws org.jomc.ObjectManagementException if getting the message instance fails. 5572 */ 5573 @SuppressWarnings("unused") 5574 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 5575 private static String getMissingLocatorMessage( final java.util.Locale locale, final java.lang.String locationInfo ) 5576 { 5577 java.io.BufferedReader reader = null; 5578 boolean suppressExceptionOnClose = true; 5579 5580 try 5581 { 5582 final String message = java.text.MessageFormat.format( java.util.ResourceBundle.getBundle( "org.jomc.ri.DefaultObjectManager", locale ).getString( "Missing Locator Message" ), locationInfo, (Object) null ); 5583 final java.lang.StringBuilder builder = new java.lang.StringBuilder( message.length() ); 5584 reader = new java.io.BufferedReader( new java.io.StringReader( message ) ); 5585 final String lineSeparator = System.getProperty( "line.separator", "\n" ); 5586 5587 String line; 5588 while ( ( line = reader.readLine() ) != null ) 5589 { 5590 builder.append( lineSeparator ).append( line ); 5591 } 5592 5593 suppressExceptionOnClose = false; 5594 return builder.length() > 0 ? builder.substring( lineSeparator.length() ) : ""; 5595 } 5596 catch( final java.lang.ClassCastException e ) 5597 { 5598 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5599 } 5600 catch( final java.lang.IllegalArgumentException e ) 5601 { 5602 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5603 } 5604 catch( final java.util.MissingResourceException e ) 5605 { 5606 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5607 } 5608 catch( final java.io.IOException e ) 5609 { 5610 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5611 } 5612 finally 5613 { 5614 try 5615 { 5616 if( reader != null ) 5617 { 5618 reader.close(); 5619 } 5620 } 5621 catch( final java.io.IOException e ) 5622 { 5623 if( !suppressExceptionOnClose ) 5624 { 5625 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5626 } 5627 } 5628 } 5629 } 5630 /** 5631 * Gets the text of the {@code <Missing Message Message>} message. 5632 * <p><dl> 5633 * <dt><b>Languages:</b></dt> 5634 * <dd>English (default)</dd> 5635 * <dd>Deutsch</dd> 5636 * <dt><b>Final:</b></dt><dd>No</dd> 5637 * </dl></p> 5638 * @param locale The locale of the message to return. 5639 * @param implementationIdentifier Format argument. 5640 * @param messageName Format argument. 5641 * @return The text of the {@code <Missing Message Message>} message for {@code locale}. 5642 * @throws org.jomc.ObjectManagementException if getting the message instance fails. 5643 */ 5644 @SuppressWarnings("unused") 5645 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 5646 private static String getMissingMessageMessage( final java.util.Locale locale, final java.lang.String implementationIdentifier, final java.lang.String messageName ) 5647 { 5648 java.io.BufferedReader reader = null; 5649 boolean suppressExceptionOnClose = true; 5650 5651 try 5652 { 5653 final String message = java.text.MessageFormat.format( java.util.ResourceBundle.getBundle( "org.jomc.ri.DefaultObjectManager", locale ).getString( "Missing Message Message" ), implementationIdentifier, messageName, (Object) null ); 5654 final java.lang.StringBuilder builder = new java.lang.StringBuilder( message.length() ); 5655 reader = new java.io.BufferedReader( new java.io.StringReader( message ) ); 5656 final String lineSeparator = System.getProperty( "line.separator", "\n" ); 5657 5658 String line; 5659 while ( ( line = reader.readLine() ) != null ) 5660 { 5661 builder.append( lineSeparator ).append( line ); 5662 } 5663 5664 suppressExceptionOnClose = false; 5665 return builder.length() > 0 ? builder.substring( lineSeparator.length() ) : ""; 5666 } 5667 catch( final java.lang.ClassCastException e ) 5668 { 5669 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5670 } 5671 catch( final java.lang.IllegalArgumentException e ) 5672 { 5673 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5674 } 5675 catch( final java.util.MissingResourceException e ) 5676 { 5677 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5678 } 5679 catch( final java.io.IOException e ) 5680 { 5681 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5682 } 5683 finally 5684 { 5685 try 5686 { 5687 if( reader != null ) 5688 { 5689 reader.close(); 5690 } 5691 } 5692 catch( final java.io.IOException e ) 5693 { 5694 if( !suppressExceptionOnClose ) 5695 { 5696 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5697 } 5698 } 5699 } 5700 } 5701 /** 5702 * Gets the text of the {@code <Missing Object Instance Message>} message. 5703 * <p><dl> 5704 * <dt><b>Languages:</b></dt> 5705 * <dd>English (default)</dd> 5706 * <dd>Deutsch</dd> 5707 * <dt><b>Final:</b></dt><dd>No</dd> 5708 * </dl></p> 5709 * @param locale The locale of the message to return. 5710 * @param objectInfo Format argument. 5711 * @return The text of the {@code <Missing Object Instance Message>} message for {@code locale}. 5712 * @throws org.jomc.ObjectManagementException if getting the message instance fails. 5713 */ 5714 @SuppressWarnings("unused") 5715 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 5716 private static String getMissingObjectInstanceMessage( final java.util.Locale locale, final java.lang.String objectInfo ) 5717 { 5718 java.io.BufferedReader reader = null; 5719 boolean suppressExceptionOnClose = true; 5720 5721 try 5722 { 5723 final String message = java.text.MessageFormat.format( java.util.ResourceBundle.getBundle( "org.jomc.ri.DefaultObjectManager", locale ).getString( "Missing Object Instance Message" ), objectInfo, (Object) null ); 5724 final java.lang.StringBuilder builder = new java.lang.StringBuilder( message.length() ); 5725 reader = new java.io.BufferedReader( new java.io.StringReader( message ) ); 5726 final String lineSeparator = System.getProperty( "line.separator", "\n" ); 5727 5728 String line; 5729 while ( ( line = reader.readLine() ) != null ) 5730 { 5731 builder.append( lineSeparator ).append( line ); 5732 } 5733 5734 suppressExceptionOnClose = false; 5735 return builder.length() > 0 ? builder.substring( lineSeparator.length() ) : ""; 5736 } 5737 catch( final java.lang.ClassCastException e ) 5738 { 5739 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5740 } 5741 catch( final java.lang.IllegalArgumentException e ) 5742 { 5743 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5744 } 5745 catch( final java.util.MissingResourceException e ) 5746 { 5747 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5748 } 5749 catch( final java.io.IOException e ) 5750 { 5751 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5752 } 5753 finally 5754 { 5755 try 5756 { 5757 if( reader != null ) 5758 { 5759 reader.close(); 5760 } 5761 } 5762 catch( final java.io.IOException e ) 5763 { 5764 if( !suppressExceptionOnClose ) 5765 { 5766 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5767 } 5768 } 5769 } 5770 } 5771 /** 5772 * Gets the text of the {@code <Missing Object Message>} message. 5773 * <p><dl> 5774 * <dt><b>Languages:</b></dt> 5775 * <dd>English (default)</dd> 5776 * <dd>Deutsch</dd> 5777 * <dt><b>Final:</b></dt><dd>No</dd> 5778 * </dl></p> 5779 * @param locale The locale of the message to return. 5780 * @param implementationIdentifier Format argument. 5781 * @param implementationName Format argument. 5782 * @return The text of the {@code <Missing Object Message>} message for {@code locale}. 5783 * @throws org.jomc.ObjectManagementException if getting the message instance fails. 5784 */ 5785 @SuppressWarnings("unused") 5786 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 5787 private static String getMissingObjectMessage( final java.util.Locale locale, final java.lang.String implementationIdentifier, final java.lang.String implementationName ) 5788 { 5789 java.io.BufferedReader reader = null; 5790 boolean suppressExceptionOnClose = true; 5791 5792 try 5793 { 5794 final String message = java.text.MessageFormat.format( java.util.ResourceBundle.getBundle( "org.jomc.ri.DefaultObjectManager", locale ).getString( "Missing Object Message" ), implementationIdentifier, implementationName, (Object) null ); 5795 final java.lang.StringBuilder builder = new java.lang.StringBuilder( message.length() ); 5796 reader = new java.io.BufferedReader( new java.io.StringReader( message ) ); 5797 final String lineSeparator = System.getProperty( "line.separator", "\n" ); 5798 5799 String line; 5800 while ( ( line = reader.readLine() ) != null ) 5801 { 5802 builder.append( lineSeparator ).append( line ); 5803 } 5804 5805 suppressExceptionOnClose = false; 5806 return builder.length() > 0 ? builder.substring( lineSeparator.length() ) : ""; 5807 } 5808 catch( final java.lang.ClassCastException e ) 5809 { 5810 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5811 } 5812 catch( final java.lang.IllegalArgumentException e ) 5813 { 5814 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5815 } 5816 catch( final java.util.MissingResourceException e ) 5817 { 5818 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5819 } 5820 catch( final java.io.IOException e ) 5821 { 5822 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5823 } 5824 finally 5825 { 5826 try 5827 { 5828 if( reader != null ) 5829 { 5830 reader.close(); 5831 } 5832 } 5833 catch( final java.io.IOException e ) 5834 { 5835 if( !suppressExceptionOnClose ) 5836 { 5837 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5838 } 5839 } 5840 } 5841 } 5842 /** 5843 * Gets the text of the {@code <Missing Property Message>} message. 5844 * <p><dl> 5845 * <dt><b>Languages:</b></dt> 5846 * <dd>English (default)</dd> 5847 * <dd>Deutsch</dd> 5848 * <dt><b>Final:</b></dt><dd>No</dd> 5849 * </dl></p> 5850 * @param locale The locale of the message to return. 5851 * @param implementationIdentifier Format argument. 5852 * @param propertyName Format argument. 5853 * @return The text of the {@code <Missing Property Message>} message for {@code locale}. 5854 * @throws org.jomc.ObjectManagementException if getting the message instance fails. 5855 */ 5856 @SuppressWarnings("unused") 5857 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 5858 private static String getMissingPropertyMessage( final java.util.Locale locale, final java.lang.String implementationIdentifier, final java.lang.String propertyName ) 5859 { 5860 java.io.BufferedReader reader = null; 5861 boolean suppressExceptionOnClose = true; 5862 5863 try 5864 { 5865 final String message = java.text.MessageFormat.format( java.util.ResourceBundle.getBundle( "org.jomc.ri.DefaultObjectManager", locale ).getString( "Missing Property Message" ), implementationIdentifier, propertyName, (Object) null ); 5866 final java.lang.StringBuilder builder = new java.lang.StringBuilder( message.length() ); 5867 reader = new java.io.BufferedReader( new java.io.StringReader( message ) ); 5868 final String lineSeparator = System.getProperty( "line.separator", "\n" ); 5869 5870 String line; 5871 while ( ( line = reader.readLine() ) != null ) 5872 { 5873 builder.append( lineSeparator ).append( line ); 5874 } 5875 5876 suppressExceptionOnClose = false; 5877 return builder.length() > 0 ? builder.substring( lineSeparator.length() ) : ""; 5878 } 5879 catch( final java.lang.ClassCastException e ) 5880 { 5881 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5882 } 5883 catch( final java.lang.IllegalArgumentException e ) 5884 { 5885 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5886 } 5887 catch( final java.util.MissingResourceException e ) 5888 { 5889 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5890 } 5891 catch( final java.io.IOException e ) 5892 { 5893 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5894 } 5895 finally 5896 { 5897 try 5898 { 5899 if( reader != null ) 5900 { 5901 reader.close(); 5902 } 5903 } 5904 catch( final java.io.IOException e ) 5905 { 5906 if( !suppressExceptionOnClose ) 5907 { 5908 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5909 } 5910 } 5911 } 5912 } 5913 /** 5914 * Gets the text of the {@code <Missing Scope Message>} message. 5915 * <p><dl> 5916 * <dt><b>Languages:</b></dt> 5917 * <dd>English (default)</dd> 5918 * <dd>Deutsch</dd> 5919 * <dt><b>Final:</b></dt><dd>No</dd> 5920 * </dl></p> 5921 * @param locale The locale of the message to return. 5922 * @param scopeIdentifier Format argument. 5923 * @return The text of the {@code <Missing Scope Message>} message for {@code locale}. 5924 * @throws org.jomc.ObjectManagementException if getting the message instance fails. 5925 */ 5926 @SuppressWarnings("unused") 5927 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 5928 private static String getMissingScopeMessage( final java.util.Locale locale, final java.lang.String scopeIdentifier ) 5929 { 5930 java.io.BufferedReader reader = null; 5931 boolean suppressExceptionOnClose = true; 5932 5933 try 5934 { 5935 final String message = java.text.MessageFormat.format( java.util.ResourceBundle.getBundle( "org.jomc.ri.DefaultObjectManager", locale ).getString( "Missing Scope Message" ), scopeIdentifier, (Object) null ); 5936 final java.lang.StringBuilder builder = new java.lang.StringBuilder( message.length() ); 5937 reader = new java.io.BufferedReader( new java.io.StringReader( message ) ); 5938 final String lineSeparator = System.getProperty( "line.separator", "\n" ); 5939 5940 String line; 5941 while ( ( line = reader.readLine() ) != null ) 5942 { 5943 builder.append( lineSeparator ).append( line ); 5944 } 5945 5946 suppressExceptionOnClose = false; 5947 return builder.length() > 0 ? builder.substring( lineSeparator.length() ) : ""; 5948 } 5949 catch( final java.lang.ClassCastException e ) 5950 { 5951 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5952 } 5953 catch( final java.lang.IllegalArgumentException e ) 5954 { 5955 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5956 } 5957 catch( final java.util.MissingResourceException e ) 5958 { 5959 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5960 } 5961 catch( final java.io.IOException e ) 5962 { 5963 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5964 } 5965 finally 5966 { 5967 try 5968 { 5969 if( reader != null ) 5970 { 5971 reader.close(); 5972 } 5973 } 5974 catch( final java.io.IOException e ) 5975 { 5976 if( !suppressExceptionOnClose ) 5977 { 5978 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 5979 } 5980 } 5981 } 5982 } 5983 /** 5984 * Gets the text of the {@code <Missing Specification Class Message>} message. 5985 * <p><dl> 5986 * <dt><b>Languages:</b></dt> 5987 * <dd>English (default)</dd> 5988 * <dd>Deutsch</dd> 5989 * <dt><b>Final:</b></dt><dd>No</dd> 5990 * </dl></p> 5991 * @param locale The locale of the message to return. 5992 * @param specificationIdentifier Format argument. 5993 * @return The text of the {@code <Missing Specification Class Message>} message for {@code locale}. 5994 * @throws org.jomc.ObjectManagementException if getting the message instance fails. 5995 */ 5996 @SuppressWarnings("unused") 5997 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 5998 private static String getMissingSpecificationClassMessage( final java.util.Locale locale, final java.lang.String specificationIdentifier ) 5999 { 6000 java.io.BufferedReader reader = null; 6001 boolean suppressExceptionOnClose = true; 6002 6003 try 6004 { 6005 final String message = java.text.MessageFormat.format( java.util.ResourceBundle.getBundle( "org.jomc.ri.DefaultObjectManager", locale ).getString( "Missing Specification Class Message" ), specificationIdentifier, (Object) null ); 6006 final java.lang.StringBuilder builder = new java.lang.StringBuilder( message.length() ); 6007 reader = new java.io.BufferedReader( new java.io.StringReader( message ) ); 6008 final String lineSeparator = System.getProperty( "line.separator", "\n" ); 6009 6010 String line; 6011 while ( ( line = reader.readLine() ) != null ) 6012 { 6013 builder.append( lineSeparator ).append( line ); 6014 } 6015 6016 suppressExceptionOnClose = false; 6017 return builder.length() > 0 ? builder.substring( lineSeparator.length() ) : ""; 6018 } 6019 catch( final java.lang.ClassCastException e ) 6020 { 6021 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 6022 } 6023 catch( final java.lang.IllegalArgumentException e ) 6024 { 6025 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 6026 } 6027 catch( final java.util.MissingResourceException e ) 6028 { 6029 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 6030 } 6031 catch( final java.io.IOException e ) 6032 { 6033 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 6034 } 6035 finally 6036 { 6037 try 6038 { 6039 if( reader != null ) 6040 { 6041 reader.close(); 6042 } 6043 } 6044 catch( final java.io.IOException e ) 6045 { 6046 if( !suppressExceptionOnClose ) 6047 { 6048 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 6049 } 6050 } 6051 } 6052 } 6053 /** 6054 * Gets the text of the {@code <Missing Specification Message>} message. 6055 * <p><dl> 6056 * <dt><b>Languages:</b></dt> 6057 * <dd>English (default)</dd> 6058 * <dd>Deutsch</dd> 6059 * <dt><b>Final:</b></dt><dd>No</dd> 6060 * </dl></p> 6061 * @param locale The locale of the message to return. 6062 * @param specificationIdentifier Format argument. 6063 * @return The text of the {@code <Missing Specification Message>} message for {@code locale}. 6064 * @throws org.jomc.ObjectManagementException if getting the message instance fails. 6065 */ 6066 @SuppressWarnings("unused") 6067 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 6068 private static String getMissingSpecificationMessage( final java.util.Locale locale, final java.lang.String specificationIdentifier ) 6069 { 6070 java.io.BufferedReader reader = null; 6071 boolean suppressExceptionOnClose = true; 6072 6073 try 6074 { 6075 final String message = java.text.MessageFormat.format( java.util.ResourceBundle.getBundle( "org.jomc.ri.DefaultObjectManager", locale ).getString( "Missing Specification Message" ), specificationIdentifier, (Object) null ); 6076 final java.lang.StringBuilder builder = new java.lang.StringBuilder( message.length() ); 6077 reader = new java.io.BufferedReader( new java.io.StringReader( message ) ); 6078 final String lineSeparator = System.getProperty( "line.separator", "\n" ); 6079 6080 String line; 6081 while ( ( line = reader.readLine() ) != null ) 6082 { 6083 builder.append( lineSeparator ).append( line ); 6084 } 6085 6086 suppressExceptionOnClose = false; 6087 return builder.length() > 0 ? builder.substring( lineSeparator.length() ) : ""; 6088 } 6089 catch( final java.lang.ClassCastException e ) 6090 { 6091 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 6092 } 6093 catch( final java.lang.IllegalArgumentException e ) 6094 { 6095 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 6096 } 6097 catch( final java.util.MissingResourceException e ) 6098 { 6099 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 6100 } 6101 catch( final java.io.IOException e ) 6102 { 6103 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 6104 } 6105 finally 6106 { 6107 try 6108 { 6109 if( reader != null ) 6110 { 6111 reader.close(); 6112 } 6113 } 6114 catch( final java.io.IOException e ) 6115 { 6116 if( !suppressExceptionOnClose ) 6117 { 6118 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 6119 } 6120 } 6121 } 6122 } 6123 /** 6124 * Gets the text of the {@code <Modules Report Message>} message. 6125 * <p><dl> 6126 * <dt><b>Languages:</b></dt> 6127 * <dd>English (default)</dd> 6128 * <dd>Deutsch</dd> 6129 * <dt><b>Final:</b></dt><dd>No</dd> 6130 * </dl></p> 6131 * @param locale The locale of the message to return. 6132 * @return The text of the {@code <Modules Report Message>} message for {@code locale}. 6133 * @throws org.jomc.ObjectManagementException if getting the message instance fails. 6134 */ 6135 @SuppressWarnings("unused") 6136 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 6137 private static String getModulesReportMessage( final java.util.Locale locale ) 6138 { 6139 java.io.BufferedReader reader = null; 6140 boolean suppressExceptionOnClose = true; 6141 6142 try 6143 { 6144 final String message = java.text.MessageFormat.format( java.util.ResourceBundle.getBundle( "org.jomc.ri.DefaultObjectManager", locale ).getString( "Modules Report Message" ), (Object) null ); 6145 final java.lang.StringBuilder builder = new java.lang.StringBuilder( message.length() ); 6146 reader = new java.io.BufferedReader( new java.io.StringReader( message ) ); 6147 final String lineSeparator = System.getProperty( "line.separator", "\n" ); 6148 6149 String line; 6150 while ( ( line = reader.readLine() ) != null ) 6151 { 6152 builder.append( lineSeparator ).append( line ); 6153 } 6154 6155 suppressExceptionOnClose = false; 6156 return builder.length() > 0 ? builder.substring( lineSeparator.length() ) : ""; 6157 } 6158 catch( final java.lang.ClassCastException e ) 6159 { 6160 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 6161 } 6162 catch( final java.lang.IllegalArgumentException e ) 6163 { 6164 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 6165 } 6166 catch( final java.util.MissingResourceException e ) 6167 { 6168 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 6169 } 6170 catch( final java.io.IOException e ) 6171 { 6172 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 6173 } 6174 finally 6175 { 6176 try 6177 { 6178 if( reader != null ) 6179 { 6180 reader.close(); 6181 } 6182 } 6183 catch( final java.io.IOException e ) 6184 { 6185 if( !suppressExceptionOnClose ) 6186 { 6187 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 6188 } 6189 } 6190 } 6191 } 6192 /** 6193 * Gets the text of the {@code <Scope Contention Failure>} message. 6194 * <p><dl> 6195 * <dt><b>Languages:</b></dt> 6196 * <dd>English (default)</dd> 6197 * <dd>Deutsch</dd> 6198 * <dt><b>Final:</b></dt><dd>No</dd> 6199 * </dl></p> 6200 * @param locale The locale of the message to return. 6201 * @param objectIdentifier Format argument. 6202 * @return The text of the {@code <Scope Contention Failure>} message for {@code locale}. 6203 * @throws org.jomc.ObjectManagementException if getting the message instance fails. 6204 */ 6205 @SuppressWarnings("unused") 6206 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 6207 private static String getScopeContentionFailure( final java.util.Locale locale, final java.lang.String objectIdentifier ) 6208 { 6209 java.io.BufferedReader reader = null; 6210 boolean suppressExceptionOnClose = true; 6211 6212 try 6213 { 6214 final String message = java.text.MessageFormat.format( java.util.ResourceBundle.getBundle( "org.jomc.ri.DefaultObjectManager", locale ).getString( "Scope Contention Failure" ), objectIdentifier, (Object) null ); 6215 final java.lang.StringBuilder builder = new java.lang.StringBuilder( message.length() ); 6216 reader = new java.io.BufferedReader( new java.io.StringReader( message ) ); 6217 final String lineSeparator = System.getProperty( "line.separator", "\n" ); 6218 6219 String line; 6220 while ( ( line = reader.readLine() ) != null ) 6221 { 6222 builder.append( lineSeparator ).append( line ); 6223 } 6224 6225 suppressExceptionOnClose = false; 6226 return builder.length() > 0 ? builder.substring( lineSeparator.length() ) : ""; 6227 } 6228 catch( final java.lang.ClassCastException e ) 6229 { 6230 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 6231 } 6232 catch( final java.lang.IllegalArgumentException e ) 6233 { 6234 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 6235 } 6236 catch( final java.util.MissingResourceException e ) 6237 { 6238 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 6239 } 6240 catch( final java.io.IOException e ) 6241 { 6242 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 6243 } 6244 finally 6245 { 6246 try 6247 { 6248 if( reader != null ) 6249 { 6250 reader.close(); 6251 } 6252 } 6253 catch( final java.io.IOException e ) 6254 { 6255 if( !suppressExceptionOnClose ) 6256 { 6257 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 6258 } 6259 } 6260 } 6261 } 6262 /** 6263 * Gets the text of the {@code <Scope Info Message>} message. 6264 * <p><dl> 6265 * <dt><b>Languages:</b></dt> 6266 * <dd>English (default)</dd> 6267 * <dd>Deutsch</dd> 6268 * <dt><b>Final:</b></dt><dd>No</dd> 6269 * </dl></p> 6270 * @param locale The locale of the message to return. 6271 * @param implementationIdentifier Format argument. 6272 * @param scopeIdentifier Format argument. 6273 * @param classLoaderInfo Format argument. 6274 * @return The text of the {@code <Scope Info Message>} message for {@code locale}. 6275 * @throws org.jomc.ObjectManagementException if getting the message instance fails. 6276 */ 6277 @SuppressWarnings("unused") 6278 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 6279 private static String getScopeInfoMessage( final java.util.Locale locale, final java.lang.String implementationIdentifier, final java.lang.String scopeIdentifier, final java.lang.String classLoaderInfo ) 6280 { 6281 java.io.BufferedReader reader = null; 6282 boolean suppressExceptionOnClose = true; 6283 6284 try 6285 { 6286 final String message = java.text.MessageFormat.format( java.util.ResourceBundle.getBundle( "org.jomc.ri.DefaultObjectManager", locale ).getString( "Scope Info Message" ), implementationIdentifier, scopeIdentifier, classLoaderInfo, (Object) null ); 6287 final java.lang.StringBuilder builder = new java.lang.StringBuilder( message.length() ); 6288 reader = new java.io.BufferedReader( new java.io.StringReader( message ) ); 6289 final String lineSeparator = System.getProperty( "line.separator", "\n" ); 6290 6291 String line; 6292 while ( ( line = reader.readLine() ) != null ) 6293 { 6294 builder.append( lineSeparator ).append( line ); 6295 } 6296 6297 suppressExceptionOnClose = false; 6298 return builder.length() > 0 ? builder.substring( lineSeparator.length() ) : ""; 6299 } 6300 catch( final java.lang.ClassCastException e ) 6301 { 6302 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 6303 } 6304 catch( final java.lang.IllegalArgumentException e ) 6305 { 6306 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 6307 } 6308 catch( final java.util.MissingResourceException e ) 6309 { 6310 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 6311 } 6312 catch( final java.io.IOException e ) 6313 { 6314 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 6315 } 6316 finally 6317 { 6318 try 6319 { 6320 if( reader != null ) 6321 { 6322 reader.close(); 6323 } 6324 } 6325 catch( final java.io.IOException e ) 6326 { 6327 if( !suppressExceptionOnClose ) 6328 { 6329 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 6330 } 6331 } 6332 } 6333 } 6334 /** 6335 * Gets the text of the {@code <Unexpected Dependency Objects Message>} message. 6336 * <p><dl> 6337 * <dt><b>Languages:</b></dt> 6338 * <dd>English (default)</dd> 6339 * <dd>Deutsch</dd> 6340 * <dt><b>Final:</b></dt><dd>No</dd> 6341 * </dl></p> 6342 * @param locale The locale of the message to return. 6343 * @param implementationIdentifier Format argument. 6344 * @param dependencyName Format argument. 6345 * @param expectedNumber Format argument. 6346 * @param computedNumber Format argument. 6347 * @return The text of the {@code <Unexpected Dependency Objects Message>} message for {@code locale}. 6348 * @throws org.jomc.ObjectManagementException if getting the message instance fails. 6349 */ 6350 @SuppressWarnings("unused") 6351 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 6352 private static String getUnexpectedDependencyObjectsMessage( final java.util.Locale locale, final java.lang.String implementationIdentifier, final java.lang.String dependencyName, final java.lang.Number expectedNumber, final java.lang.Number computedNumber ) 6353 { 6354 java.io.BufferedReader reader = null; 6355 boolean suppressExceptionOnClose = true; 6356 6357 try 6358 { 6359 final String message = java.text.MessageFormat.format( java.util.ResourceBundle.getBundle( "org.jomc.ri.DefaultObjectManager", locale ).getString( "Unexpected Dependency Objects Message" ), implementationIdentifier, dependencyName, expectedNumber, computedNumber, (Object) null ); 6360 final java.lang.StringBuilder builder = new java.lang.StringBuilder( message.length() ); 6361 reader = new java.io.BufferedReader( new java.io.StringReader( message ) ); 6362 final String lineSeparator = System.getProperty( "line.separator", "\n" ); 6363 6364 String line; 6365 while ( ( line = reader.readLine() ) != null ) 6366 { 6367 builder.append( lineSeparator ).append( line ); 6368 } 6369 6370 suppressExceptionOnClose = false; 6371 return builder.length() > 0 ? builder.substring( lineSeparator.length() ) : ""; 6372 } 6373 catch( final java.lang.ClassCastException e ) 6374 { 6375 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 6376 } 6377 catch( final java.lang.IllegalArgumentException e ) 6378 { 6379 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 6380 } 6381 catch( final java.util.MissingResourceException e ) 6382 { 6383 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 6384 } 6385 catch( final java.io.IOException e ) 6386 { 6387 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 6388 } 6389 finally 6390 { 6391 try 6392 { 6393 if( reader != null ) 6394 { 6395 reader.close(); 6396 } 6397 } 6398 catch( final java.io.IOException e ) 6399 { 6400 if( !suppressExceptionOnClose ) 6401 { 6402 throw new org.jomc.ObjectManagementException( e.getMessage(), e ); 6403 } 6404 } 6405 } 6406 } 6407 // </editor-fold> 6408 // SECTION-END 6409}