1 |
| |
2 |
| |
3 |
| |
4 |
| |
5 |
| |
6 |
| |
7 |
| package org.jboss.cache.loader; |
8 |
| |
9 |
| import org.apache.commons.logging.Log; |
10 |
| import org.apache.commons.logging.LogFactory; |
11 |
| |
12 |
| import javax.naming.InitialContext; |
13 |
| import javax.naming.NamingException; |
14 |
| import javax.sql.DataSource; |
15 |
| import java.sql.Connection; |
16 |
| import java.sql.SQLException; |
17 |
| |
18 |
| |
19 |
| |
20 |
| |
21 |
| |
22 |
| |
23 |
| |
24 |
| public class ManagedConnectionFactory implements ConnectionFactory |
25 |
| { |
26 |
| private static final Log log = LogFactory.getLog(ManagedConnectionFactory.class); |
27 |
| |
28 |
| private DataSource dataSource; |
29 |
| private String datasourceName; |
30 |
| |
31 |
63
| public void setConfig(AdjListJDBCCacheLoaderConfig config)
|
32 |
| { |
33 |
63
| datasourceName = config.getDatasourceName();
|
34 |
| } |
35 |
| |
36 |
63
| public void start() throws Exception
|
37 |
| { |
38 |
| |
39 |
| |
40 |
63
| InitialContext ctx = null;
|
41 |
63
| try
|
42 |
| { |
43 |
63
| ctx = new InitialContext();
|
44 |
63
| dataSource = (DataSource) ctx.lookup(datasourceName);
|
45 |
63
| if (log.isTraceEnabled())
|
46 |
| { |
47 |
0
| log.trace("Datasource lookup for " + datasourceName + " succeded: " + dataSource);
|
48 |
| } |
49 |
| } |
50 |
| catch (NamingException e) |
51 |
| { |
52 |
0
| reportAndRethrowError("Failed to lookup datasource " + datasourceName, e);
|
53 |
| } |
54 |
| finally |
55 |
| { |
56 |
63
| if (ctx != null)
|
57 |
| { |
58 |
63
| try
|
59 |
| { |
60 |
63
| ctx.close();
|
61 |
| } |
62 |
| catch (NamingException e) |
63 |
| { |
64 |
0
| log.warn("Failed to close naming context.", e);
|
65 |
| } |
66 |
| } |
67 |
| } |
68 |
| } |
69 |
| |
70 |
19889
| public Connection getConnection()
|
71 |
| throws SQLException |
72 |
| { |
73 |
19889
| Connection connection = dataSource.getConnection();
|
74 |
19889
| if (log.isTraceEnabled())
|
75 |
| { |
76 |
0
| log.trace("Connection checked out: " + connection);
|
77 |
| } |
78 |
19889
| return connection;
|
79 |
| } |
80 |
| |
81 |
4
| public void prepare(Object txId)
|
82 |
| { |
83 |
| |
84 |
| |
85 |
| |
86 |
| |
87 |
| |
88 |
| |
89 |
| } |
90 |
| |
91 |
4
| public void commit(Object txId)
|
92 |
| { |
93 |
| |
94 |
| |
95 |
| |
96 |
| |
97 |
| |
98 |
| |
99 |
| } |
100 |
| |
101 |
0
| public void rollback(Object txId)
|
102 |
| { |
103 |
| |
104 |
| |
105 |
| |
106 |
| |
107 |
| |
108 |
| |
109 |
| } |
110 |
| |
111 |
19889
| public void close(Connection con)
|
112 |
| { |
113 |
19889
| safeClose(con);
|
114 |
| } |
115 |
| |
116 |
63
| public void stop()
|
117 |
| { |
118 |
| } |
119 |
| |
120 |
19889
| private void safeClose(Connection con)
|
121 |
| { |
122 |
19889
| if (con != null)
|
123 |
| { |
124 |
19889
| try
|
125 |
| { |
126 |
19889
| con.close();
|
127 |
| } |
128 |
| catch (SQLException e) |
129 |
| { |
130 |
0
| log.warn("Failed to close connection", e);
|
131 |
| } |
132 |
| } |
133 |
| } |
134 |
| |
135 |
0
| private void reportAndRethrowError(String message, Exception cause) throws IllegalStateException
|
136 |
| { |
137 |
0
| log.error(message, cause);
|
138 |
0
| throw new IllegalStateException(message, cause);
|
139 |
| } |
140 |
| } |