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.
