1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mybatis.cdi;
17
18 import jakarta.annotation.PostConstruct;
19 import jakarta.enterprise.context.ApplicationScoped;
20 import jakarta.enterprise.inject.Any;
21 import jakarta.enterprise.inject.Instance;
22 import jakarta.inject.Inject;
23
24 import java.util.Collection;
25 import java.util.Collections;
26 import java.util.HashMap;
27 import java.util.Map;
28
29 import org.apache.ibatis.session.SqlSessionFactory;
30 import org.apache.ibatis.session.SqlSessionManager;
31
32
33
34
35 @ApplicationScoped
36 public class SqlSessionManagerRegistry {
37
38 private Map<SqlSessionFactory, SqlSessionManager> managers;
39
40 @Inject
41 @Any
42 private Instance<SqlSessionFactory> factories;
43
44
45
46
47 @PostConstruct
48 public void init() {
49 if (this.factories.isUnsatisfied()) {
50 throw new MybatisCdiConfigurationException("There are no SqlSessionFactory producers properly configured.");
51 }
52 Map<SqlSessionFactory, SqlSessionManager> m = new HashMap<>();
53 for (SqlSessionFactory factory : this.factories) {
54 SqlSessionManager manager = SqlSessionManager.newInstance(factory);
55 m.put(factory, manager);
56 }
57 this.managers = Collections.unmodifiableMap(m);
58 }
59
60 public SqlSessionManager getManager(SqlSessionFactory factory) {
61 return this.managers.get(factory);
62 }
63
64 public Collection<SqlSessionManager> getManagers() {
65 return this.managers.values();
66 }
67
68 }