aries-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Balazs Zsoldos (JIRA)" <j...@apache.org>
Subject [jira] [Created] (ARIES-703) JDKProxyManager cannot proxy blueprint beans
Date Wed, 06 Jul 2011 12:41:16 GMT
JDKProxyManager cannot proxy blueprint beans
--------------------------------------------

                 Key: ARIES-703
                 URL: https://issues.apache.org/jira/browse/ARIES-703
             Project: Aries
          Issue Type: Bug
          Components: Proxy
         Environment: Glassfish 3.1
            Reporter: Balazs Zsoldos


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.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Mime
View raw message