[
https://issues.apache.org/jira/browse/ARIES-703?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Timothy Ward resolved ARIES-703.
--------------------------------
Resolution: Fixed
Fix Version/s: blueprint-0.4.0
> JDKProxyManager cannot proxy blueprint beans
> --------------------------------------------
>
> Key: ARIES-703
> URL: https://issues.apache.org/jira/browse/ARIES-703
> Project: Aries
> Issue Type: Bug
> Components: Blueprint
> Environment: Glassfish 3.1
> Reporter: Balazs Zsoldos
> Assignee: Timothy Ward
> Fix For: blueprint-0.4.0
>
>
> When there is no ASM between the bundles and aries proxy is installed the
> default proxy manager is JDKProxyManager. When there is a bean in a blueprint
> fragment that has for example tx:transaction inside creating the
> transactional proxy fails with the following stacktrace:
> [#|2011-07-06T14:29:24.542+0200|SEVERE|glassfish3.1|org.apache.aries.blueprint.container.BlueprintContainerImpl|_ThreadID=27;_ThreadName=Thread-1;|Unable
> to start blueprint container for bundle
> biz.everit.audit.persistence.biz.everit.audit.persistence.impl
> org.osgi.service.blueprint.container.ComponentDefinitionException: Unable to
> create proxy for bean eventPersistenceImpl in bundle
> biz.everit.audit.persistence.biz.everit.audit.persistence.impl version
> 0.1.0.SNAPSHOT
> at
> org.apache.aries.blueprint.container.BeanRecipe.addInterceptors(BeanRecipe.java:695)
> at
> org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:730)
> at
> org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:71)
> at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
> at java.util.concurrent.FutureTask.run(FutureTask.java:138)
> at
> org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:79)
> at
> org.apache.aries.blueprint.di.RefRecipe.internalCreate(RefRecipe.java:60)
> at
> org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:98)
> at
> org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:220)
> at
> org.apache.aries.blueprint.container.BlueprintRepository.createInstance(BlueprintRepository.java:205)
> at
> org.apache.aries.blueprint.container.BlueprintRepository.create(BlueprintRepository.java:144)
> at
> org.apache.aries.blueprint.container.ServiceRecipe.createRecipe(ServiceRecipe.java:398)
> at
> org.apache.aries.blueprint.container.ServiceRecipe.createService(ServiceRecipe.java:271)
> at
> org.apache.aries.blueprint.container.ServiceRecipe.internalGetService(ServiceRecipe.java:243)
> at
> org.apache.aries.blueprint.container.ServiceRecipe.getService(ServiceRecipe.java:320)
> at
> org.apache.aries.blueprint.container.ServiceRecipe$TriggerServiceFactory.getService(ServiceRecipe.java:465)
> at
> org.apache.felix.framework.ServiceRegistrationImpl.getFactoryUnchecked(ServiceRegistrationImpl.java:310)
> at
> org.apache.felix.framework.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:221)
> at
> org.apache.felix.framework.ServiceRegistry.getService(ServiceRegistry.java:297)
> at org.apache.felix.framework.Felix.getService(Felix.java:3014)
> at
> org.apache.felix.framework.BundleContextImpl.getService(BundleContextImpl.java:329)
> at
> org.jvnet.hk2.osgiadapter.HK2Main$HK2ServiceTrackerCustomizer.addingService(HK2Main.java:260)
> at
> org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:896)
> at
> org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:261)
> at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:233)
> at
> org.osgi.util.tracker.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:840)
> at
> org.apache.felix.framework.util.EventDispatcher.invokeServiceListenerCallback(EventDispatcher.java:871)
> at
> org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:733)
> at
> org.apache.felix.framework.util.EventDispatcher.fireServiceEvent(EventDispatcher.java:662)
> at org.apache.felix.framework.Felix.fireServiceEvent(Felix.java:3769)
> at org.apache.felix.framework.Felix.access$000(Felix.java:80)
> at org.apache.felix.framework.Felix$2.serviceChanged(Felix.java:722)
> at
> org.apache.felix.framework.ServiceRegistry.registerService(ServiceRegistry.java:107)
> at org.apache.felix.framework.Felix.registerService(Felix.java:2854)
> at
> org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:251)
> at
> org.apache.aries.blueprint.container.BlueprintContainerImpl.registerService(BlueprintContainerImpl.java:408)
> at
> org.apache.aries.blueprint.container.ServiceRecipe.register(ServiceRecipe.java:187)
> at
> org.apache.aries.blueprint.container.BlueprintContainerImpl.registerServices(BlueprintContainerImpl.java:666)
> at
> org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:334)
> at
> org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:230)
> at
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
> at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
> at java.util.concurrent.FutureTask.run(FutureTask.java:138)
> at
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98)
> at
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:206)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
> at java.lang.Thread.run(Thread.java:662)
> Caused by: org.apache.aries.proxy.UnableToProxyException: The class
> biz.everit.audit.persistence.impl.EventPersistenceServiceImpl is not an
> interface and therefore a proxy cannot be generated.
> at
> org.apache.aries.proxy.impl.JdkProxyManager.getInterfaces(JdkProxyManager.java:43)
> at
> org.apache.aries.proxy.impl.JdkProxyManager.createNewProxy(JdkProxyManager.java:36)
> at
> org.apache.aries.proxy.impl.AbstractProxyManager.createDelegatingInterceptingProxy(AbstractProxyManager.java:75)
> at
> org.apache.aries.proxy.impl.AbstractProxyManager.createInterceptingProxy(AbstractProxyManager.java:53)
> at
> org.apache.aries.blueprint.container.BeanRecipe.addInterceptors(BeanRecipe.java:690)
> ... 47 more
> It will always happen as we have the following line in BeanRecepe:
> intercepted = BlueprintExtender.getProxyManager().createInterceptingProxy(b,
> ProxyUtils.asList(original.getClass()), original,
> new Collaborator(interceptorLookupKey, interceptors));
> That means that the interface list is the class of the bean itself that is
> cannot be an interface. In case of JDKProxy we should derive the interfaces
> that the bean implements and those interface classes should be passed.
> However at this level (BeanRecipe) we do not know about the proxy manager...
> The example blueprint file for this:
> <bean id="eventPersistenceImpl"
> class="biz.everit.audit.persistence.impl.EventPersistenceServiceImpl">
> <tx:transaction method="*" value="Required" />
> <jpa:context property="em"
> unitname="biz.everit.audit.persistence.entity" type="TRANSACTION" />
> </bean>
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira