KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > oracle > toplink > essentials > internal > sequencing > DatabaseSessionConnectionHandler


1 /*
2  * The contents of this file are subject to the terms
3  * of the Common Development and Distribution License
4  * (the "License"). You may not use this file except
5  * in compliance with the License.
6  *
7  * You can obtain a copy of the license at
8  * glassfish/bootstrap/legal/CDDLv1.0.txt or
9  * https://glassfish.dev.java.net/public/CDDLv1.0.html.
10  * See the License for the specific language governing
11  * permissions and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL
14  * HEADER in each file and include the License file at
15  * glassfish/bootstrap/legal/CDDLv1.0.txt. If applicable,
16  * add the following below this CDDL HEADER, with the
17  * fields enclosed by brackets "[]" replaced with your
18  * own identifying information: Portions Copyright [yyyy]
19  * [name of copyright owner]
20  */

21 // Copyright (c) 1998, 2005, Oracle. All rights reserved.
22
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();// Notify is called when connection is released.
55
} catch (InterruptedException JavaDoc 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 JavaDoc {
75         onDisconnect();
76     }
77 }
78
Popular Tags