Skip to content

Commit c03f882

Browse files
committed
优化 hibernate-jakarta-solon-plugin
1 parent f6082d3 commit c03f882

File tree

5 files changed

+78
-42
lines changed

5 files changed

+78
-42
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,26 @@
11
package org.hibernate.solon.integration;
22

33
import org.hibernate.solon.annotation.Db;
4-
import org.noear.solon.core.BeanInjector;
54
import org.noear.solon.core.BeanWrap;
65
import org.noear.solon.core.VarHolder;
7-
import org.noear.solon.data.datasource.DsUtils;
6+
import org.noear.solon.data.datasource.DsInjector;
87

98
/**
109
* @author lingkang
1110
* @since 2.5
1211
*/
13-
public class DbBeanInjectorImpl implements BeanInjector<Db> {
14-
@Override
15-
public void doInject(VarHolder vh, Db anno) {
16-
vh.required(true);
12+
public class DbBeanInjectorImpl extends DsInjector<Db> {
13+
public DbBeanInjectorImpl() {
14+
super(Db::value);
1715

18-
DsUtils.observeDs(vh.context(), anno.value(), dsWrap -> {
19-
inject0(vh, dsWrap);
20-
});
16+
addHandler(this::injectHandle);
2117
}
2218

23-
private void inject0(VarHolder vh, BeanWrap dsBw) {
19+
public void injectHandle(VarHolder vh, BeanWrap dsBw) {
2420
HibernateAdapter adapter = HibernateAdapterManager.get(dsBw);
2521

2622
if (adapter != null) {
2723
adapter.injectTo(vh);
2824
}
2925
}
30-
}
26+
}

solon-jakarta-projects/solon-data/hibernate-jakarta-solon-plugin/src/main/java/org/hibernate/solon/integration/HibernateAdapter.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@
22

33
import org.hibernate.SessionFactory;
44
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
5-
import org.hibernate.cfg.Configuration;
65
import org.noear.solon.Solon;
76
import org.noear.solon.core.BeanWrap;
87
import org.noear.solon.core.Props;
98
import org.noear.solon.core.VarHolder;
109
import org.noear.solon.core.util.ResourceUtil;
1110

1211
import jakarta.persistence.EntityManagerFactory;
12+
13+
import javax.security.auth.login.Configuration;
1314
import javax.sql.DataSource;
1415

1516
/**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package org.hibernate.solon.integration;
2+
3+
import jakarta.persistence.spi.PersistenceProviderResolverHolder;
4+
import jakarta.persistence.PersistenceContext;
5+
import jakarta.persistence.PersistenceUnit;
6+
7+
import org.hibernate.solon.annotation.Db;
8+
import org.noear.solon.Utils;
9+
import org.noear.solon.core.AppContext;
10+
import org.noear.solon.core.Plugin;
11+
import org.noear.solon.core.VarHolder;
12+
import org.noear.solon.data.datasource.DsInjector;
13+
import org.noear.solon.data.datasource.DsUtils;
14+
15+
import javax.sql.DataSource;
16+
17+
/**
18+
* @author noear
19+
* @since 2.5
20+
* @since 3.4
21+
*/
22+
public class HibernateSolonPlugin implements Plugin {
23+
24+
@Override
25+
public void start(AppContext context) throws Throwable {
26+
//增加 jpa 的 solon yml 配置支持
27+
PersistenceProviderResolverHolder
28+
.getPersistenceProviderResolver()
29+
.getPersistenceProviders()
30+
.add(new JpaPersistenceProvider());
31+
32+
context.subWrapsOfType(DataSource.class, HibernateAdapterManager::register);
33+
34+
//添加 db 注入处理
35+
DbBeanInjectorImpl dbBeanInjector = new DbBeanInjectorImpl();
36+
context.beanInjectorAdd(Db.class, dbBeanInjector);
37+
DsInjector.getDefault().addHandler(dbBeanInjector::injectHandle);
38+
39+
// 标准 jpa PersistenceContext 注入支持
40+
//PersistenceUnit
41+
context.beanInjectorAdd(PersistenceContext.class, this::persistenceContextInject);
42+
context.beanInjectorAdd(PersistenceUnit.class, this::persistenceUnitInject);
43+
}
44+
45+
private void persistenceContextInject(VarHolder vh, PersistenceContext anno) {
46+
String unitName = Utils.annoAlias(anno.unitName(), anno.name());
47+
48+
DsUtils.observeDs(vh.context(), unitName, dsBw -> {
49+
HibernateAdapter adapter = HibernateAdapterManager.get(dsBw);
50+
51+
if (adapter != null) {
52+
adapter.injectTo(vh);
53+
}
54+
});
55+
}
56+
57+
private void persistenceUnitInject(VarHolder vh, PersistenceUnit anno) {
58+
String unitName = Utils.annoAlias(anno.unitName(), anno.name());
59+
60+
DsUtils.observeDs(vh.context(), unitName, dsBw -> {
61+
HibernateAdapter adapter = HibernateAdapterManager.get(dsBw);
62+
63+
if (adapter != null) {
64+
adapter.injectTo(vh);
65+
}
66+
});
67+
}
68+
}

solon-jakarta-projects/solon-data/hibernate-jakarta-solon-plugin/src/main/java/org/hibernate/solon/integration/XPluginImpl.java

Lines changed: 0 additions & 29 deletions
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
solon.plugin=org.hibernate.solon.integration.XPluginImpl
1+
solon.plugin=org.hibernate.solon.integration.HibernateSolonPlugin
22
solon.plugin.priority=10

0 commit comments

Comments
 (0)