Hi Rich

Thanks for the explanations.
It seems in Karaf the weaving is disabled by default (too many issues?). I
found this configuration:

#
# Settings for the OSGi 4.3 Weaving
# By default, we will not weave any classes. Change this setting to include
classes
# that you application needs to have woven.
#
org.apache.aries.proxy.weaving.enabled = none
# Classes not to weave - Aries default + Xerces which is known to have
issues.
org.apache.aries.proxy.weaving.disabled =
org.objectweb.asm.*,org.slf4j.*,org.apache.log4j.*,javax.*,org.apache.xerces.*


Guillaume (or JB) might know more details (it was disabled in KARAF-1905).

As the older Karaf version had proxy weaving disabled as well, I can only
guess that below
INFO message was introduced in between.

Martin


Richard Ellis wrote
> Hi Martin,
> 
> The Aries subclass proxy honors the "final" modifier and therefore is 
> unable to generate a subclass to serve as a proxy when the final modifier 
> is used. However, the Aries bytecode weaving proxy is able to inject proxy 
> code into final method implementations. So these types of cases are 
> handled successfully by the weaving proxy, which is available when ASM 
> library bundles are provided in OSGi 4.3 or later environments 
> (WeavingHook support).
> 
> I'm afraid I don't know anything about Karaf to know why it might use the 
> older subclassing proxy instead of weaving or what is different between 
> versions that causes that output to surface.
> 
> Rich
> 
> 
> 
> From:   Martin Lichtin <

> lichtin@

> >
> To:     "

> [email protected]

> " <

> [email protected]

> >
> Date:   05/11/2014 12:27
> Subject:        Unable to create a proxy object for the service ... 
> Returning the original object instead
> 
> 
> 
> Hi
> When moving from Karaf 2.3.4 to 3.0.2 a message from Aries starts to 
> appear
> 
> "Unable to create a proxy object for the service .component-3 ... 
> Returning the original object instead."
> 
> It happens with
> <bean id="jtaTransactionManager" 
> class="org.springframework.transaction.jta.JtaTransactionManager">
> The rest of the INFO log output is:
> 
> org.apache.aries.proxy.FinalModifierException: The methods protected final 
> void 
> org.springframework.transaction.support.AbstractPlatformTransactionManager.resume(java.lang.Object,org.springframework.transaction.support.AbstractPlatformTransactionManager$SuspendedResourcesHolder)
>  
> throws org.springframework.transaction.TransactionException, protected 
> final 
> org.springframework.transaction.support.AbstractPlatformTransactionManager$SuspendedResourcesHolder
>  
> org.springframework.transaction.support.AbstractPlatformTransactionManager.suspend(java.lang.Object)
>  
> throws org.springframework.transaction.TransactionException, public final 
> void 
> org.springframework.transaction.support.AbstractPlatformTransactionManager.setNestedTransactionAllowed(boolean),
>  
> protected final void 
> org.springframework.transaction.support.AbstractPlatformTransactionManager.invokeAfterCompletion(java.util.List
> <org.springframework.transaction.support.TransactionSynchronization>
> ,int), 
> public
>  final void 
> org.springframework.transaction.support.AbstractPlatformTransactionManager.setTransactionSynchronization(int),
>  
> public final int 
> org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransactionSynchronization(),
>  
> public final void 
> org.springframework.transaction.support.AbstractPlatformTransactionManager.setDefaultTimeout(int),
>  
> public final boolean 
> org.springframework.transaction.support.AbstractPlatformTransactionManager.isNestedTransactionAllowed(),
>  
> public final boolean 
> org.springframework.transaction.support.AbstractPlatformTransactionManager.isValidateExistingTransaction(),
>  
> public final void 
> org.springframework.transaction.support.AbstractPlatformTransactionManager.setRollbackOnCommitFailure(boolean),
>  
> public final boolean 
> org.springframework.transaction.support.AbstractPlatformTransactionManager.isRollbackOnCommitFailure(),
>  
> protected final 
> org.springframework.transaction.support.DefaultTransactionStatus
>  
> org.springframework.transaction.support.AbstractPlatformTransactionManager.prepareTransactionStatus(org.springframework.transaction.TransactionDefinition,java.lang.Object,boolean,boolean,boolean,java.lang.Object),
>  
> protected final void 
> org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerBeforeCommit(org.springframework.transaction.support.DefaultTransactionStatus),
>  
> protected final void 
> org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerBeforeCompletion(org.springframework.transaction.support.DefaultTransactionStatus),
>  
> public final int 
> org.springframework.transaction.support.AbstractPlatformTransactionManager.getDefaultTimeout(),
>  
> public final void 
> org.springframework.transaction.support.AbstractPlatformTransactionManager.setTransactionSynchronizationName(java.lang.String),
>  
> public final void
>  
> org.springframework.transaction.support.AbstractPlatformTransactionManager.setValidateExistingTransaction(boolean),
>  
> public final void 
> org.springframework.transaction.support.AbstractPlatformTransactionManager.setGlobalRollbackOnParticipationFailure(boolean),
>  
> public final boolean 
> org.springframework.transaction.support.AbstractPlatformTransactionManager.isGlobalRollbackOnParticipationFailure(),
>  
> public final void 
> org.springframework.transaction.support.AbstractPlatformTransactionManager.setFailEarlyOnGlobalRollbackOnly(boolean),
>  
> public final boolean 
> org.springframework.transaction.support.AbstractPlatformTransactionManager.isFailEarlyOnGlobalRollbackOnly(),
>  
> public final void 
> org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(org.springframework.transaction.TransactionStatus)
>  
> throws org.springframework.transaction.TransactionException, public final 
> void
>  
> org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(org.springframework.transaction.TransactionStatus)
>  
> throws org.springframework.transaction.TransactionException, public final 
> org.springframework.transaction.TransactionStatus 
> org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(org.springframework.transaction.TransactionDefinition)
>  
> throws org.springframework.transaction.TransactionException in class 
> java.lang.Object are final.
>     at 
> org.apache.aries.proxy.impl.gen.ProxySubclassGenerator.scanForFinalModifiers(ProxySubclassGenerator.java:352)
>     at 
> org.apache.aries.proxy.impl.gen.ProxySubclassGenerator.getProxySubclass(ProxySubclassGenerator.java:128)
>     at 
> org.apache.aries.proxy.impl.gen.ProxySubclassGenerator.newProxySubclassInstance(ProxySubclassGenerator.java:171)
>     at 
> org.apache.aries.proxy.impl.AsmProxyManager.createNewProxy(AsmProxyManager.java:135)
>     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.ServiceRecipe$TriggerServiceFactory.getService(ServiceRecipe.java:535)
>    [...]
> 
> I assume that there's not much to do here, right, it's just a rare edge 
> case that Aries needs to handle?
> (For now I just lower the ServiceRecipe log level to warn and plow on..)
> 
> Martin
> 
> 
> 
> Unless stated otherwise above:
> IBM United Kingdom Limited - Registered in England and Wales with number 
> 741598. 
> Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU





--
View this message in context: 
http://aries.15396.n3.nabble.com/Unable-to-create-a-proxy-object-for-the-service-Returning-the-original-object-instead-tp4029859p4029888.html
Sent from the Aries - User mailing list archive at Nabble.com.

Reply via email to