Skip to content

Commit 91cdac4

Browse files
committed
as suggested by TODO in code, make ContainedBean extend ManagedBean
1 parent c5eba23 commit 91cdac4

12 files changed

+143
-84
lines changed

hibernate-core/src/main/java/org/hibernate/resource/beans/container/internal/CdiBeanContainerDelayedAccessImpl.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,11 @@ private BeanImpl(
5959
this.fallbackProducer = fallbackProducer;
6060
}
6161

62+
@Override
63+
public Class<B> getBeanClass() {
64+
return beanType;
65+
}
66+
6267
@Override
6368
public void initialize() {
6469
if ( delegateBean == null ) {
@@ -99,6 +104,11 @@ private NamedBeanImpl(
99104
this.fallbackProducer = fallbackProducer;
100105
}
101106

107+
@Override
108+
public Class<B> getBeanClass() {
109+
return beanType;
110+
}
111+
102112
@Override
103113
public void initialize() {
104114
if ( delegateBean == null ) {

hibernate-core/src/main/java/org/hibernate/resource/beans/container/internal/CdiBeanContainerExtendedAccessImpl.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,10 @@ private BeanImpl(
104104
this.fallbackProducer = fallbackProducer;
105105
}
106106

107+
@Override
108+
public Class<B> getBeanClass() {
109+
return beanType;
110+
}
107111

108112
@Override
109113
public void initialize() {
@@ -147,15 +151,16 @@ private NamedBeanImpl(
147151
this.fallbackProducer = fallbackProducer;
148152
}
149153

154+
@Override
155+
public Class<B> getBeanClass() {
156+
return beanType;
157+
}
158+
150159
@Override
151160
public void initialize() {
152161
if ( delegateContainedBean == null ) {
153-
delegateContainedBean = lifecycleStrategy.createBean(
154-
name,
155-
beanType,
156-
fallbackProducer,
157-
DUMMY_BEAN_CONTAINER
158-
);
162+
delegateContainedBean =
163+
lifecycleStrategy.createBean( name, beanType, fallbackProducer, DUMMY_BEAN_CONTAINER );
159164
delegateContainedBean.initialize();
160165
}
161166
}

hibernate-core/src/main/java/org/hibernate/resource/beans/container/internal/ContainerManagedLifecycleStrategy.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,11 @@ private AbstractBeanImpl(
7272
this.beanManager = beanManager;
7373
}
7474

75+
@Override
76+
public Class<B> getBeanClass() {
77+
return beanType;
78+
}
79+
7580
@Override
7681
public B getBeanInstance() {
7782
if ( beanInstance == null ) {

hibernate-core/src/main/java/org/hibernate/resource/beans/container/internal/JpaCompliantLifecycleStrategy.java

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

1818
import org.jboss.logging.Logger;
1919

20+
import java.util.Set;
21+
2022
/**
2123
* A {@link BeanLifecycleStrategy} to use when JPA compliance is required
2224
* (i.e. when the bean lifecycle is to be managed by the JPA runtime, not the CDI runtime).
@@ -77,15 +79,17 @@ private static class BeanImpl<B> implements ContainedBeanImplementor<B> {
7779

7880
private B beanInstance;
7981

80-
public BeanImpl(
81-
Class<B> beanType,
82-
BeanInstanceProducer fallbackProducer,
83-
BeanManager beanManager) {
82+
public BeanImpl(Class<B> beanType, BeanInstanceProducer fallbackProducer, BeanManager beanManager) {
8483
this.beanType = beanType;
8584
this.fallbackProducer = fallbackProducer;
8685
this.beanManager = beanManager;
8786
}
8887

88+
@Override
89+
public Class<B> getBeanClass() {
90+
return beanType;
91+
}
92+
8993
@Override
9094
public B getBeanInstance() {
9195
if ( beanInstance == null ) {
@@ -205,6 +209,11 @@ private NamedBeanImpl(
205209
this.beanManager = beanManager;
206210
}
207211

212+
@Override
213+
public Class<B> getBeanClass() {
214+
return beanType;
215+
}
216+
208217
@Override
209218
public B getBeanInstance() {
210219
if ( beanInstance == null ) {
@@ -214,7 +223,6 @@ public B getBeanInstance() {
214223
}
215224

216225
@Override
217-
@SuppressWarnings("unchecked")
218226
public void initialize() {
219227
if ( beanInstance != null ) {
220228
return;
@@ -243,8 +251,7 @@ public void initialize() {
243251
}
244252

245253
try {
246-
bean = (Bean<B>) beanManager.resolve( beanManager.getBeans( beanType,
247-
new NamedBeanQualifier( beanName ) ) );
254+
bean = resolveBean();
248255
beanInstance = bean.create( creationalContext );
249256
}
250257
catch (Exception e) {
@@ -264,6 +271,12 @@ public void initialize() {
264271
}
265272
}
266273

274+
@SuppressWarnings("unchecked")
275+
private Bean<B> resolveBean() {
276+
final Set<Bean<?>> beans = beanManager.getBeans( beanType, new NamedBeanQualifier( beanName ) );
277+
return (Bean<B>) beanManager.resolve( beans );
278+
}
279+
267280
@Override
268281
public void release() {
269282
if ( beanInstance == null ) {

hibernate-core/src/main/java/org/hibernate/resource/beans/container/spi/ContainedBean.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,10 @@
44
*/
55
package org.hibernate.resource.beans.container.spi;
66

7+
import org.hibernate.resource.beans.spi.ManagedBean;
8+
79
/**
810
* @author Steve Ebersole
911
*/
10-
public interface ContainedBean<B> {
11-
// todo (5.3) : can we combine ContainedBean and org.hibernate.resource.beans.spi.ManagedBean into the same thing?
12-
/**
13-
* Get the bean instance producer associated with this container-backed bean
14-
*/
15-
B getBeanInstance();
12+
public interface ContainedBean<B> extends ManagedBean<B> {
1613
}

hibernate-core/src/main/java/org/hibernate/resource/beans/container/spi/ContainedBeanImplementor.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
package org.hibernate.resource.beans.container.spi;
66

77
/**
8-
* Release-able extension to {@link ContainedBean}. We make the split to make it
9-
* clear that generally speaking the callers to BeanContainer should not perform
10-
* the release
8+
* Releasable extension to {@link ContainedBean}. We make this split to clarify
9+
* that clients of {@link BeanContainer} are not usually responsible for calling
10+
* {@link #initialize()} and {@link #release()}.
1111
*
1212
* @author Steve Ebersole
1313
*/

hibernate-core/src/main/java/org/hibernate/resource/beans/internal/ManagedBeanRegistryImpl.java

Lines changed: 6 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import java.util.Map;
99

1010
import org.hibernate.resource.beans.container.spi.BeanContainer;
11-
import org.hibernate.resource.beans.container.spi.ContainedBean;
1211
import org.hibernate.resource.beans.container.spi.FallbackContainedBean;
1312
import org.hibernate.resource.beans.spi.BeanInstanceProducer;
1413
import org.hibernate.resource.beans.spi.ManagedBean;
@@ -87,38 +86,16 @@ public <T> ManagedBean<T> getBean(
8786
}
8887

8988
private <T> ManagedBean<T> createBean(Class<T> beanClass, BeanInstanceProducer fallbackBeanInstanceProducer) {
90-
if ( beanContainer == null ) {
91-
return new FallbackContainedBean<>( beanClass, fallbackBeanInstanceProducer );
92-
}
93-
else {
94-
final ContainedBean<T> containedBean =
95-
beanContainer.getBean( beanClass, this, fallbackBeanInstanceProducer );
96-
if ( containedBean instanceof ManagedBean ) {
97-
//noinspection unchecked
98-
return (ManagedBean<T>) containedBean;
99-
}
100-
else {
101-
return new ContainedBeanManagedBeanAdapter<>( beanClass, containedBean );
102-
}
103-
}
89+
return beanContainer == null
90+
? new FallbackContainedBean<>( beanClass, fallbackBeanInstanceProducer )
91+
: beanContainer.getBean( beanClass, this, fallbackBeanInstanceProducer );
10492
}
10593

10694
private <T> ManagedBean<T> createBean(
10795
String beanName, Class<T> beanContract, BeanInstanceProducer fallbackBeanInstanceProducer) {
108-
if ( beanContainer == null ) {
109-
return new FallbackContainedBean<>( beanName, beanContract, fallbackBeanInstanceProducer );
110-
}
111-
else {
112-
final ContainedBean<T> containedBean =
113-
beanContainer.getBean( beanName, beanContract, this, fallbackBeanInstanceProducer );
114-
if ( containedBean instanceof ManagedBean ) {
115-
//noinspection unchecked
116-
return (ManagedBean<T>) containedBean;
117-
}
118-
else {
119-
return new ContainedBeanManagedBeanAdapter<>( beanContract, containedBean );
120-
}
121-
}
96+
return beanContainer == null
97+
? new FallbackContainedBean<>( beanName, beanContract, fallbackBeanInstanceProducer )
98+
: beanContainer.getBean( beanName, beanContract, this, fallbackBeanInstanceProducer );
12299
}
123100

124101
@Override
@@ -128,24 +105,4 @@ public void stop() {
128105
}
129106
registrations.clear();
130107
}
131-
132-
private static class ContainedBeanManagedBeanAdapter<B> implements ManagedBean<B> {
133-
private final Class<B> beanClass;
134-
private final ContainedBean<B> containedBean;
135-
136-
private ContainedBeanManagedBeanAdapter(Class<B> beanClass, ContainedBean<B> containedBean) {
137-
this.beanClass = beanClass;
138-
this.containedBean = containedBean;
139-
}
140-
141-
@Override
142-
public Class<B> getBeanClass() {
143-
return beanClass;
144-
}
145-
146-
@Override
147-
public B getBeanInstance() {
148-
return containedBean.getBeanInstance();
149-
}
150-
}
151108
}

hibernate-core/src/test/java/org/hibernate/orm/test/connections/ConnectionProviderFromBeanContainerTest.java

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,17 +42,35 @@ public <B> ContainedBean<B> getBean(
4242
Class<B> beanType,
4343
LifecycleOptions lifecycleOptions,
4444
BeanInstanceProducer fallbackProducer) {
45-
return () -> (B) ( beanType == DummyConnectionProvider.class ?
46-
dummyConnectionProvider : fallbackProducer.produceBeanInstance( beanType ) );
45+
return new ContainedBean<>() {
46+
@Override
47+
public B getBeanInstance() {
48+
return (B) (beanType == DummyConnectionProvider.class ?
49+
dummyConnectionProvider : fallbackProducer.produceBeanInstance( beanType ) );
50+
}
51+
52+
@Override
53+
public Class<B> getBeanClass() {
54+
return beanType;
55+
}
56+
};
4757
}
48-
4958
@Override
5059
public <B> ContainedBean<B> getBean(
5160
String name,
5261
Class<B> beanType,
5362
LifecycleOptions lifecycleOptions,
5463
BeanInstanceProducer fallbackProducer) {
55-
return () -> (B) fallbackProducer.produceBeanInstance( beanType );
64+
return new ContainedBean<>() {
65+
@Override
66+
public B getBeanInstance() {
67+
return fallbackProducer.produceBeanInstance( beanType );
68+
}
69+
@Override
70+
public Class<B> getBeanClass() {
71+
return beanType;
72+
}
73+
};
5674
}
5775

5876
@Override

hibernate-core/src/test/java/org/hibernate/orm/test/idgen/userdefined/SimpleBeanContainer.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,17 @@ public <B> ContainedBean<B> getBean(
2323
Class<B> beanType,
2424
LifecycleOptions lifecycleOptions,
2525
BeanInstanceProducer fallbackProducer) {
26-
return () -> (B) ( beanType == SimpleGenerator.class ?
27-
new SimpleGenerator( new AtomicLong( INITIAL_VALUE ) ) : fallbackProducer.produceBeanInstance( beanType ) );
26+
return new ContainedBean<>() {
27+
@Override
28+
public B getBeanInstance() {
29+
return (B) (beanType == SimpleGenerator.class ?
30+
new SimpleGenerator( new AtomicLong( INITIAL_VALUE ) ) : fallbackProducer.produceBeanInstance( beanType ) );
31+
}
32+
@Override
33+
public Class<B> getBeanClass() {
34+
return beanType;
35+
}
36+
};
2837
}
2938

3039
@Override

hibernate-core/src/test/java/org/hibernate/orm/test/idgen/userdefined/UserDefinedGeneratorsTests.java

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,28 @@ public void testCreateGeneratorsByBeanContainer() {
6565
if (beanType == TestIdentifierGenerator.class) {
6666
assertThat( options.canUseCachedReferences(), is( false ) );
6767
assertThat( options.useJpaCompliantCreation(), is( true ) );
68-
return (ContainedBean<?>) TestIdentifierGenerator::new;
68+
return new ContainedBean<TestIdentifierGenerator>() {
69+
@Override
70+
public TestIdentifierGenerator getBeanInstance() {
71+
return new TestIdentifierGenerator();
72+
}
73+
@Override
74+
public Class<TestIdentifierGenerator> getBeanClass() {
75+
return TestIdentifierGenerator.class;
76+
}
77+
};
6978
}
7079
else {
71-
return (ContainedBean<?>) () -> ( ( BeanInstanceProducer ) invocation.getArguments()[2] ).produceBeanInstance( beanType );
80+
return new ContainedBean<>() {
81+
@Override
82+
public Object getBeanInstance() {
83+
return ( ( BeanInstanceProducer ) invocation.getArguments()[2] ).produceBeanInstance( beanType );
84+
}
85+
@Override
86+
public Class getBeanClass() {
87+
return beanType;
88+
}
89+
};
7290
}
7391
} );
7492

hibernate-core/src/test/java/org/hibernate/orm/test/multitenancy/beancontainer/MultiTenantConnectionProviderFromBeanContainerTest.java

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,16 @@ public <B> ContainedBean<B> getBean(
4343
Class<B> beanType,
4444
LifecycleOptions lifecycleOptions,
4545
BeanInstanceProducer fallbackProducer) {
46-
return () -> (B) ( beanType == MultiTenantConnectionProvider.class ? providerFromBeanContainer : fallbackProducer.produceBeanInstance( beanType ) );
46+
return new ContainedBean<>() {
47+
@Override
48+
public B getBeanInstance() {
49+
return (B) (beanType == MultiTenantConnectionProvider.class ? providerFromBeanContainer : fallbackProducer.produceBeanInstance( beanType ) );
50+
}
51+
@Override
52+
public Class<B> getBeanClass() {
53+
return beanType;
54+
}
55+
};
4756
}
4857

4958
@Override
@@ -52,7 +61,16 @@ public <B> ContainedBean<B> getBean(
5261
Class<B> beanType,
5362
LifecycleOptions lifecycleOptions,
5463
BeanInstanceProducer fallbackProducer) {
55-
return () -> (B) fallbackProducer.produceBeanInstance( beanType );
64+
return new ContainedBean<>() {
65+
@Override
66+
public B getBeanInstance() {
67+
return fallbackProducer.produceBeanInstance( beanType );
68+
}
69+
@Override
70+
public Class<B> getBeanClass() {
71+
return beanType;
72+
}
73+
};
5674
}
5775

5876
@Override

0 commit comments

Comments
 (0)