Hi,
We are currently facing some issue with Blueprint and generic constructors
while we are moving from Java 8 to Java 11.
We used Karaf 4.1.1 which uses Aries Blueprint 1.8.0 to Karaf 4.2.6 which uses
aries Blueprint 1.10.2
While we are trying to instantiate any Bean with a generic types constructor,
we receive an exception like this one:
org.osgi.service.blueprint.container.ComponentDefinitionException: Unable to
instantiate components
at
org.apache.aries.blueprint.container.BlueprintContainerImpl.instantiateEagerComponents(BlueprintContainerImpl.java:741)
~[102:org.apache.aries.blueprint.core:1.10.2]
at
org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:433)
[102:org.apache.aries.blueprint.core:1.10.2]
at
org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:298)
[102:org.apache.aries.blueprint.core:1.10.2]
at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [?:?]
at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
at
org.apache.aries.blueprint.container.ExecutorServiceWrapper.run(ExecutorServiceWrapper.java:106)
[102:org.apache.aries.blueprint.core:1.10.2]
at
org.apache.aries.blueprint.utils.threading.impl.DiscardableRunnable.run(DiscardableRunnable.java:45)
[102:org.apache.aries.blueprint.core:1.10.2]
at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [?:?]
at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
[?:?]
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
[?:?]
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
[?:?]
at java.lang.Thread.run(Thread.java:834) [?:?]
Caused by: java.lang.RuntimeException: Unknown type T
at
org.apache.aries.blueprint.utils.generics.TypeInference.getParameters(TypeInference.java:449)
~[?:?]
at
org.apache.aries.blueprint.utils.generics.TypeInference.match(TypeInference.java:262)
~[?:?]
at
org.apache.aries.blueprint.utils.generics.TypeInference.findMatching(TypeInference.java:231)
~[?:?]
at
org.apache.aries.blueprint.utils.generics.TypeInference.findMatchingConstructors(TypeInference.java:125)
~[?:?]
at
org.apache.aries.blueprint.container.BeanRecipe.findMatchingConstructors(BeanRecipe.java:373)
~[?:?]
at
org.apache.aries.blueprint.container.BeanRecipe.getInstanceFromType(BeanRecipe.java:346)
~[?:?]
at
org.apache.aries.blueprint.container.BeanRecipe.getInstance(BeanRecipe.java:283)
~[?:?]
at
org.apache.aries.blueprint.container.BeanRecipe.internalCreate2(BeanRecipe.java:685)
~[?:?]
at
org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:666)
~[?:?]
at
org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:81)
~[?:?]
at java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[?:?]
at
org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:90)
~[?:?]
at
org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:360)
~[?:?]
at
org.apache.aries.blueprint.container.BlueprintRepository.createAll(BlueprintRepository.java:190)
~[?:?]
at
org.apache.aries.blueprint.container.BlueprintContainerImpl.instantiateEagerComponents(BlueprintContainerImpl.java:737)
~[?:?]
... 12 more
In our case we tried to instantiate a SimpleObjectProperty from the javafx
package, and the constructor is like :
public class SimpleObjectProperty<T> extends ObjectPropertyBase<T> {
..
public SimpleObjectProperty() {
..
}
public SimpleObjectProperty(T var) {
...
}
}
If we try to use the non-generic constructor all went fine, but anytime we use
the second constructor, the matching of constructors failed with a
RuntimeException.
Before the migration we had the same blueprint definition and the same
blueprint beans, only the migration from JDK and Karaf (Which so move the Aries
Blueprint version from 1.8.0 to 1.10.2
Is there any chance we made something wrong during migration ?
[@@ OPEN @@]