1 21 package oracle.toplink.essentials.internal.sequencing; 23 24 import oracle.toplink.essentials.sessions.Login; 25 import oracle.toplink.essentials.internal.sessions.DatabaseSessionImpl; 26 import oracle.toplink.essentials.internal.databaseaccess.Accessor; 27 import oracle.toplink.essentials.exceptions.ConcurrencyException; 28 29 class DatabaseSessionConnectionHandler implements SequencingConnectionHandler { 30 DatabaseSessionConnectionHandler(DatabaseSessionImpl ownerSession, Login login) { 31 this.ownerSession = ownerSession; 32 this.login = login; 33 accessor = login.buildAccessor(); 34 } 35 36 DatabaseSessionImpl ownerSession; 37 Login login; 38 Accessor accessor; 39 boolean isBusy; 40 41 public void onConnect() { 42 if (!isConnected()) { 43 accessor.connect(login, ownerSession); 44 } 45 } 46 47 public boolean isConnected() { 48 return accessor.isConnected(); 49 } 50 51 public synchronized Accessor acquireAccessor() { 52 if (isBusy) { 53 try { 54 wait(); } catch (InterruptedException exception) { 56 throw ConcurrencyException.waitFailureOnSequencingForDatabaseSession(exception); 57 } 58 } 59 isBusy = true; 60 return accessor; 61 } 62 63 public synchronized void releaseAccessor(Accessor accessor) { 64 isBusy = false; 65 notify(); 66 } 67 68 public void onDisconnect() { 69 if (isConnected()) { 70 accessor.disconnect(ownerSession); 71 } 72 } 73 74 protected void finalize() throws Throwable { 75 onDisconnect(); 76 } 77 } 78 | Popular Tags |