1 21 package oracle.toplink.essentials.sessions; 23 24 import java.util.*; 25 import java.io.*; 26 import oracle.toplink.essentials.queryframework.*; 27 import oracle.toplink.essentials.internal.databaseaccess.*; 28 import oracle.toplink.essentials.internal.sessions.*; 29 import oracle.toplink.essentials.threetier.ClientSession; 30 import oracle.toplink.essentials.sessions.SessionProfiler; 31 32 39 public class SessionEventManager implements Cloneable , Serializable { 40 protected Vector listeners; 41 protected Session session; 42 43 47 public SessionEventManager() { 48 this.listeners = oracle.toplink.essentials.internal.helper.NonSynchronizedVector.newInstance(); 49 } 50 51 55 public SessionEventManager(Session session) { 56 this.listeners = oracle.toplink.essentials.internal.helper.NonSynchronizedVector.newInstance(); 57 this.session = session; 58 } 59 60 66 public void addListener(SessionEventListener listener) { 67 getListeners().addElement(listener); 68 } 69 70 73 public Object clone() { 74 try { 75 return super.clone(); 76 } catch (Exception e) { 77 return null; 78 } 79 } 80 81 84 public SessionEventManager clone(Session newSession) { 85 SessionEventManager newManager = (SessionEventManager)clone(); 86 newManager.setSession(newSession); 87 Vector newListeners = (Vector)(this.getListeners().clone()); 88 newManager.setListeners(newListeners); 89 return newManager; 90 } 91 92 97 public Vector getListeners() { 98 return listeners; 99 } 100 101 105 public Session getSession() { 106 return session; 107 } 108 109 113 public boolean hasListeners() { 114 return !getListeners().isEmpty(); 115 } 116 117 121 public void missingDescriptor(Class missingClass) { 122 if (!hasListeners()) { 123 return; 124 } 125 startOperationProfile(); 126 SessionEvent event = new SessionEvent(SessionEvent.MissingDescriptor, getSession()); 127 event.setResult(missingClass); 128 for (Enumeration listenerEnum = getListeners().elements(); listenerEnum.hasMoreElements();) { 129 ((SessionEventListener)listenerEnum.nextElement()).missingDescriptor(event); 130 } 131 endOperationProfile(); 132 } 133 134 138 public void moreRowsDetected(DatabaseCall call) { 139 if (!hasListeners()) { 140 return; 141 } 142 startOperationProfile(); 143 SessionEvent event = new SessionEvent(SessionEvent.MoreRowsDetected, getSession()); 144 event.setResult(call); 145 for (Enumeration listenerEnum = getListeners().elements(); listenerEnum.hasMoreElements();) { 146 ((SessionEventListener)listenerEnum.nextElement()).moreRowsDetected(event); 147 } 148 endOperationProfile(); 149 } 150 151 155 public void noRowsModified(ModifyQuery query, Object object) { 156 if (!hasListeners()) { 157 return; 158 } 159 startOperationProfile(); 160 SessionEvent event = new SessionEvent(SessionEvent.NoRowsModified, getSession()); 161 event.setQuery(query); 162 event.setResult(object); 163 for (Enumeration listenerEnum = getListeners().elements(); listenerEnum.hasMoreElements();) { 164 ((SessionEventListener)listenerEnum.nextElement()).noRowsModified(event); 165 } 166 endOperationProfile(); 167 } 168 169 173 public void outputParametersDetected(AbstractRecord outputRow, DatasourceCall call) { 174 if (!hasListeners()) { 175 return; 176 } 177 startOperationProfile(); 178 SessionEvent event = new SessionEvent(SessionEvent.OutputParametersDetected, getSession()); 179 event.setResult(outputRow); 180 event.setProperty("call", call); 181 event.setQuery(call.getQuery()); 182 for (Enumeration listenerEnum = getListeners().elements(); listenerEnum.hasMoreElements();) { 183 ((SessionEventListener)listenerEnum.nextElement()).outputParametersDetected(event); 184 } 185 endOperationProfile(); 186 } 187 188 192 public void postAcquireClientSession() { 193 if (!hasListeners()) { 194 return; 195 } 196 startOperationProfile(); 197 SessionEvent event = new SessionEvent(SessionEvent.PostAcquireClientSession, getSession()); 198 for (Enumeration listenerEnum = getListeners().elements(); listenerEnum.hasMoreElements();) { 199 ((SessionEventListener)listenerEnum.nextElement()).postAcquireClientSession(event); 200 } 201 endOperationProfile(); 202 } 203 204 208 public void postAcquireConnection(Accessor accessor) { 209 if (!hasListeners()) { 210 return; 211 } 212 startOperationProfile(); 213 SessionEvent event = new SessionEvent(SessionEvent.PostAcquireConnection, getSession()); 214 event.setResult(accessor); 215 for (Enumeration listenerEnum = getListeners().elements(); listenerEnum.hasMoreElements();) { 216 ((SessionEventListener)listenerEnum.nextElement()).postAcquireConnection(event); 217 } 218 endOperationProfile(); 219 } 220 221 225 public void postAcquireExclusiveConnection(ClientSession clientSession, Accessor accessor) { 226 if (!hasListeners()) { 227 return; 228 } 229 230 SessionEvent event = new SessionEvent(SessionEvent.PostAcquireExclusiveConnection, clientSession); 231 event.setResult(accessor); 232 for (Enumeration listenerEnum = getListeners().elements(); listenerEnum.hasMoreElements();) { 233 ((SessionEventListener)listenerEnum.nextElement()).postAcquireExclusiveConnection(event); 234 } 235 } 236 237 241 public void postAcquireUnitOfWork() { 242 if (!hasListeners()) { 243 return; 244 } 245 startOperationProfile(); 246 SessionEvent event = new SessionEvent(SessionEvent.PostAcquireUnitOfWork, getSession()); 247 for (Enumeration listenerEnum = getListeners().elements(); listenerEnum.hasMoreElements();) { 248 ((SessionEventListener)listenerEnum.nextElement()).postAcquireUnitOfWork(event); 249 } 250 endOperationProfile(); 251 } 252 253 257 public void postBeginTransaction() { 258 if (!hasListeners()) { 259 return; 260 } 261 startOperationProfile(); 262 SessionEvent event = new SessionEvent(SessionEvent.PostBeginTransaction, getSession()); 263 for (Enumeration listenerEnum = getListeners().elements(); listenerEnum.hasMoreElements();) { 264 ((SessionEventListener)listenerEnum.nextElement()).postBeginTransaction(event); 265 } 266 endOperationProfile(); 267 } 268 269 273 public void postCommitTransaction() { 274 if (!hasListeners()) { 275 return; 276 } 277 startOperationProfile(); 278 SessionEvent event = new SessionEvent(SessionEvent.PostCommitTransaction, getSession()); 279 for (Enumeration listenerEnum = getListeners().elements(); listenerEnum.hasMoreElements();) { 280 ((SessionEventListener)listenerEnum.nextElement()).postCommitTransaction(event); 281 } 282 endOperationProfile(); 283 } 284 285 289 public void postCommitUnitOfWork() { 290 if (!hasListeners()) { 291 return; 292 } 293 startOperationProfile(); 294 SessionEvent event = new SessionEvent(SessionEvent.PostCommitUnitOfWork, getSession()); 295 for (Enumeration listenerEnum = getListeners().elements(); listenerEnum.hasMoreElements();) { 296 ((SessionEventListener)listenerEnum.nextElement()).postCommitUnitOfWork(event); 297 } 298 endOperationProfile(); 299 } 300 301 305 public void postConnect(Accessor accessor) { 306 if (!hasListeners()) { 307 return; 308 } 309 startOperationProfile(); 310 SessionEvent event = new SessionEvent(SessionEvent.PostConnect, getSession()); 311 event.setResult(accessor); 312 for (Enumeration listenerEnum = getListeners().elements(); listenerEnum.hasMoreElements();) { 313 ((SessionEventListener)listenerEnum.nextElement()).postConnect(event); 314 } 315 endOperationProfile(); 316 } 317 318 322 public void postExecuteQuery(DatabaseQuery query, Object result) { 323 if (!hasListeners()) { 324 return; 325 } 326 startOperationProfile(); 327 SessionEvent event = new SessionEvent(SessionEvent.PostExecuteQuery, getSession()); 328 event.setQuery(query); 329 event.setResult(result); 330 for (Enumeration listenerEnum = getListeners().elements(); listenerEnum.hasMoreElements();) { 331 ((SessionEventListener)listenerEnum.nextElement()).postExecuteQuery(event); 332 } 333 endOperationProfile(); 334 } 335 336 340 public void postReleaseClientSession() { 341 if (!hasListeners()) { 342 return; 343 } 344 startOperationProfile(); 345 SessionEvent event = new SessionEvent(SessionEvent.PostReleaseClientSession, getSession()); 346 for (Enumeration listenerEnum = getListeners().elements(); listenerEnum.hasMoreElements();) { 347 ((SessionEventListener)listenerEnum.nextElement()).postReleaseClientSession(event); 348 } 349 endOperationProfile(); 350 } 351 352 356 public void postReleaseUnitOfWork() { 357 if (!hasListeners()) { 358 return; 359 } 360 startOperationProfile(); 361 SessionEvent event = new SessionEvent(SessionEvent.PostReleaseUnitOfWork, getSession()); 362 for (Enumeration listenerEnum = getListeners().elements(); listenerEnum.hasMoreElements();) { 363 ((SessionEventListener)listenerEnum.nextElement()).postReleaseUnitOfWork(event); 364 } 365 endOperationProfile(); 366 } 367 368 372 public void postResumeUnitOfWork() { 373 if (!hasListeners()) { 374 return; 375 } 376 startOperationProfile(); 377 SessionEvent event = new SessionEvent(SessionEvent.PostResumeUnitOfWork, getSession()); 378 for (Enumeration listenerEnum = getListeners().elements(); listenerEnum.hasMoreElements();) { 379 ((SessionEventListener)listenerEnum.nextElement()).postResumeUnitOfWork(event); 380 } 381 endOperationProfile(); 382 } 383 384 388 public void postRollbackTransaction() { 389 if (!hasListeners()) { 390 return; 391 } 392 startOperationProfile(); 393 SessionEvent event = new SessionEvent(SessionEvent.PostRollbackTransaction, getSession()); 394 for (Enumeration listenerEnum = getListeners().elements(); listenerEnum.hasMoreElements();) { 395 ((SessionEventListener)listenerEnum.nextElement()).postRollbackTransaction(event); 396 } 397 endOperationProfile(); 398 } 399 400 404 public void postDistributedMergeUnitOfWorkChangeSet(UnitOfWorkChangeSet changeSet) { 405 if (!hasListeners()) { 406 return; 407 } 408 startOperationProfile(); 409 SessionEvent event = new SessionEvent(SessionEvent.PostDistributedMergeUnitOfWorkChangeSet, getSession()); 410 event.setProperty("UnitOfWorkChangeSet", changeSet); 411 for (Enumeration listenerEnum = getListeners().elements(); listenerEnum.hasMoreElements();) { 412 ((SessionEventListener)listenerEnum.nextElement()).postDistributedMergeUnitOfWorkChangeSet(event); 413 } 414 endOperationProfile(); 415 } 416 417 421 public void postMergeUnitOfWorkChangeSet(UnitOfWorkChangeSet changeSet) { 422 if (!hasListeners()) { 423 return; 424 } 425 startOperationProfile(); 426 SessionEvent event = new SessionEvent(SessionEvent.PostMergeUnitOfWorkChangeSet, getSession()); 427 event.setProperty("UnitOfWorkChangeSet", changeSet); 428 for (Enumeration listenerEnum = getListeners().elements(); listenerEnum.hasMoreElements();) { 429 ((SessionEventListener)listenerEnum.nextElement()).postMergeUnitOfWorkChangeSet(event); 430 } 431 endOperationProfile(); 432 } 433 434 438 public void preBeginTransaction() { 439 if (!hasListeners()) { 440 return; 441 } 442 startOperationProfile(); 443 SessionEvent event = new SessionEvent(SessionEvent.PreBeginTransaction, getSession()); 444 for (Enumeration listenerEnum = getListeners().elements(); listenerEnum.hasMoreElements();) { 445 ((SessionEventListener)listenerEnum.nextElement()).preBeginTransaction(event); 446 } 447 endOperationProfile(); 448 } 449 450 454 public void preCalculateUnitOfWorkChangeSet() { 455 if (!hasListeners()) { 456 return; 457 } 458 startOperationProfile(); 459 SessionEvent event = new SessionEvent(SessionEvent.PreCalculateUnitOfWorkChangeSet, getSession()); 460 for (Enumeration listenerEnum = getListeners().elements(); listenerEnum.hasMoreElements();) { 461 ((SessionEventListener)listenerEnum.nextElement()).preCalculateUnitOfWorkChangeSet(event); 462 } 463 endOperationProfile(); 464 } 465 466 470 public void postCalculateUnitOfWorkChangeSet(UnitOfWorkChangeSet changeSet) { 471 if (!hasListeners()) { 472 return; 473 } 474 startOperationProfile(); 475 SessionEvent event = new SessionEvent(SessionEvent.PostCalculateUnitOfWorkChangeSet, getSession()); 476 event.setProperty("UnitOfWorkChangeSet", changeSet); 477 for (Enumeration listenerEnum = getListeners().elements(); listenerEnum.hasMoreElements();) { 478 ((SessionEventListener)listenerEnum.nextElement()).postCalculateUnitOfWorkChangeSet(event); 479 } 480 endOperationProfile(); 481 } 482 483 487 public void preCommitTransaction() { 488 if (!hasListeners()) { 489 return; 490 } 491 startOperationProfile(); 492 SessionEvent event = new SessionEvent(SessionEvent.PreCommitTransaction, getSession()); 493 for (Enumeration listenerEnum = getListeners().elements(); listenerEnum.hasMoreElements();) { 494 ((SessionEventListener)listenerEnum.nextElement()).preCommitTransaction(event); 495 } 496 endOperationProfile(); 497 } 498 499 503 public void preCommitUnitOfWork() { 504 if (!hasListeners()) { 505 return; 506 } 507 startOperationProfile(); 508 SessionEvent event = new SessionEvent(SessionEvent.PreCommitUnitOfWork, getSession()); 509 for (Enumeration listenerEnum = getListeners().elements(); listenerEnum.hasMoreElements();) { 510 ((SessionEventListener)listenerEnum.nextElement()).preCommitUnitOfWork(event); 511 } 512 endOperationProfile(); 513 } 514 515 519 public void preExecuteQuery(DatabaseQuery query) { 520 if (!hasListeners()) { 521 return; 522 } 523 startOperationProfile(); 524 SessionEvent event = new SessionEvent(SessionEvent.PreExecuteQuery, getSession()); 525 event.setQuery(query); 526 for (Enumeration listenerEnum = getListeners().elements(); listenerEnum.hasMoreElements();) { 527 ((SessionEventListener)listenerEnum.nextElement()).preExecuteQuery(event); 528 } 529 endOperationProfile(); 530 } 531 532 536 public void preLogin(Session session) { 537 if (!hasListeners()) { 538 return; 539 } 540 startOperationProfile(); 541 SessionEvent event = new SessionEvent(SessionEvent.PreLogin, session); 542 for (Enumeration listenerEnum = getListeners().elements(); listenerEnum.hasMoreElements();) { 543 ((SessionEventListener)listenerEnum.nextElement()).preLogin(event); 544 } 545 endOperationProfile(); 546 } 547 548 552 public void postLogin(Session session) { 553 if (!hasListeners()) { 554 return; 555 } 556 startOperationProfile(); 557 SessionEvent event = new SessionEvent(SessionEvent.PostLogin, session); 558 for (Enumeration listenerEnum = getListeners().elements(); listenerEnum.hasMoreElements();) { 559 ((SessionEventListener)listenerEnum.nextElement()).postLogin(event); 560 } 561 endOperationProfile(); 562 } 563 564 568 public void prepareUnitOfWork() { 569 if (!hasListeners()) { 570 return; 571 } 572 startOperationProfile(); 573 SessionEvent event = new SessionEvent(SessionEvent.PrepareUnitOfWork, getSession()); 574 for (Enumeration listenerEnum = getListeners().elements(); listenerEnum.hasMoreElements();) { 575 ((SessionEventListener)listenerEnum.nextElement()).prepareUnitOfWork(event); 576 } 577 endOperationProfile(); 578 } 579 580 584 public void preReleaseClientSession() { 585 if (!hasListeners()) { 586 return; 587 } 588 startOperationProfile(); 589 SessionEvent event = new SessionEvent(SessionEvent.PreReleaseClientSession, getSession()); 590 for (Enumeration listenerEnum = getListeners().elements(); listenerEnum.hasMoreElements();) { 591 ((SessionEventListener)listenerEnum.nextElement()).preReleaseClientSession(event); 592 } 593 endOperationProfile(); 594 } 595 596 600 public void preReleaseConnection(Accessor accessor) { 601 if (!hasListeners()) { 602 return; 603 } 604 startOperationProfile(); 605 SessionEvent event = new SessionEvent(SessionEvent.PreReleaseConnection, getSession()); 606 event.setResult(accessor); 607 for (Enumeration listenerEnum = getListeners().elements(); listenerEnum.hasMoreElements();) { 608 ((SessionEventListener)listenerEnum.nextElement()).preReleaseConnection(event); 609 } 610 endOperationProfile(); 611 } 612 613 618 public void preReleaseExclusiveConnection(ClientSession clientSession, Accessor accessor) { 619 if (!hasListeners()) { 620 return; 621 } 622 623 SessionEvent event = new SessionEvent(SessionEvent.PreReleaseExclusiveConnection, clientSession); 624 event.setResult(accessor); 625 for (Enumeration listenerEnum = getListeners().elements(); listenerEnum.hasMoreElements();) { 626 ((SessionEventListener)listenerEnum.nextElement()).preReleaseExclusiveConnection(event); 627 } 628 } 629 630 634 public void preReleaseUnitOfWork() { 635 if (!hasListeners()) { 636 return; 637 } 638 startOperationProfile(); 639 SessionEvent event = new SessionEvent(SessionEvent.PreReleaseUnitOfWork, getSession()); 640 for (Enumeration listenerEnum = getListeners().elements(); listenerEnum.hasMoreElements();) { 641 ((SessionEventListener)listenerEnum.nextElement()).preReleaseUnitOfWork(event); 642 } 643 endOperationProfile(); 644 } 645 646 650 public void preRollbackTransaction() { 651 if (!hasListeners()) { 652 return; 653 } 654 startOperationProfile(); 655 SessionEvent event = new SessionEvent(SessionEvent.PreRollbackTransaction, getSession()); 656 for (Enumeration listenerEnum = getListeners().elements(); listenerEnum.hasMoreElements();) { 657 ((SessionEventListener)listenerEnum.nextElement()).preRollbackTransaction(event); 658 } 659 endOperationProfile(); 660 } 661 662 666 public void preDistributedMergeUnitOfWorkChangeSet(UnitOfWorkChangeSet changeSet) { 667 if (!hasListeners()) { 668 return; 669 } 670 startOperationProfile(); 671 SessionEvent event = new SessionEvent(SessionEvent.PreDistributedMergeUnitOfWorkChangeSet, getSession()); 672 event.setProperty("UnitOfWorkChangeSet", changeSet); 673 for (Enumeration listenerEnum = getListeners().elements(); listenerEnum.hasMoreElements();) { 674 ((SessionEventListener)listenerEnum.nextElement()).preDistributedMergeUnitOfWorkChangeSet(event); 675 } 676 endOperationProfile(); 677 } 678 679 683 public void preMergeUnitOfWorkChangeSet(UnitOfWorkChangeSet changeSet) { 684 if (!hasListeners()) { 685 return; 686 } 687 startOperationProfile(); 688 SessionEvent event = new SessionEvent(SessionEvent.PreMergeUnitOfWorkChangeSet, getSession()); 689 event.setProperty("UnitOfWorkChangeSet", changeSet); 690 for (Enumeration listenerEnum = getListeners().elements(); listenerEnum.hasMoreElements();) { 691 ((SessionEventListener)listenerEnum.nextElement()).preMergeUnitOfWorkChangeSet(event); 692 } 693 endOperationProfile(); 694 } 695 696 700 public void removeListener(SessionEventListener listener) { 701 getListeners().removeElement(listener); 702 } 703 704 708 protected void setListeners(Vector listeners) { 709 this.listeners = listeners; 710 } 711 712 716 public void setSession(Session session) { 717 this.session = session; 718 } 719 720 724 protected void startOperationProfile() { 725 if (getSession().isInProfile()) { 726 getSession().getProfiler().startOperationProfile(SessionProfiler.SessionEvent); 727 } 728 } 729 730 734 protected void endOperationProfile() { 735 if (getSession().isInProfile()) { 736 getSession().getProfiler().endOperationProfile(SessionProfiler.SessionEvent); 737 } 738 } 739 } 740 | Popular Tags |