1 28 29 package com.caucho.amber; 30 31 import com.caucho.util.L10N; 32 33 import java.sql.SQLException ; 34 35 38 public class AmberContext { 39 private static final L10N L = new L10N(AmberContext.class); 40 41 private static final ThreadLocal <AmberContext> _localContext 42 = new ThreadLocal <AmberContext>(); 43 44 private AmberFactory _factory; 45 private int _depth; 46 private AmberConnection _aConn; 47 48 51 private AmberContext(AmberFactory factory) 52 { 53 _factory = factory; 54 } 55 56 59 public static AmberContext create(AmberFactory factory) 60 { 61 AmberContext context = _localContext.get(); 62 63 if (context != null) 64 context._depth++; 65 else { 66 context = new AmberContext(factory); 67 _localContext.set(context); 68 } 69 70 return context; 71 } 72 73 76 public static AmberConnection getConnection() 77 throws SQLException 78 { 79 AmberContext context = _localContext.get(); 80 81 if (context == null) 82 throw new AmberException(L.l("No amber context is available.")); 83 84 if (context._aConn == null) 85 context._aConn = context._factory.getConnection(); 86 87 return context._aConn; 88 } 89 90 93 public static void close() 94 { 95 AmberContext context = _localContext.get(); 96 97 if (context._depth == 0) { 98 _localContext.set(null); 99 100 AmberConnection conn = context._aConn; 101 if (conn != null) 102 conn.close(); 103 } 104 else 105 context._depth--; 106 } 107 } 108 | Popular Tags |