1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mybatis.cdi;
17
18 import jakarta.enterprise.context.spi.CreationalContext;
19 import jakarta.enterprise.inject.Any;
20 import jakarta.enterprise.inject.Default;
21 import jakarta.enterprise.inject.spi.Bean;
22 import jakarta.enterprise.inject.spi.BeanManager;
23 import jakarta.enterprise.inject.spi.CDI;
24 import jakarta.enterprise.util.AnnotationLiteral;
25
26 import java.lang.annotation.Annotation;
27 import java.util.Iterator;
28 import java.util.Set;
29
30 import org.apache.ibatis.session.SqlSessionFactory;
31
32
33
34
35 public final class CDIUtils {
36
37 private CDIUtils() {
38
39 }
40
41
42
43
44
45
46 private static BeanManager getBeanManager() {
47 return CDI.current().getBeanManager();
48 }
49
50
51
52
53
54
55
56
57
58 public static <T> SqlSessionManagerRegistry getRegistry(CreationalContext<T> creationalContext) {
59 final BeanManager beanManager = getBeanManager();
60 Iterator<Bean<? extends Object>> beans = beanManager.getBeans(SqlSessionManagerRegistry.class).iterator();
61 return (SqlSessionManagerRegistry) beanManager.getReference(beans.next(), SqlSessionManagerRegistry.class,
62 creationalContext);
63 }
64
65
66
67
68
69
70
71
72
73
74
75
76
77 public static <T> SqlSessionFactory findSqlSessionFactory(String name, Set<Annotation> qualifiers,
78 CreationalContext<T> creationalContext) {
79 final BeanManager beanManager = getBeanManager();
80 Set<Bean<? extends Object>> beans;
81 if (name != null) {
82 beans = beanManager.getBeans(name);
83 } else {
84 beans = beanManager.getBeans(SqlSessionFactory.class, qualifiers.toArray(new Annotation[] {}));
85 }
86 Bean<? extends Object> bean = beanManager.resolve(beans);
87 if (bean == null) {
88 throw new MybatisCdiConfigurationException("There are no SqlSessionFactory producers properly configured.");
89 }
90 return (SqlSessionFactory) beanManager.getReference(bean, SqlSessionFactory.class, creationalContext);
91 }
92
93 public static class SerializableDefaultAnnotationLiteral extends AnnotationLiteral<Default> {
94 private static final long serialVersionUID = 1L;
95 }
96
97 public static class SerializableAnyAnnotationLiteral extends AnnotationLiteral<Any> {
98 private static final long serialVersionUID = 1L;
99 }
100
101 }