1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package com.ibatis.sqlmap.engine.datasource;
17
18 import com.ibatis.sqlmap.client.SqlMapException;
19
20 import java.util.Iterator;
21 import java.util.Map;
22 import java.util.Properties;
23
24 import javax.naming.Context;
25 import javax.naming.InitialContext;
26 import javax.naming.NamingException;
27 import javax.sql.DataSource;
28
29
30
31
32 public class JndiDataSourceFactory implements DataSourceFactory {
33
34
35 private DataSource dataSource;
36
37 @Override
38 public void initialize(Map properties) {
39 try {
40 InitialContext initCtx = null;
41 Properties context = getContextProperties(properties);
42
43 if (context == null) {
44 initCtx = new InitialContext();
45 } else {
46 initCtx = new InitialContext(context);
47 }
48
49 if (properties.containsKey("DataSource")) {
50 dataSource = (DataSource) initCtx.lookup((String) properties.get("DataSource"));
51 } else if (properties.containsKey("DBJndiContext")) {
52
53 dataSource = (DataSource) initCtx.lookup((String) properties.get("DBJndiContext"));
54 } else if (properties.containsKey("DBFullJndiContext")) {
55
56 dataSource = (DataSource) initCtx.lookup((String) properties.get("DBFullJndiContext"));
57 } else if (properties.containsKey("DBInitialContext") && properties.containsKey("DBLookup")) {
58
59 Context ctx = (Context) initCtx.lookup((String) properties.get("DBInitialContext"));
60 dataSource = (DataSource) ctx.lookup((String) properties.get("DBLookup"));
61 }
62
63 } catch (NamingException e) {
64 throw new SqlMapException("There was an error configuring JndiDataSourceTransactionPool. Cause: " + e, e);
65 }
66 }
67
68 @Override
69 public DataSource getDataSource() {
70 return dataSource;
71 }
72
73
74
75
76
77
78
79
80
81 private static Properties getContextProperties(Map allProps) {
82 final String PREFIX = "context.";
83 Properties contextProperties = null;
84 Iterator keys = allProps.keySet().iterator();
85 while (keys.hasNext()) {
86 String key = (String) keys.next();
87 String value = (String) allProps.get(key);
88 if (key.startsWith(PREFIX)) {
89 if (contextProperties == null) {
90 contextProperties = new Properties();
91 }
92 contextProperties.put(key.substring(PREFIX.length()), value);
93 }
94 }
95 return contextProperties;
96 }
97
98 }