2009/3/16 cmoulliard <[email protected]> > > Hi Guillaume, > > Here is the output of the command executed for the osgi bundle exporting > the > service : > > ActiveMq Broker Feature (105) provides: > --------------------------------------- > org.apache.activemq.camel.component.ActiveMQComponent >
Try with "osgi/ls 105" it will give you all the classes exported by the service. You need all those packages as imports on your client bundle. Check the objectClass header associated with the exported service in this output. > > Nevertheless, if I change the syntax in my service like this : > > from : > <osgi:service id="activemqservice" ref="active-mq" > auto-export="all-classes"/> > to > <osgi:service id="activemqservice" ref="active-mq" > interface="org.apache.activemq.camel.component.ActiveMQComponent"/> > > it works except that I have a new error during proxy creation of the class > ActiveMqComponent : > > 16:48:27,902 | ERROR | xtenderThread-16 | OsgiBundleXmlApplicationContext > | > gatedExecutionApplicationContext 366 | Post refresh error > org.springframework.beans.factory.BeanCreationException: Error creating > bean > with name 'importedActiveMqService': FactoryBean threw exception on object > creation; nested exception is java.lang.NoClassDefFoundError: > org/springframework/core/task/TaskExecutor > at > > org.springframework.beans.factory.support.FactoryBeanRegistrySupport$1.run(FactoryBeanRegistrySupport.java:127) > at java.security.AccessController.doPrivileged(Native Method) > at > > org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:116) > at > > org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:91) > at > > org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1288) > at > > org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:217) > at > > org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185) > at > > org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164) > at > > org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:425) > at > > org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728) > at > > org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.access$1600(AbstractDelegatedExecutionApplicationContext.java:68) > at > > org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext$4.run(AbstractDelegatedExecutionApplicationContext.java:343) > at > > org.springframework.osgi.util.internal.PrivilegedUtils.executeWithCustomTCCL(PrivilegedUtils.java:85) > at > > org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.completeRefresh(AbstractDelegatedExecutionApplicationContext.java:308) > at > > org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor$CompleteRefreshTask.run(DependencyWaiterApplicationContextExecutor.java:138) > at java.lang.Thread.run(Thread.java:619) > Caused by: java.lang.NoClassDefFoundError: > org/springframework/core/task/TaskExecutor > at java.lang.Class.getDeclaredMethods0(Native Method) > at java.lang.Class.privateGetDeclaredMethods(Class.java:2427) > at java.lang.Class.getDeclaredMethod(Class.java:1935) > at net.sf.cglib.proxy.Enhancer.getCallbacksSetter(Enhancer.java:627) > at net.sf.cglib.proxy.Enhancer.setCallbacksHelper(Enhancer.java:615) > at net.sf.cglib.proxy.Enhancer.setThreadCallbacks(Enhancer.java:609) > at > net.sf.cglib.proxy.Enhancer.createUsingReflection(Enhancer.java:631) > at net.sf.cglib.proxy.Enhancer.firstInstance(Enhancer.java:538) > at > > net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:225) > at net.sf.cglib.proxy.Enhancer.createHelper(Enhancer.java:377) > at net.sf.cglib.proxy.Enhancer.create(Enhancer.java:285) > at > > org.springframework.aop.framework.Cglib2AopProxy.getProxy(Cglib2AopProxy.java:201) > at > > org.springframework.aop.framework.ProxyFactory.getProxy(ProxyFactory.java:110) > at > > org.springframework.osgi.service.util.internal.aop.ProxyUtils$1.run(ProxyUtils.java:65) > at java.security.AccessController.doPrivileged(Native Method) > at > > org.springframework.osgi.service.util.internal.aop.ProxyUtils.createProxy(ProxyUtils.java:62) > at > > org.springframework.osgi.service.util.internal.aop.ProxyUtils.createProxy(ProxyUtils.java:39) > at > > org.springframework.osgi.service.importer.support.AbstractServiceProxyCreator.createServiceProxy(AbstractServiceProxyCreator.java:107) > at > > org.springframework.osgi.service.importer.support.OsgiServiceProxyFactoryBean.createProxy(OsgiServiceProxyFactoryBean.java:185) > at > > org.springframework.osgi.service.importer.support.AbstractServiceImporterProxyFactoryBean.getObject(AbstractServiceImporterProxyFactoryBean.java:86) > at > > org.springframework.osgi.service.importer.support.OsgiServiceProxyFactoryBean.getObject(OsgiServiceProxyFactoryBean.java:141) > at > > org.springframework.beans.factory.support.FactoryBeanRegistrySupport$1.run(FactoryBeanRegistrySupport.java:121) > ... 15 more > Caused by: java.lang.ClassNotFoundException: > org.springframework.core.task.TaskExecutor > at > > org.springframework.osgi.context.internal.classloader.ChainedClassLoader.doLoadClass(ChainedClassLoader.java:126) > at > > org.springframework.osgi.context.internal.classloader.ChainedClassLoader.loadClass(ChainedClassLoader.java:108) > at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) > The stack trace shows the CGLIB tries to create a proxy and thus introspect the beans: such introspection requires all the classes referenced on all methods to be available. Looks like this is not the case. I have hardly used CGLIB from inside spring-dm and I usually use only interface exports, not class exports so that plain JDK proxies are used instead. This also means that only classes referenced from the exported interface need to be available. Just use an interface for the export, or make sure you client bundle as all the packages available... > > > gnodet wrote: > > > > Can you run the "osgi/ls xx" command on the service bundle and paste the > > output ? > > > > 2009/3/16 cmoulliard <[email protected]> > > > >> > >> 1) Service > >> > >> The bundle where the service is declared (osgi:service) only import this > >> package > >> > >> org.apache.activemq.camel.component > >> > >> 2) Referenced > >> > >> The bundle where the service will be consumed (osgi:reference) import > >> these > >> references : > >> > >> org.apache.commons.logging, > >> org.apache.camel, > >> org.apache.camel.component, > >> org.apache.camel.component.jms, > >> org.apache.activemq.camel.component;${activemq.osgi.version}, > >> org.apache.activemq.pool, > >> > >> but the error is alway there > >> > >> > >> > >> gnodet wrote: > >> > > >> > You don't need to export the package, as this one is exported by the > >> > activemq-camel bundle. > >> > But you need to import additional packages such as org.apache.camel > and > >> > all > >> > packages that are used by the osgi service that you are trying to get > a > >> > reference to. > >> > > >> > 2009/3/16 cmoulliard <[email protected]> > >> > > >> >> > >> >> My issue is that the name of the package is the same between > >> >> import-package > >> >> and export-package and maven felix bnd does not add export package : > >> >> > >> >> <configuration> > >> >> > >> >> <manifestLocation>META-INF</manifestLocation> > >> >> <instructions> > >> >> > >> >> <Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName> > >> >> > >> >> > >> <Import-Package>org.apache.activemq.camel.component,*</Import-Package> > >> >> > >> >> <Export-Package>org.apache.activemq.camel.component</Export-Package> > >> >> > >> >> <Include-Resource>src/main/resources</Include-Resource> > >> >> > >> >> > >> >> > >> > <Spring-Context>*;publish-context:=false;create-asynchronously:=true</Spring-Context> > >> >> > >> >> <Private-Package></Private-Package> > >> >> </instructions> > >> >> </configuration> > >> >> > >> >> and result of the importation (no Export-Package appears) > >> >> > >> >> ActiveMq Broker Feature (103) > >> >> ----------------------------- > >> >> Manifest-Version = 1.0 > >> >> Bnd-LastModified = 1237215735043 > >> >> Tool = Bnd-0.0.255 > >> >> Spring-Context = *;publish-context:=false;create-asynchronously:=true > >> >> Bundle-Name = ActiveMq Broker Feature > >> >> Built-By = Charlesm > >> >> Import-Package = org.apache.activemq.camel.component > >> >> Bundle-SymbolicName = reportincident.activemq > >> >> Bundle-Version = 1.0.0.SNAPSHOT > >> >> Build-Jdk = 1.6.0_12 > >> >> Created-By = Apache Maven Bundle Plugin > >> >> Bundle-ManifestVersion = 2 > >> >> > >> >> > >> >> > >> >> gnodet wrote: > >> >> > > >> >> > The reason is that for a given OSGi bundle to be able to see a > >> service > >> >> in > >> >> > the OSGi registry, it has to have on its classpath all the classes > >> or > >> >> > interfaces exported by the target OSGi service. I suspect that in > >> your > >> >> > case, your client bundle does not import all the needed packages. > >> You > >> >> can > >> >> > see the exact list of classes exported using the "osgi/ls" command > >> and > >> >> the > >> >> > list of packages imported using "packages/import" command. > >> >> > Make sure your bundle imports all the packages from the export > list. > >> >> > This is a drawback of using auto-export imho. > >> >> > > >> >> > 2009/3/16 cmoulliard <[email protected]> > >> >> > > >> >> >> > >> >> >> Hi, > >> >> >> > >> >> >> I have created an osgi bundle where the bean to expose as a > service > >> is > >> >> >> defined in a spring file : > >> >> >> > >> >> >> <bean id="activemq" > >> >> >> class="org.apache.activemq.camel.component.ActiveMQComponent"> > >> >> >> <property name="brokerURL" > >> >> >> value="vm://localhost:61616?create=false" /> > >> >> >> </bean> > >> >> >> > >> >> >> <osgi:service id="activemqservice" ref="activemq" > >> >> >> auto-export="all-classes"/> > >> >> >> > >> >> >> The service is well published. See the log here after. > >> >> >> > >> >> >> 13:18:42,058 | DEBUG | xtenderThread-16 | > >> >> OsgiBundleXmlApplicationContext > >> >> >> | > >> >> >> ractOsgiBundleApplicationContext 247 | Registering BundleContext > >> as > >> a > >> >> >> bean > >> >> >> named bundleContext > >> >> >> 13:18:42,058 | DEBUG | xtenderThread-16 | > >> >> >> WaiterApplicationContextExecutor > >> >> >> | > >> >> >> WaiterApplicationContextExecutor 218 | Pre-refresh completed; > >> >> >> determining > >> >> >> dependencies... > >> >> >> 13:18:42,058 | DEBUG | xtenderThread-16 | DependencyServiceManager > >> >> >> | > >> >> >> startup.DependencyServiceManager 253 | Discovered local > dependency > >> >> >> factories: [] > >> >> >> 13:18:42,074 | DEBUG | xtenderThread-16 | > >> DefaultListableBeanFactory > >> >> >> | > >> >> >> ort.DefaultSingletonBeanRegistry 214 | Creating shared instance > of > >> >> >> singleton bean 'activemqservice' > >> >> >> 13:18:42,074 | DEBUG | xtenderThread-16 | > >> DefaultListableBeanFactory > >> >> >> | > >> >> >> ractAutowireCapableBeanFactory$1 383 | Creating instance of bean > >> >> >> 'activemqservice' > >> >> >> 13:18:42,074 | DEBUG | xtenderThread-16 | > >> DefaultListableBeanFactory > >> >> >> | > >> >> >> stractAutowireCapableBeanFactory 459 | Eagerly caching bean > >> >> >> 'activemqservice' to allow for resolving potential circular > >> references > >> >> >> 13:18:42,105 | DEBUG | xtenderThread-16 | > >> CachedIntrospectionResults > >> >> >> | > >> >> >> beans.CachedIntrospectionResults 151 | Not strongly caching class > >> >> >> > >> >> >> > >> >> > >> > [org.springframework.osgi.service.importer.support.OsgiServiceProxyFactoryBean] > >> >> >> because it is not cache-safe > >> >> >> 13:18:42,105 | DEBUG | xtenderThread-16 | > >> DefaultListableBeanFactory > >> >> >> | > >> >> >> stractAutowireCapableBeanFactory 1367 | Invoking > >> afterPropertiesSet() > >> >> on > >> >> >> bean with name 'activemqservice' > >> >> >> 13:18:42,105 | DEBUG | xtenderThread-16 | > >> DefaultListableBeanFactory > >> >> >> | > >> >> >> ractAutowireCapableBeanFactory$1 411 | Finished creating instance > >> of > >> >> >> bean > >> >> >> 'activemqservice' > >> >> >> 13:18:42,105 | INFO | xtenderThread-16 | DependencyServiceManager > >> >> >> | > >> >> >> startup.DependencyServiceManager 278 | Adding OSGi service > >> dependency > >> >> >> for > >> >> >> importer [&activemqservice] matching OSGi filter > >> >> >> > >> [(objectClass=org.apache.activemq.camel.component.ActiveMQComponent)] > >> >> >> > >> >> >> Unfortunately, the osgi bundle who will consume the osgi:service > >> >> >> > >> >> >> <osgi:reference id="activemqservice" > >> >> >> interface="org.apache.activemq.camel.component.ActiveMQComponent" > >> /> > >> >> >> > >> >> >> generates an error > >> >> >> > >> >> >> 13:18:42,105 | DEBUG | xtenderThread-16 | DependencyServiceManager > >> >> >> | > >> >> >> startup.DependencyServiceManager 226 | 1 OSGi service > >> dependencies, > >> 1 > >> >> >> unsatisfied (for beans [&activemqservice]) in > >> >> >> OsgiBundleXmlApplicationContext(bundle=reportincident.interfaces, > >> >> >> config=osgibundle:/META-INF/spring/*.xml) > >> >> >> 13:18:42,105 | INFO | xtenderThread-16 | DependencyServiceManager > >> >> >> | > >> >> >> startup.DependencyServiceManager 232 | > >> >> >> OsgiBundleXmlApplicationContext(bundle=reportincident.interfaces, > >> >> >> config=osgibundle:/META-INF/spring/*.xml) is waiting for > >> unsatisfied > >> >> >> dependencies [[&activemqservice]] > >> >> >> 13:18:42,105 | DEBUG | xtenderThread-16 | > >> >> >> WaiterApplicationContextExecutor > >> >> >> | > >> >> >> WaiterApplicationContextExecutor 257 | Registering service > >> dependency > >> >> >> dependencyDetector for > >> >> >> OsgiBundleXmlApplicationContext(bundle=reportincident.interfaces, > >> >> >> config=osgibundle:/META-INF/spring/*.xml) > >> >> >> 13:18:42,121 | DEBUG | xtenderThread-16 | DependencyServiceManager > >> >> >> | > >> >> >> startup.DependencyServiceManager 297 | > >> >> >> OsgiBundleXmlApplicationContext(bundle=reportincident.interfaces, > >> >> >> config=osgibundle:/META-INF/spring/*.xml) has registered service > >> >> >> dependency > >> >> >> dependencyDetector with filter: > >> >> >> > (objectClass=org.apache.activemq.camel.component.ActiveMQComponent) > >> >> >> > >> >> >> What is the cause of this issue ? Do I have to change something in > >> my > >> >> >> MANIFEST file ? > >> >> >> > >> >> >> > >> >> >> > >> >> >> > >> >> >> ----- > >> >> >> Charles Moulliard > >> >> >> SOA Architect > >> >> >> > >> >> >> My Blog : http://cmoulliard.blogspot.com/ > >> >> >> http://cmoulliard.blogspot.com/ > >> >> >> -- > >> >> >> View this message in context: > >> >> >> > >> >> > >> > http://www.nabble.com/1-OSGi-service-dependencies%2C-1-unsatisfied-%28for-beans---activemqservice-%29-in-OsgiBundleXmlApplicationContext-tp22537014p22537014.html > >> >> >> Sent from the ServiceMix - User mailing list archive at > Nabble.com. > >> >> >> > >> >> >> > >> >> > > >> >> > > >> >> > -- > >> >> > Cheers, > >> >> > Guillaume Nodet > >> >> > ------------------------ > >> >> > Blog: http://gnodet.blogspot.com/ > >> >> > ------------------------ > >> >> > Open Source SOA > >> >> > http://fusesource.com > >> >> > > >> >> > > >> >> > >> >> > >> >> ----- > >> >> Charles Moulliard > >> >> SOA Architect > >> >> > >> >> My Blog : http://cmoulliard.blogspot.com/ > >> >> http://cmoulliard.blogspot.com/ > >> >> -- > >> >> View this message in context: > >> >> > >> > http://www.nabble.com/1-OSGi-service-dependencies%2C-1-unsatisfied-%28for-beans---activemqservice-%29-in-OsgiBundleXmlApplicationContext-tp22537014p22540154.html > >> >> Sent from the ServiceMix - User mailing list archive at Nabble.com. > >> >> > >> >> > >> > > >> > > >> > -- > >> > Cheers, > >> > Guillaume Nodet > >> > ------------------------ > >> > Blog: http://gnodet.blogspot.com/ > >> > ------------------------ > >> > Open Source SOA > >> > http://fusesource.com > >> > > >> > > >> > >> > >> ----- > >> Charles Moulliard > >> SOA Architect > >> > >> My Blog : http://cmoulliard.blogspot.com/ > >> http://cmoulliard.blogspot.com/ > >> -- > >> View this message in context: > >> > http://www.nabble.com/1-OSGi-service-dependencies%2C-1-unsatisfied-%28for-beans---activemqservice-%29-in-OsgiBundleXmlApplicationContext-tp22537014p22540577.html > >> Sent from the ServiceMix - User mailing list archive at Nabble.com. > >> > >> > > > > > > -- > > Cheers, > > Guillaume Nodet > > ------------------------ > > Blog: http://gnodet.blogspot.com/ > > ------------------------ > > Open Source SOA > > http://fusesource.com > > > > > > > ----- > Charles Moulliard > SOA Architect > > My Blog : http://cmoulliard.blogspot.com/ http://cmoulliard.blogspot.com/ > -- > View this message in context: > http://www.nabble.com/1-OSGi-service-dependencies%2C-1-unsatisfied-%28for-beans---activemqservice-%29-in-OsgiBundleXmlApplicationContext-tp22537014p22541181.html > Sent from the ServiceMix - User mailing list archive at Nabble.com. > > -- Cheers, Guillaume Nodet ------------------------ Blog: http://gnodet.blogspot.com/ ------------------------ Open Source SOA http://fusesource.com
