1 21 package oracle.toplink.essentials.sessions; 23 24 import java.util.*; 25 import java.io.*; 26 import oracle.toplink.essentials.descriptors.ClassDescriptor; 27 import oracle.toplink.essentials.exceptions.ValidationException; 28 import oracle.toplink.essentials.internal.sessions.DatabaseSessionImpl; 29 import oracle.toplink.essentials.internal.helper.*; 30 import oracle.toplink.essentials.queryframework.SQLResultSetMapping; 31 import oracle.toplink.essentials.threetier.*; 32 33 46 public class Project implements Serializable, Cloneable { 47 protected String name; 48 protected Login datasourceLogin; 49 protected Map descriptors; 50 protected Vector orderedDescriptors; 51 52 53 protected Vector defaultReadOnlyClasses; 54 55 56 protected Map aliasDescriptors; 57 58 59 protected boolean hasIsolatedClasses; 60 61 protected boolean hasGenericHistorySupport; 62 63 protected boolean hasProxyIndirection; 64 65 protected boolean isPureCMP2Project; 66 67 68 protected Map sqlResultSetMappings; 69 70 74 public Project() { 75 this.name = ""; 76 this.descriptors = new HashMap(); 77 this.defaultReadOnlyClasses = oracle.toplink.essentials.internal.helper.NonSynchronizedVector.newInstance(); 78 this.orderedDescriptors = oracle.toplink.essentials.internal.helper.NonSynchronizedVector.newInstance(); 79 this.hasIsolatedClasses = false; 80 this.hasGenericHistorySupport = false; 81 this.isPureCMP2Project = false; 82 this.hasProxyIndirection = false; 83 } 84 85 90 public Project(Login login) { 91 this(); 92 this.datasourceLogin = login; 93 } 94 95 100 public Project(DatabaseLogin login) { 101 this(); 102 this.datasourceLogin = login; 103 } 104 105 109 public void addDefaultReadOnlyClass(Class readOnlyClass) { 110 getDefaultReadOnlyClasses().addElement(readOnlyClass); 111 } 112 113 117 public void addDescriptor(ClassDescriptor descriptor) { 118 getOrderedDescriptors().add(descriptor); 119 String alias = descriptor.getAlias(); 120 if (alias != null) { 121 addAlias(alias, descriptor); 122 } 123 124 if ((descriptors != null) && !descriptors.isEmpty()) { 126 getDescriptors().put(descriptor.getJavaClass(), descriptor); 127 } 128 } 129 130 133 public void addDescriptor(ClassDescriptor descriptor, DatabaseSessionImpl session) { 134 getOrderedDescriptors().add(descriptor); 135 String alias = descriptor.getAlias(); 136 if (alias != null) { 137 addAlias(alias, descriptor); 138 } 139 140 if ((descriptors != null) && !descriptors.isEmpty()) { 142 getDescriptors().put(descriptor.getJavaClass(), descriptor); 143 } 144 session.initializeDescriptorIfSessionAlive(descriptor); 145 } 146 147 154 public void addDescriptors(Vector descriptors, DatabaseSessionImpl session) { 155 for (Enumeration enumeration = descriptors.elements(); enumeration.hasMoreElements();) { 156 ClassDescriptor descriptor = (ClassDescriptor)enumeration.nextElement(); 157 getDescriptors().put(descriptor.getJavaClass(), descriptor); 158 String alias = descriptor.getAlias(); 159 if (alias != null) { 160 addAlias(alias, descriptor); 161 } 162 } 163 164 if (session.isConnected()) { 165 session.initializeDescriptors(descriptors); 166 session.getCommitManager().initializeCommitOrder(); 168 } 169 170 getOrderedDescriptors().addAll(descriptors); 171 } 172 173 180 public void addDescriptors(Project project, DatabaseSessionImpl session) { 181 Iterator descriptors = project.getDescriptors().values().iterator(); 182 while (descriptors.hasNext()) { 183 ClassDescriptor descriptor = (ClassDescriptor)descriptors.next(); 184 getDescriptors().put(descriptor.getJavaClass(), descriptor); 185 String alias = descriptor.getAlias(); 186 if (alias != null) { 187 addAlias(alias, descriptor); 188 } 189 } 190 191 if (session.isConnected()) { 192 session.initializeDescriptors(project.getDescriptors()); 193 session.getCommitManager().initializeCommitOrder(); 195 } 196 197 getOrderedDescriptors().addAll(project.getOrderedDescriptors()); 198 } 199 200 206 public void addSQLResultSetMapping(SQLResultSetMapping sqlResultSetMapping){ 207 if (sqlResultSetMapping == null || sqlResultSetMapping.getName() == null){ 208 return; 209 } 210 if (this.sqlResultSetMappings == null){ 211 this.sqlResultSetMappings = new HashMap(); 212 } 213 this.sqlResultSetMappings.put(sqlResultSetMapping.getName(), sqlResultSetMapping); 214 } 215 216 220 public void conformAllDescriptors() { 221 Iterator descriptors = getDescriptors().values().iterator(); 222 while (descriptors.hasNext()) { 223 ClassDescriptor descriptor = (ClassDescriptor)descriptors.next(); 224 descriptor.setShouldAlwaysConformResultsInUnitOfWork(true); 225 } 226 } 227 228 234 public void convertClassNamesToClasses(ClassLoader classLoader){ 235 Iterator ordered = orderedDescriptors.iterator(); 236 while (ordered.hasNext()){ 237 ClassDescriptor descriptor = (ClassDescriptor)ordered.next(); 238 descriptor.convertClassNamesToClasses(classLoader); 239 } 240 if (sqlResultSetMappings != null) { 242 for (Iterator mappingIt = sqlResultSetMappings.keySet().iterator(); mappingIt.hasNext();) { 243 SQLResultSetMapping mapping = (SQLResultSetMapping) sqlResultSetMappings.get(mappingIt.next()); 244 mapping.convertClassNamesToClasses(classLoader); 245 } 246 } 247 } 248 249 253 public void assumeExistenceForDoesExist() { 254 Iterator descriptors = getDescriptors().values().iterator(); 255 while (descriptors.hasNext()) { 256 ClassDescriptor descriptor = (ClassDescriptor)descriptors.next(); 257 descriptor.getQueryManager().assumeExistenceForDoesExist(); 258 } 259 } 260 261 265 public void checkCacheForDoesExist() { 266 Iterator descriptors = getDescriptors().values().iterator(); 267 while (descriptors.hasNext()) { 268 ClassDescriptor descriptor = (ClassDescriptor)descriptors.next(); 269 descriptor.getQueryManager().checkCacheForDoesExist(); 270 } 271 } 272 273 277 public void checkDatabaseForDoesExist() { 278 Iterator descriptors = getDescriptors().values().iterator(); 279 while (descriptors.hasNext()) { 280 ClassDescriptor descriptor = (ClassDescriptor)descriptors.next(); 281 descriptor.getQueryManager().checkDatabaseForDoesExist(); 282 } 283 } 284 285 289 public Object clone() { 290 try { 291 return super.clone(); 292 } catch (Exception exception) { 293 return null; 294 } 295 } 296 297 304 public DatabaseSession createDatabaseSession() { 305 return new DatabaseSessionImpl(this); 306 } 307 308 314 public Server createServerSession() { 315 return new ServerSession(this); 316 } 317 318 325 public Server createServerSession(int min, int max) { 326 return new ServerSession(this, min, max); 327 } 328 329 337 public Server createServerSession(ConnectionPolicy defaultConnectionPolicy) { 338 return new ServerSession(this, defaultConnectionPolicy); 339 } 340 341 345 public Vector getDefaultReadOnlyClasses() { 346 return defaultReadOnlyClasses; 347 } 348 349 353 public ClassDescriptor getClassDescriptor(Class theClass) { 354 ClassDescriptor desc = getDescriptor(theClass); 355 if (desc instanceof ClassDescriptor) { 356 return (ClassDescriptor)desc; 357 } else { 358 throw ValidationException.cannotCastToClass(desc, desc.getClass(), ClassDescriptor.class); 359 } 360 } 361 362 366 public ClassDescriptor getDescriptor(Class theClass) { 367 return (ClassDescriptor)getDescriptors().get(theClass); 368 } 369 370 374 public Map getDescriptors() { 375 if (descriptors.isEmpty() && (!orderedDescriptors.isEmpty())) { 377 for (Iterator iterator = orderedDescriptors.iterator(); iterator.hasNext();) { 378 ClassDescriptor descriptor = (ClassDescriptor)iterator.next(); 379 descriptors.put(descriptor.getJavaClass(), descriptor); 380 } 381 } 382 return descriptors; 383 } 384 385 390 public Vector getOrderedDescriptors() { 391 return orderedDescriptors; 392 } 393 394 399 public void setOrderedDescriptors(Vector orderedDescriptors) { 400 this.orderedDescriptors = orderedDescriptors; 401 for (Enumeration e = orderedDescriptors.elements(); e.hasMoreElements();) { 402 ClassDescriptor descriptor = (ClassDescriptor)e.nextElement(); 403 String alias = descriptor.getAlias(); 404 if (alias != null) { 405 addAlias(alias, descriptor); 406 } 407 } 408 } 409 410 417 public DatabaseLogin getLogin() { 418 return (DatabaseLogin)datasourceLogin; 419 } 420 421 426 public Login getDatasourceLogin() { 427 return datasourceLogin; 428 } 429 430 434 public String getName() { 435 return name; 436 } 437 438 444 public SQLResultSetMapping getSQLResultSetMapping(String sqlResultSetMapping){ 445 if (sqlResultSetMapping == null || this.sqlResultSetMappings == null){ 446 return null; 447 } 448 return (SQLResultSetMapping)this.sqlResultSetMappings.get(sqlResultSetMapping); 449 } 450 451 455 public boolean hasGenericHistorySupport() { 456 return hasGenericHistorySupport; 457 } 458 459 463 public void setDefaultReadOnlyClasses(Vector newValue) { 464 this.defaultReadOnlyClasses = (Vector)newValue.clone(); 465 } 466 467 471 public void setDescriptors(Map descriptors) { 472 this.descriptors = descriptors; 473 for (Iterator iterator = descriptors.values().iterator(); iterator.hasNext();) { 474 ClassDescriptor descriptor = (ClassDescriptor)iterator.next(); 475 String alias = descriptor.getAlias(); 476 if (alias != null) { 477 addAlias(alias, descriptor); 478 } 479 } 480 } 481 482 486 public void setHasGenericHistorySupport(boolean hasGenericHistorySupport) { 487 this.hasGenericHistorySupport = hasGenericHistorySupport; 488 } 489 490 496 public boolean isPureCMP2Project() { 497 return isPureCMP2Project; 498 } 499 500 506 public void setIsPureCMP2Project(boolean isPureCMP2Project) { 507 this.isPureCMP2Project = isPureCMP2Project; 508 } 509 510 516 public boolean hasIsolatedClasses() { 517 return hasIsolatedClasses; 518 } 519 520 525 public void setHasIsolatedClasses(boolean hasIsolatedClasses) { 526 this.hasIsolatedClasses = hasIsolatedClasses; 527 } 528 529 535 public boolean hasProxyIndirection() { 536 return this.hasProxyIndirection; 537 } 538 539 544 public void setHasProxyIndirection(boolean hasProxyIndirection) { 545 this.hasProxyIndirection = hasProxyIndirection; 546 } 547 548 552 public void setLogin(DatabaseLogin datasourceLogin) { 553 this.datasourceLogin = datasourceLogin; 554 } 555 556 560 public void setLogin(Login datasourceLogin) { 561 this.datasourceLogin = datasourceLogin; 562 } 563 564 568 public void setDatasourceLogin(Login datasourceLogin) { 569 this.datasourceLogin = datasourceLogin; 570 } 571 572 576 public void setName(String name) { 577 this.name = name; 578 } 579 580 583 public String toString() { 584 return Helper.getShortClassName(getClass()) + "(" + getName() + ")"; 585 } 586 587 591 public void useCacheIdentityMap() { 592 Iterator descriptors = getDescriptors().values().iterator(); 593 while (descriptors.hasNext()) { 594 ClassDescriptor descriptor = (ClassDescriptor)descriptors.next(); 595 descriptor.useCacheIdentityMap(); 596 } 597 } 598 599 603 public void useCacheIdentityMap(int cacheSize) { 604 Iterator descriptors = getDescriptors().values().iterator(); 605 while (descriptors.hasNext()) { 606 ClassDescriptor descriptor = (ClassDescriptor)descriptors.next(); 607 descriptor.useCacheIdentityMap(); 608 descriptor.setIdentityMapSize(cacheSize); 609 } 610 } 611 612 616 public void useFullIdentityMap() { 617 Iterator descriptors = getDescriptors().values().iterator(); 618 while (descriptors.hasNext()) { 619 ClassDescriptor descriptor = (ClassDescriptor)descriptors.next(); 620 descriptor.useFullIdentityMap(); 621 } 622 } 623 624 628 public void useFullIdentityMap(int initialCacheSize) { 629 Iterator descriptors = getDescriptors().values().iterator(); 630 while (descriptors.hasNext()) { 631 ClassDescriptor descriptor = (ClassDescriptor)descriptors.next(); 632 descriptor.useFullIdentityMap(); 633 descriptor.setIdentityMapSize(initialCacheSize); 634 } 635 } 636 637 641 public void useNoIdentityMap() { 642 Iterator descriptors = getDescriptors().values().iterator(); 643 while (descriptors.hasNext()) { 644 ClassDescriptor descriptor = (ClassDescriptor)descriptors.next(); 645 descriptor.useNoIdentityMap(); 646 } 647 } 648 649 653 public void useSoftCacheWeakIdentityMap() { 654 Iterator descriptors = getDescriptors().values().iterator(); 655 while (descriptors.hasNext()) { 656 ClassDescriptor descriptor = (ClassDescriptor)descriptors.next(); 657 descriptor.useSoftCacheWeakIdentityMap(); 658 } 659 } 660 661 665 public void useSoftCacheWeakIdentityMap(int cacheSize) { 666 Iterator descriptors = getDescriptors().values().iterator(); 667 while (descriptors.hasNext()) { 668 ClassDescriptor descriptor = (ClassDescriptor)descriptors.next(); 669 descriptor.useSoftCacheWeakIdentityMap(); 670 descriptor.setIdentityMapSize(cacheSize); 671 } 672 } 673 674 678 public boolean usesOptimisticLocking() { 679 Iterator descriptors = getDescriptors().values().iterator(); 680 while (descriptors.hasNext()) { 681 ClassDescriptor descriptor = (ClassDescriptor)descriptors.next(); 682 if (descriptor.usesOptimisticLocking()) { 683 return true; 684 } 685 } 686 return false; 687 } 688 689 693 public boolean usesSequencing() { 694 Iterator descriptors = getDescriptors().values().iterator(); 695 while (descriptors.hasNext()) { 696 ClassDescriptor descriptor = (ClassDescriptor)descriptors.next(); 697 if (descriptor.usesSequenceNumbers()) { 698 return true; 699 } 700 } 701 return false; 702 } 703 704 708 public void useWeakIdentityMap() { 709 Iterator descriptors = getDescriptors().values().iterator(); 710 while (descriptors.hasNext()) { 711 ClassDescriptor descriptor = (ClassDescriptor)descriptors.next(); 712 descriptor.useWeakIdentityMap(); 713 } 714 } 715 716 720 public void useWeakIdentityMap(int initialCacheSize) { 721 Iterator descriptors = getDescriptors().values().iterator(); 722 while (descriptors.hasNext()) { 723 ClassDescriptor descriptor = (ClassDescriptor)descriptors.next(); 724 descriptor.useWeakIdentityMap(); 725 descriptor.setIdentityMapSize(initialCacheSize); 726 } 727 } 728 729 735 public void applyLogin() { 736 } 738 739 743 public Map getAliasDescriptors() { 744 return aliasDescriptors; 745 } 746 747 751 public void addAlias(String alias, ClassDescriptor descriptor) { 752 if (aliasDescriptors == null) { 753 aliasDescriptors = new Hashtable(10); 754 } 755 aliasDescriptors.put(alias, descriptor); 756 } 757 758 763 public void addAliasesFromProject(oracle.toplink.essentials.sessions.Project project) { 764 Iterator descriptors = getDescriptors().values().iterator(); 765 while (descriptors.hasNext()) { 766 ClassDescriptor descriptor = (ClassDescriptor)descriptors.next(); 767 if (descriptor.getAlias() != null) { 768 addAlias(descriptor.getAlias(), descriptor); 769 } 770 } 771 } 772 773 777 public ClassDescriptor getClassDescriptorForAlias(String alias) { 778 ClassDescriptor d = null; 779 if (aliasDescriptors != null) { 780 d = (ClassDescriptor)aliasDescriptors.get(alias); 781 } 782 return d; 783 } 784 785 791 public ClassDescriptor getDescriptorForAlias(String alias) { 792 ClassDescriptor d = null; 793 if (aliasDescriptors != null) { 794 d = (ClassDescriptor)aliasDescriptors.get(alias); 795 } 796 return d; 797 } 798 799 803 public void setAliasDescriptors(Map aHashtable) { 804 aliasDescriptors = aHashtable; 805 } 806 } 807 | Popular Tags |