Skip to content

Commit b32fea9

Browse files
committed
Merge pull request #70 from backpaper0/listener-provider
EntityListenerの取得はEntityListenerProviderを介するようにしました
2 parents b94863d + 1a6cdea commit b32fea9

35 files changed

+242
-217
lines changed

docs/sources/config.rst

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -244,12 +244,15 @@ SELECT時のフェッチサイズをあらわす ``int`` を ``getFetchSize``
244244
エンティティリスナーの取得
245245
--------------------------
246246

247-
``EntityListener`` を ``getEntityListener`` メソッドで返して下さい。
248-
``getEntityListener`` メソッドは ``EntityListener`` 実装クラスの ``Class`` と ``EntityListener`` 実装クラスのインスタンスを返す ``Supplier``
249-
を引数に取り、デフォルトの実装では ``Supplier.get`` メソッドを実行して得たインスタンスを返します。
247+
``EntityListenerProvider`` を ``getEntityListenerProvider`` メソッドで返して下さい。
248+
249+
``EntityListenerProvider`` の ``get`` メソッドは ``EntityListener`` 実装クラスの ``Class`` と ``EntityListener`` 実装クラスのインスタンスを返す ``Supplier``
250+
を引数に取り ``EntityListener`` のインスタンスを返します。
251+
デフォルトの実装では ``Supplier.get`` メソッドを実行して得たインスタンスを返します。
250252

251253
``EntityListener`` 実装クラスのインスタンスをDIコンテナから取得したいなど、
252-
インスタンス取得方法をカスタマイズする場合は設定してください。
254+
インスタンス取得方法をカスタマイズする場合は ``EntityListenerProvider`` を実装したクラスを作成し、
255+
``getEntityListenerProvider`` メソッドでそのインスタンスを返すよう設定してください。
253256

254257
JDBC ドライバのロード
255258
=====================

src/main/java/org/seasar/doma/internal/RuntimeConfig.java

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,14 @@
1717

1818
import static org.seasar.doma.internal.util.AssertionUtil.assertNotNull;
1919

20-
import java.util.function.Supplier;
21-
2220
import javax.sql.DataSource;
2321

2422
import org.seasar.doma.jdbc.ClassHelper;
2523
import org.seasar.doma.jdbc.CommandImplementors;
2624
import org.seasar.doma.jdbc.Commenter;
2725
import org.seasar.doma.jdbc.Config;
2826
import org.seasar.doma.jdbc.ConfigException;
27+
import org.seasar.doma.jdbc.EntityListenerProvider;
2928
import org.seasar.doma.jdbc.JdbcLogger;
3029
import org.seasar.doma.jdbc.MapKeyNaming;
3130
import org.seasar.doma.jdbc.Naming;
@@ -35,7 +34,6 @@
3534
import org.seasar.doma.jdbc.SqlLogType;
3635
import org.seasar.doma.jdbc.UnknownColumnHandler;
3736
import org.seasar.doma.jdbc.dialect.Dialect;
38-
import org.seasar.doma.jdbc.entity.EntityListener;
3937
import org.seasar.doma.jdbc.tx.TransactionManager;
4038

4139
/**
@@ -155,15 +153,12 @@ public int getBatchSize() {
155153
}
156154

157155
@Override
158-
public <ENTITY, LISTENER extends EntityListener<ENTITY>> LISTENER getEntityListener(
159-
Class<LISTENER> listenerClass, Supplier<LISTENER> listenerSupplier) {
160-
LISTENER listener = config.getEntityListener(listenerClass,
161-
listenerSupplier);
162-
if (listener == null) {
156+
public EntityListenerProvider getEntityListenerProvider() {
157+
EntityListenerProvider provider = config.getEntityListenerProvider();
158+
if (provider == null) {
163159
throw new ConfigException(config.getClass().getName(),
164-
"getEntityListener");
160+
"getEntityListenerProvider");
165161
}
166-
return listener;
162+
return provider;
167163
}
168-
169164
}

src/main/java/org/seasar/doma/internal/apt/EntityTypeGenerator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -746,7 +746,7 @@ protected void printListenerHolder() {
746746
private void printDeclareListener() {
747747
iprint(" Class __listenerClass = %1$s.class;%n", entityMeta
748748
.getEntityListenerElement().getQualifiedName());
749-
iprint(" %1$s __listener = context.getConfig().getEntityListener(__listenerClass, __listenerSupplier);%n",
749+
iprint(" %1$s __listener = context.getConfig().getEntityListenerProvider().get(__listenerClass, __listenerSupplier);%n",
750750
entityMeta.getEntityListenerElement().getQualifiedName());
751751
}
752752

src/main/java/org/seasar/doma/jdbc/Config.java

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
import java.sql.PreparedStatement;
1919
import java.sql.Statement;
20-
import java.util.function.Supplier;
2120

2221
import javax.sql.DataSource;
2322

@@ -241,26 +240,13 @@ default int getBatchSize() {
241240
}
242241

243242
/**
244-
* {@link EntityListener} のインスタンスを取得します。
245-
* <p>
246-
* デフォルトの実装では単純に {@link Supplier#get()} を実行して取得したインスタンスを返します。
247-
*
248-
* {@link EntityListener} をDIコンテナで管理したい場合などはこのメソッドをオーバーライドし、
249-
* DIコンテナから取得したインスタンスを返すようにしてください。
243+
* {@link EntityListener} のプロバイダを返します。
250244
*
251-
* @param listenerClass
252-
* {@link EntityListener} の実装クラス
253-
* @param listenerSupplier
254-
* {@link EntityListener} のインスタンスを返す {@link Supplier}
255-
* @param <ENTITY>
256-
* エンティティの型
257-
* @param <LISTENER>
258-
* リスナーの型
259-
* @return {@link EntityListener} のインスタンス
245+
* @return {@link EntityListener} のプロバイダ
246+
* @since 2.2.0
260247
*/
261-
default <ENTITY, LISTENER extends EntityListener<ENTITY>> LISTENER getEntityListener(
262-
Class<LISTENER> listenerClass, Supplier<LISTENER> listenerSupplier) {
263-
return listenerSupplier.get();
248+
default EntityListenerProvider getEntityListenerProvider() {
249+
return ConfigSupport.defaultEntityListenerProvider;
264250
}
265251

266252
/**

src/main/java/org/seasar/doma/jdbc/ConfigSupport.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,4 +56,9 @@ public final class ConfigSupport {
5656
public static Commenter defaultCommenter = new Commenter() {
5757
};
5858

59+
/**
60+
* @since 2.2.0
61+
*/
62+
public static EntityListenerProvider defaultEntityListenerProvider = new EntityListenerProvider() {
63+
};
5964
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package org.seasar.doma.jdbc;
2+
3+
import java.util.function.Supplier;
4+
5+
import org.seasar.doma.jdbc.entity.EntityListener;
6+
7+
/**
8+
* {@link EntityListener} のプロバイダです。
9+
*
10+
* @author backpaper0
11+
* @since 2.2.0
12+
*/
13+
public interface EntityListenerProvider {
14+
15+
/**
16+
* {@link EntityListener} のインスタンスを取得します。
17+
* <p>
18+
* デフォルトの実装では単純に {@link Supplier#get()} を実行して取得したインスタンスを返します。
19+
*
20+
* {@link EntityListener} をDIコンテナで管理したい場合などはこのメソッドをオーバーライドし、
21+
* DIコンテナから取得したインスタンスを返すようにしてください。
22+
*
23+
* このメソッドは{@code null}を返してはいけません。
24+
*
25+
* @param listenerClass
26+
* {@link EntityListener} の実装クラス
27+
* @param listenerSupplier
28+
* {@link EntityListener} のインスタンスを返す {@link Supplier}
29+
* @param <ENTITY>
30+
* エンティティの型
31+
* @param <LISTENER>
32+
* リスナーの型
33+
* @return {@link EntityListener} のインスタンス
34+
*/
35+
default <ENTITY, LISTENER extends EntityListener<ENTITY>> LISTENER get(
36+
Class<LISTENER> listenerClass, Supplier<LISTENER> listenerSupplier) {
37+
return listenerSupplier.get();
38+
}
39+
}

src/test/java/org/seasar/doma/internal/RuntimeConfigTest.java

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,13 @@
1515
*/
1616
package org.seasar.doma.internal;
1717

18-
import java.util.function.Supplier;
19-
2018
import javax.sql.DataSource;
2119

2220
import junit.framework.TestCase;
2321

2422
import org.seasar.doma.jdbc.Config;
2523
import org.seasar.doma.jdbc.ConfigException;
24+
import org.seasar.doma.jdbc.EntityListenerProvider;
2625
import org.seasar.doma.jdbc.SimpleDataSource;
2726
import org.seasar.doma.jdbc.dialect.Dialect;
2827
import org.seasar.doma.jdbc.dialect.StandardDialect;
@@ -38,40 +37,38 @@ public void testGetEntityListener() throws Exception {
3837
Config originalConfig = new MockConfig() {
3938

4039
@Override
41-
public <ENTITY, LISTENER extends EntityListener<ENTITY>> LISTENER getEntityListener(
42-
Class<LISTENER> listenerClass,
43-
Supplier<LISTENER> listenerSupplier) {
44-
return listenerSupplier.get();
40+
public EntityListenerProvider getEntityListenerProvider() {
41+
return new EntityListenerProvider() {
42+
};
4543
}
4644
};
4745

4846
RuntimeConfig runtimeConfig = new RuntimeConfig(originalConfig);
4947

50-
MockEntityListener entityListener = runtimeConfig.getEntityListener(
51-
MockEntityListener.class, MockEntityListener::new);
48+
MockEntityListener entityListener = runtimeConfig
49+
.getEntityListenerProvider().get(MockEntityListener.class,
50+
MockEntityListener::new);
5251
assertNotNull(entityListener);
5352
}
5453

5554
public void testGetEntityListenerNullCheck() throws Exception {
5655
Config originalConfig = new MockConfig() {
5756

5857
@Override
59-
public <ENTITY, LISTENER extends EntityListener<ENTITY>> LISTENER getEntityListener(
60-
Class<LISTENER> listenerClass,
61-
Supplier<LISTENER> listenerSupplier) {
58+
public EntityListenerProvider getEntityListenerProvider() {
6259
return null;
6360
}
6461
};
6562

6663
RuntimeConfig runtimeConfig = new RuntimeConfig(originalConfig);
6764

6865
try {
69-
runtimeConfig.getEntityListener(MockEntityListener.class,
70-
MockEntityListener::new);
66+
runtimeConfig.getEntityListenerProvider().get(
67+
MockEntityListener.class, MockEntityListener::new);
7168
fail();
7269
} catch (ConfigException e) {
7370
assertEquals(originalConfig.getClass().getName(), e.getClassName());
74-
assertEquals("getEntityListener", e.getMethodName());
71+
assertEquals("getEntityListenerProvider", e.getMethodName());
7572
}
7673
}
7774

src/test/resources/org/seasar/doma/internal/apt/entity/EntityProcessorTest_Abstract.txt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -101,47 +101,47 @@ public final class _AbstractEntity extends org.seasar.doma.jdbc.entity.AbstractE
101101
@Override
102102
public void preInsert(org.seasar.doma.internal.apt.entity.AbstractEntity entity, org.seasar.doma.jdbc.entity.PreInsertContext<org.seasar.doma.internal.apt.entity.AbstractEntity> context) {
103103
Class __listenerClass = org.seasar.doma.jdbc.entity.NullEntityListener.class;
104-
org.seasar.doma.jdbc.entity.NullEntityListener __listener = context.getConfig().getEntityListener(__listenerClass, __listenerSupplier);
104+
org.seasar.doma.jdbc.entity.NullEntityListener __listener = context.getConfig().getEntityListenerProvider().get(__listenerClass, __listenerSupplier);
105105
__listener.preInsert(entity, context);
106106
}
107107

108108
@SuppressWarnings({"rawtypes", "unchecked"})
109109
@Override
110110
public void preUpdate(org.seasar.doma.internal.apt.entity.AbstractEntity entity, org.seasar.doma.jdbc.entity.PreUpdateContext<org.seasar.doma.internal.apt.entity.AbstractEntity> context) {
111111
Class __listenerClass = org.seasar.doma.jdbc.entity.NullEntityListener.class;
112-
org.seasar.doma.jdbc.entity.NullEntityListener __listener = context.getConfig().getEntityListener(__listenerClass, __listenerSupplier);
112+
org.seasar.doma.jdbc.entity.NullEntityListener __listener = context.getConfig().getEntityListenerProvider().get(__listenerClass, __listenerSupplier);
113113
__listener.preUpdate(entity, context);
114114
}
115115

116116
@SuppressWarnings({"rawtypes", "unchecked"})
117117
@Override
118118
public void preDelete(org.seasar.doma.internal.apt.entity.AbstractEntity entity, org.seasar.doma.jdbc.entity.PreDeleteContext<org.seasar.doma.internal.apt.entity.AbstractEntity> context) {
119119
Class __listenerClass = org.seasar.doma.jdbc.entity.NullEntityListener.class;
120-
org.seasar.doma.jdbc.entity.NullEntityListener __listener = context.getConfig().getEntityListener(__listenerClass, __listenerSupplier);
120+
org.seasar.doma.jdbc.entity.NullEntityListener __listener = context.getConfig().getEntityListenerProvider().get(__listenerClass, __listenerSupplier);
121121
__listener.preDelete(entity, context);
122122
}
123123

124124
@SuppressWarnings({"rawtypes", "unchecked"})
125125
@Override
126126
public void postInsert(org.seasar.doma.internal.apt.entity.AbstractEntity entity, org.seasar.doma.jdbc.entity.PostInsertContext<org.seasar.doma.internal.apt.entity.AbstractEntity> context) {
127127
Class __listenerClass = org.seasar.doma.jdbc.entity.NullEntityListener.class;
128-
org.seasar.doma.jdbc.entity.NullEntityListener __listener = context.getConfig().getEntityListener(__listenerClass, __listenerSupplier);
128+
org.seasar.doma.jdbc.entity.NullEntityListener __listener = context.getConfig().getEntityListenerProvider().get(__listenerClass, __listenerSupplier);
129129
__listener.postInsert(entity, context);
130130
}
131131

132132
@SuppressWarnings({"rawtypes", "unchecked"})
133133
@Override
134134
public void postUpdate(org.seasar.doma.internal.apt.entity.AbstractEntity entity, org.seasar.doma.jdbc.entity.PostUpdateContext<org.seasar.doma.internal.apt.entity.AbstractEntity> context) {
135135
Class __listenerClass = org.seasar.doma.jdbc.entity.NullEntityListener.class;
136-
org.seasar.doma.jdbc.entity.NullEntityListener __listener = context.getConfig().getEntityListener(__listenerClass, __listenerSupplier);
136+
org.seasar.doma.jdbc.entity.NullEntityListener __listener = context.getConfig().getEntityListenerProvider().get(__listenerClass, __listenerSupplier);
137137
__listener.postUpdate(entity, context);
138138
}
139139

140140
@SuppressWarnings({"rawtypes", "unchecked"})
141141
@Override
142142
public void postDelete(org.seasar.doma.internal.apt.entity.AbstractEntity entity, org.seasar.doma.jdbc.entity.PostDeleteContext<org.seasar.doma.internal.apt.entity.AbstractEntity> context) {
143143
Class __listenerClass = org.seasar.doma.jdbc.entity.NullEntityListener.class;
144-
org.seasar.doma.jdbc.entity.NullEntityListener __listener = context.getConfig().getEntityListener(__listenerClass, __listenerSupplier);
144+
org.seasar.doma.jdbc.entity.NullEntityListener __listener = context.getConfig().getEntityListenerProvider().get(__listenerClass, __listenerSupplier);
145145
__listener.postDelete(entity, context);
146146
}
147147

src/test/resources/org/seasar/doma/internal/apt/entity/EntityProcessorTest_BytesProperty.txt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -100,47 +100,47 @@ public final class _BytesPropertyEntity extends org.seasar.doma.jdbc.entity.Abst
100100
@Override
101101
public void preInsert(org.seasar.doma.internal.apt.entity.BytesPropertyEntity entity, org.seasar.doma.jdbc.entity.PreInsertContext<org.seasar.doma.internal.apt.entity.BytesPropertyEntity> context) {
102102
Class __listenerClass = org.seasar.doma.jdbc.entity.NullEntityListener.class;
103-
org.seasar.doma.jdbc.entity.NullEntityListener __listener = context.getConfig().getEntityListener(__listenerClass, __listenerSupplier);
103+
org.seasar.doma.jdbc.entity.NullEntityListener __listener = context.getConfig().getEntityListenerProvider().get(__listenerClass, __listenerSupplier);
104104
__listener.preInsert(entity, context);
105105
}
106106

107107
@SuppressWarnings({"rawtypes", "unchecked"})
108108
@Override
109109
public void preUpdate(org.seasar.doma.internal.apt.entity.BytesPropertyEntity entity, org.seasar.doma.jdbc.entity.PreUpdateContext<org.seasar.doma.internal.apt.entity.BytesPropertyEntity> context) {
110110
Class __listenerClass = org.seasar.doma.jdbc.entity.NullEntityListener.class;
111-
org.seasar.doma.jdbc.entity.NullEntityListener __listener = context.getConfig().getEntityListener(__listenerClass, __listenerSupplier);
111+
org.seasar.doma.jdbc.entity.NullEntityListener __listener = context.getConfig().getEntityListenerProvider().get(__listenerClass, __listenerSupplier);
112112
__listener.preUpdate(entity, context);
113113
}
114114

115115
@SuppressWarnings({"rawtypes", "unchecked"})
116116
@Override
117117
public void preDelete(org.seasar.doma.internal.apt.entity.BytesPropertyEntity entity, org.seasar.doma.jdbc.entity.PreDeleteContext<org.seasar.doma.internal.apt.entity.BytesPropertyEntity> context) {
118118
Class __listenerClass = org.seasar.doma.jdbc.entity.NullEntityListener.class;
119-
org.seasar.doma.jdbc.entity.NullEntityListener __listener = context.getConfig().getEntityListener(__listenerClass, __listenerSupplier);
119+
org.seasar.doma.jdbc.entity.NullEntityListener __listener = context.getConfig().getEntityListenerProvider().get(__listenerClass, __listenerSupplier);
120120
__listener.preDelete(entity, context);
121121
}
122122

123123
@SuppressWarnings({"rawtypes", "unchecked"})
124124
@Override
125125
public void postInsert(org.seasar.doma.internal.apt.entity.BytesPropertyEntity entity, org.seasar.doma.jdbc.entity.PostInsertContext<org.seasar.doma.internal.apt.entity.BytesPropertyEntity> context) {
126126
Class __listenerClass = org.seasar.doma.jdbc.entity.NullEntityListener.class;
127-
org.seasar.doma.jdbc.entity.NullEntityListener __listener = context.getConfig().getEntityListener(__listenerClass, __listenerSupplier);
127+
org.seasar.doma.jdbc.entity.NullEntityListener __listener = context.getConfig().getEntityListenerProvider().get(__listenerClass, __listenerSupplier);
128128
__listener.postInsert(entity, context);
129129
}
130130

131131
@SuppressWarnings({"rawtypes", "unchecked"})
132132
@Override
133133
public void postUpdate(org.seasar.doma.internal.apt.entity.BytesPropertyEntity entity, org.seasar.doma.jdbc.entity.PostUpdateContext<org.seasar.doma.internal.apt.entity.BytesPropertyEntity> context) {
134134
Class __listenerClass = org.seasar.doma.jdbc.entity.NullEntityListener.class;
135-
org.seasar.doma.jdbc.entity.NullEntityListener __listener = context.getConfig().getEntityListener(__listenerClass, __listenerSupplier);
135+
org.seasar.doma.jdbc.entity.NullEntityListener __listener = context.getConfig().getEntityListenerProvider().get(__listenerClass, __listenerSupplier);
136136
__listener.postUpdate(entity, context);
137137
}
138138

139139
@SuppressWarnings({"rawtypes", "unchecked"})
140140
@Override
141141
public void postDelete(org.seasar.doma.internal.apt.entity.BytesPropertyEntity entity, org.seasar.doma.jdbc.entity.PostDeleteContext<org.seasar.doma.internal.apt.entity.BytesPropertyEntity> context) {
142142
Class __listenerClass = org.seasar.doma.jdbc.entity.NullEntityListener.class;
143-
org.seasar.doma.jdbc.entity.NullEntityListener __listener = context.getConfig().getEntityListener(__listenerClass, __listenerSupplier);
143+
org.seasar.doma.jdbc.entity.NullEntityListener __listener = context.getConfig().getEntityListenerProvider().get(__listenerClass, __listenerSupplier);
144144
__listener.postDelete(entity, context);
145145
}
146146

0 commit comments

Comments
 (0)