Skip to content

Commit 84dd560

Browse files
arnaud-mergeyamergey
arnaud-mergey
authored andcommitted
ARIES-1993 support for spring 5 and 6
1 parent d23d9ec commit 84dd560

File tree

3 files changed

+87
-11
lines changed

3 files changed

+87
-11
lines changed

blueprint/blueprint-spring/pom.xml

+9-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,10 @@
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>5.3.39</spring.version>
6465
<!--
6566
<lastReleaseVersion>1.0.4</lastReleaseVersion>
6667
-->
@@ -119,13 +120,13 @@
119120
<dependency>
120121
<groupId>org.springframework</groupId>
121122
<artifactId>spring-context</artifactId>
122-
<version>4.2.2.RELEASE</version>
123+
<version>${spring.version}</version>
123124
<scope>provided</scope>
124125
</dependency>
125126
<dependency>
126127
<groupId>org.springframework</groupId>
127128
<artifactId>spring-beans</artifactId>
128-
<version>4.2.2.RELEASE</version>
129+
<version>${spring.version}</version>
129130
<scope>provided</scope>
130131
</dependency>
131132
<dependency>
@@ -178,13 +179,13 @@
178179
<dependency>
179180
<groupId>org.springframework</groupId>
180181
<artifactId>spring-tx</artifactId>
181-
<version>4.2.2.RELEASE</version>
182+
<version>${spring.version}</version>
182183
<scope>test</scope>
183184
</dependency>
184185
<dependency>
185186
<groupId>org.springframework</groupId>
186187
<artifactId>spring-aop</artifactId>
187-
<version>4.2.2.RELEASE</version>
188+
<version>${spring.version}</version>
188189
<scope>test</scope>
189190
</dependency>
190191
</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)