Skip to content

Commit fd6c3d7

Browse files
arnaud-mergeyamergey
arnaud-mergey
authored andcommitted
ARIES-1993 support for spring 6
1 parent d23d9ec commit fd6c3d7

File tree

3 files changed

+89
-11
lines changed

3 files changed

+89
-11
lines changed

blueprint/blueprint-spring/pom.xml

+11-8
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
<parent>
2525
<groupId>org.apache.aries.blueprint</groupId>
2626
<artifactId>blueprint-parent</artifactId>
27-
<version>1.0.0</version>
27+
<version>1.0.1-SNAPSHOT</version>
2828
<relativePath>../blueprint-parent/pom.xml</relativePath>
2929
</parent>
3030

@@ -58,9 +58,12 @@
5858
<aries.osgi.activator>
5959
org.apache.aries.blueprint.spring.Activator
6060
</aries.osgi.activator>
61-
<blueprint.api.version>1.0.0</blueprint.api.version>
62-
<blueprint.core.version>1.9.0</blueprint.core.version>
63-
<blueprint.parser.version>1.5.0</blueprint.parser.version>
61+
<blueprint.api.version>1.0.1</blueprint.api.version>
62+
<blueprint.core.version>1.10.3</blueprint.core.version>
63+
<blueprint.parser.version>1.6.1</blueprint.parser.version>
64+
<spring.version>6.2.1</spring.version>
65+
<!-- spring 6 requires jdk 17 -->
66+
<maven.compiler.release>17</maven.compiler.release>
6467
<!--
6568
<lastReleaseVersion>1.0.4</lastReleaseVersion>
6669
-->
@@ -119,13 +122,13 @@
119122
<dependency>
120123
<groupId>org.springframework</groupId>
121124
<artifactId>spring-context</artifactId>
122-
<version>4.2.2.RELEASE</version>
125+
<version>${spring.version}</version>
123126
<scope>provided</scope>
124127
</dependency>
125128
<dependency>
126129
<groupId>org.springframework</groupId>
127130
<artifactId>spring-beans</artifactId>
128-
<version>4.2.2.RELEASE</version>
131+
<version>${spring.version}</version>
129132
<scope>provided</scope>
130133
</dependency>
131134
<dependency>
@@ -178,13 +181,13 @@
178181
<dependency>
179182
<groupId>org.springframework</groupId>
180183
<artifactId>spring-tx</artifactId>
181-
<version>4.2.2.RELEASE</version>
184+
<version>${spring.version}</version>
182185
<scope>test</scope>
183186
</dependency>
184187
<dependency>
185188
<groupId>org.springframework</groupId>
186189
<artifactId>spring-aop</artifactId>
187-
<version>4.2.2.RELEASE</version>
190+
<version>${spring.version}</version>
188191
<scope>test</scope>
189192
</dependency>
190193
</dependencies>

blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/BlueprintBeanFactory.java

+77-2
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@
1818

1919
import java.util.Arrays;
2020
import java.util.Collections;
21+
import java.util.HashSet;
2122
import java.util.List;
23+
import java.util.Set;
2224

2325
import org.apache.aries.blueprint.ComponentDefinitionRegistry;
2426
import org.apache.aries.blueprint.services.ExtendedBlueprintContainer;
@@ -37,11 +39,14 @@
3739
import org.springframework.beans.factory.BeanFactory;
3840
import org.springframework.beans.factory.BeanNotOfRequiredTypeException;
3941
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
42+
import org.springframework.beans.factory.NoUniqueBeanDefinitionException;
43+
import org.springframework.beans.factory.ObjectProvider;
4044
import org.springframework.beans.factory.config.BeanDefinition;
4145
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
4246
import org.springframework.core.ResolvableType;
4347
import org.springframework.core.io.Resource;
4448
import org.springframework.core.io.ResourceLoader;
49+
import org.springframework.lang.Nullable;
4550

4651
public class BlueprintBeanFactory extends DefaultListableBeanFactory implements ResourceLoader {
4752

@@ -123,7 +128,7 @@ public List<String> getDependsOn() {
123128

124129
@Override
125130
public String getClassName() {
126-
return null;
131+
return getDefinition().getBeanClassName();
127132
}
128133

129134
@Override
@@ -218,7 +223,30 @@ public <T> T getBean(String name, Class<T> requiredType) throws BeansException {
218223

219224
@Override
220225
public <T> T getBean(Class<T> requiredType) throws BeansException {
221-
throw new UnsupportedOperationException();
226+
T beanToReturn = null;
227+
Set<String> beanNames = new HashSet<String>();
228+
for (String name : container.getComponentIds()) {
229+
ComponentMetadata cmeta = container.getComponentMetadata(name);
230+
try {
231+
if (requiredType != null && cmeta != null && cmeta instanceof BeanMetadata
232+
&& ((BeanMetadata) cmeta).getClassName() != null
233+
&& !requiredType.isAssignableFrom(Class.forName(((BeanMetadata) cmeta).getClassName()))) {
234+
try {
235+
Object bean = getBean(name);
236+
bean = container.getConverter().convert(bean, new ReifiedType(requiredType));
237+
beanToReturn = (T) bean;
238+
beanNames.add(name);
239+
} catch (Exception ex) {
240+
}
241+
}
242+
} catch (ClassNotFoundException cfne) {
243+
244+
}
245+
}
246+
if (beanNames.size() > 1) {
247+
throw new NoUniqueBeanDefinitionException(requiredType, beanNames);
248+
}
249+
return beanToReturn;
222250
}
223251

224252
@Override
@@ -265,5 +293,52 @@ public Class<?> getType(String name) throws NoSuchBeanDefinitionException {
265293
public String[] getAliases(String name) {
266294
throw new UnsupportedOperationException();
267295
}
296+
297+
@Override
298+
public <T> ObjectProvider<T> getBeanProvider(final Class<T> requiredType) {
299+
return new ObjectProvider<T>() {
300+
@Override
301+
public T getObject() throws BeansException {
302+
return getBean(requiredType);
303+
}
304+
305+
@Override
306+
public T getObject(Object... args) throws BeansException {
307+
return getBean(requiredType, args);
308+
}
309+
310+
@Override
311+
@Nullable
312+
public T getIfAvailable() throws BeansException {
313+
try {
314+
return getBean(requiredType);
315+
} catch (NoUniqueBeanDefinitionException ex) {
316+
throw ex;
317+
} catch (NoSuchBeanDefinitionException ex) {
318+
return null;
319+
}
320+
}
321+
322+
@Override
323+
@Nullable
324+
public T getIfUnique() throws BeansException {
325+
try {
326+
return getBean(requiredType);
327+
} catch (NoSuchBeanDefinitionException ex) {
328+
return null;
329+
}
330+
}
331+
};
332+
}
333+
334+
@Override
335+
public <T> ObjectProvider<T> getBeanProvider(ResolvableType requiredType) {
336+
return (ObjectProvider<T>) getBeanProvider(requiredType.resolve());
337+
}
338+
339+
@Override
340+
public Class<?> getType(String name, boolean allowFactoryBeanInit) throws NoSuchBeanDefinitionException {
341+
return getBean(name).getClass();
342+
}
268343
}
269344
}

blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/BlueprintNamespaceHandler.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ private org.springframework.beans.factory.xml.ParserContext getOrCreateParserCon
147147
if (applicationContext == null) {
148148
applicationContext = new SpringApplicationContext(container);
149149
registry.registerComponentDefinition(createPassThrough(parserContext,
150-
SPRING_APPLICATION_CONTEXT_ID, applicationContext, "destroy"
150+
SPRING_APPLICATION_CONTEXT_ID, applicationContext, "close"
151151
));
152152
}
153153
// Create registry

0 commit comments

Comments
 (0)