01: // $Id: ConnectionReleaseMode.java 8409 2005-10-14 20:28:18Z steveebersole $
02: package org.hibernate;
03:
04: import java.io.Serializable;
05:
06: /**
07: * Defines the various policies by which Hibernate might release its underlying
08: * JDBC connection.
09: *
10: * @author Steve Ebersole
11: */
12: public class ConnectionReleaseMode implements Serializable {
13:
14: /**
15: * Indicates that JDBC connection should be aggressively released after each
16: * SQL statement is executed. In this mode, the application <em>must</em>
17: * explicitly close all iterators and scrollable results. This mode may
18: * only be used with a JTA datasource.
19: */
20: public static final ConnectionReleaseMode AFTER_STATEMENT = new ConnectionReleaseMode(
21: "after_statement");
22:
23: /**
24: * Indicates that JDBC connections should be released after each transaction
25: * ends (works with both JTA-registered synch and HibernateTransaction API).
26: * This mode may not be used with an application server JTA datasource.
27: * <p/>
28: * This is the default mode starting in 3.1; was previously {@link #ON_CLOSE}.
29: */
30: public static final ConnectionReleaseMode AFTER_TRANSACTION = new ConnectionReleaseMode(
31: "after_transaction");
32:
33: /**
34: * Indicates that connections should only be released when the Session is explicitly closed
35: * or disconnected; this is the legacy (Hibernate2 and pre-3.1) behavior.
36: */
37: public static final ConnectionReleaseMode ON_CLOSE = new ConnectionReleaseMode(
38: "on_close");
39:
40: private String name;
41:
42: private ConnectionReleaseMode(String name) {
43: this .name = name;
44: }
45:
46: /**
47: * Override of Object.toString(). Returns the release mode name.
48: *
49: * @return The release mode name.
50: */
51: public String toString() {
52: return name;
53: }
54:
55: /**
56: * Determine the correct ConnectionReleaseMode instance based on the given
57: * name.
58: *
59: * @param modeName The release mode name.
60: * @return The appropriate ConnectionReleaseMode instance
61: * @throws HibernateException Indicates the modeName param did not match any known modes.
62: */
63: public static ConnectionReleaseMode parse(String modeName)
64: throws HibernateException {
65: if (AFTER_STATEMENT.name.equals(modeName)) {
66: return AFTER_STATEMENT;
67: } else if (AFTER_TRANSACTION.name.equals(modeName)) {
68: return AFTER_TRANSACTION;
69: } else if (ON_CLOSE.name.equals(modeName)) {
70: return ON_CLOSE;
71: }
72: throw new HibernateException(
73: "could not determine appropriate connection release mode ["
74: + modeName + "]");
75: }
76:
77: private Object readResolve() {
78: return parse(name);
79: }
80: }
|