Re: EventAdmin Bundle Installation
Thanks Marcel for the quick response. Can someone help clarify: Can I use EventAdmin to pass the event data from an non-osgi bundle to an osgi bundle? Or is the eventAdmin only used for communicating between osgi bundles? My main application receiving the metrics data/event is non-osgi and it needs to forward this event/data to an osgi-bundle. I was using this before: bundleContext.registerService(SOME_DATA_TYPE, dataHolderMap, null); This works fine for low volume of calls but starts to hang the thread gets blocked. Thanks Masti On Saturday, February 1, 2014 2:44 PM, Marcel Offermans marcel.offerm...@luminis.eu wrote: On 01 Feb 2014, at 23:20 pm, masti whoknows masti...@yahoo.com wrote: Here is simple Java code that I am using to install the EventAdmin bundle //now install the EventAdmin: org.apache.felix.eventadmin 1.3.2 Bundle eventAdminBundle = framework.getBundleContext().installBundle(org.apache.felix.eventadmin); eventAdminBundle.start();Is this not the right way? No, as you can see from your own stacktrace, installBundle takes a location [1] which is interpreted as a URL. Alternatively, you can use the other installBundle method [2] that takes a location (which can then be anything) and an inputstream (to your bundle). That should at least get you to the next point. :) To learn more about embedding Felix, please read [3] and especially the Host/Felix interaction part of that document. It contains a lot of information related to what you're trying to do. Greetings, Marcel [1] http://www.osgi.org/javadoc/r4v43/core/org/osgi/framework/BundleContext.html#installBundle(java.lang.String) [2] http://www.osgi.org/javadoc/r4v43/core/org/osgi/framework/BundleContext.html#installBundle(java.lang.String, java.io.InputStream) [3] http://felix.apache.org/documentation/subprojects/apache-felix-framework/apache-felix-framework-launching-and-embedding.html
Re: EventAdmin Bundle Installation
Neil you are everywhere my Friend! It is good to see people willing to help others! You got the understanding of the application correctly. My Application installs bundles and all bundles live on single JVM. I am able to install the felix org.apache.felix.eventadmin with version 1.3.2 bundle. Now pushing the events using the following example: http://felix.apache.org/site/apache-felix-event-admin.html is not clear with as how the casting will work. if (ref != null) { EventAdmin eventAdmin = (EventAdmin) context.getService(ref); Here EventAdmin should be casted to what? The only class/package available from felix is impl package and that does not have EventAdmin. If I use import org.osgi.service.event.Event;import org.osgi.service.event.EventAdmin; which I see also available through the same felix bundle I get the following class cast exceptionjava.lang.ClassCastException: org.apache.felix.eventadmin.impl.security.EventAdminSecurityDecorator incompatible with org.osgi.service.event.EventAdmin I am sure I am doing something wrong or missing something. Any pointers are appreciated Thanks Masti On Sunday, February 2, 2014 8:30 AM, Neil Bartlett njbartl...@gmail.com wrote: On Sun, Feb 2, 2014 at 4:16 PM, masti whoknows masti...@yahoo.com wrote: Thanks Marcel for the quick response. Can someone help clarify: Can I use EventAdmin to pass the event data from an non-osgi bundle to an osgi bundle? Or is the eventAdmin only used for communicating between osgi bundles? Yes Event Admin can be used in a non-OSGi environment. However it is not a remote or distributed event broker, it works purely within a single JVM (although some people have built remoting gateways or bridges that work alongside Event Admin). Therefore if you're talking about using it with both non-OSGi and OSGi artifacts then you probably mean you have an embedded OSGi framework in your application. Assuming that's the case, then the embedding application can interact with Event Admin by publishing an EventHandler interface into OSGi using the system bundle's BundleContext. The limitation is that the API package for Event Admin will need to be exported by the system bundle using the FRAMEWORK_SYSTEM_PACKAGES_EXTRA property. My main application receiving the metrics data/event is non-osgi and it needs to forward this event/data to an osgi-bundle. I was using this before: bundleContext.registerService(SOME_DATA_TYPE, dataHolderMap, null); Ah yes... I recall your StackOverflow question. This works fine for low volume of calls but starts to hang the thread gets blocked. Thanks Masti On Saturday, February 1, 2014 2:44 PM, Marcel Offermans marcel.offerm...@luminis.eu wrote: On 01 Feb 2014, at 23:20 pm, masti whoknows masti...@yahoo.com wrote: Here is simple Java code that I am using to install the EventAdmin bundle //now install the EventAdmin: org.apache.felix.eventadmin 1.3.2 Bundle eventAdminBundle = framework.getBundleContext().installBundle(org.apache.felix.eventadmin); eventAdminBundle.start();Is this not the right way? No, as you can see from your own stacktrace, installBundle takes a location [1] which is interpreted as a URL. Alternatively, you can use the other installBundle method [2] that takes a location (which can then be anything) and an inputstream (to your bundle). That should at least get you to the next point. :) To learn more about embedding Felix, please read [3] and especially the Host/Felix interaction part of that document. It contains a lot of information related to what you're trying to do. Greetings, Marcel [1] http://www.osgi.org/javadoc/r4v43/core/org/osgi/framework/BundleContext.html#installBundle(java.lang.String) [2] http://www.osgi.org/javadoc/r4v43/core/org/osgi/framework/BundleContext.html#installBundle(java.lang.String, java.io.InputStream) [3] http://felix.apache.org/documentation/subprojects/apache-felix-framework/apache-felix-framework-launching-and-embedding.html
Re: EventAdmin Bundle Installation
You need to cast it to the interface org.osgi.service.event.EventAdmin. If you get a ClassCastException, then it means the eventadmin bundle is importing the org.osgi.service.event package from a different place than your client is importing it from. If you are bridging the embedding application then you MUST export the org.osgi.service.event package from the system bundle using the Constants.FRAMEWORK_SYSTEM_PACKAGES_EXTRA configuration property. Also you should use the inspect command to check that the eventadmin bundle is importing that package from the system bundle. Regards Neil On Sun, Feb 2, 2014 at 5:17 PM, masti whoknows masti...@yahoo.com wrote: Neil you are everywhere my Friend! It is good to see people willing to help others! You got the understanding of the application correctly. My Application installs bundles and all bundles live on single JVM. I am able to install the felix org.apache.felix.eventadmin with version 1.3.2 bundle. Now pushing the events using the following example: http://felix.apache.org/site/apache-felix-event-admin.html is not clear with as how the casting will work. if (ref != null) { EventAdmin eventAdmin = (EventAdmin) context.getService(ref); Here EventAdmin should be casted to what? The only class/package available from felix is impl package and that does not have EventAdmin. If I use *import org.osgi.service.event.Event;import org.osgi.service.event.EventAdmin; which I see also available through the same felix bundle I get the following class cast exception* java.lang.ClassCastException: org.apache.felix.eventadmin.impl.security.EventAdminSecurityDecorator incompatible with org.osgi.service.event.EventAdmin I am sure I am doing something wrong or missing something. Any pointers are appreciated Thanks Masti On Sunday, February 2, 2014 8:30 AM, Neil Bartlett njbartl...@gmail.com wrote: On Sun, Feb 2, 2014 at 4:16 PM, masti whoknows masti...@yahoo.com wrote: Thanks Marcel for the quick response. Can someone help clarify: Can I use EventAdmin to pass the event data from an non-osgi bundle to an osgi bundle? Or is the eventAdmin only used for communicating between osgi bundles? Yes Event Admin can be used in a non-OSGi environment. However it is not a remote or distributed event broker, it works purely within a single JVM (although some people have built remoting gateways or bridges that work alongside Event Admin). Therefore if you're talking about using it with both non-OSGi and OSGi artifacts then you probably mean you have an embedded OSGi framework in your application. Assuming that's the case, then the embedding application can interact with Event Admin by publishing an EventHandler interface into OSGi using the system bundle's BundleContext. The limitation is that the API package for Event Admin will need to be exported by the system bundle using the FRAMEWORK_SYSTEM_PACKAGES_EXTRA property. My main application receiving the metrics data/event is non-osgi and it needs to forward this event/data to an osgi-bundle. I was using this before: bundleContext.registerService(SOME_DATA_TYPE, dataHolderMap, null); Ah yes... I recall your StackOverflow question. This works fine for low volume of calls but starts to hang the thread gets blocked. Thanks Masti On Saturday, February 1, 2014 2:44 PM, Marcel Offermans marcel.offerm...@luminis.eu wrote: On 01 Feb 2014, at 23:20 pm, masti whoknows masti...@yahoo.com wrote: Here is simple Java code that I am using to install the EventAdmin bundle //now install the EventAdmin: org.apache.felix.eventadmin 1.3.2 Bundle eventAdminBundle = framework.getBundleContext().installBundle(org.apache.felix.eventadmin); eventAdminBundle.start();Is this not the right way? No, as you can see from your own stacktrace, installBundle takes a location [1] which is interpreted as a URL. Alternatively, you can use the other installBundle method [2] that takes a location (which can then be anything) and an inputstream (to your bundle). That should at least get you to the next point. :) To learn more about embedding Felix, please read [3] and especially the Host/Felix interaction part of that document. It contains a lot of information related to what you're trying to do. Greetings, Marcel [1] http://www.osgi.org/javadoc/r4v43/core/org/osgi/framework/BundleContext.html#installBundle(java.lang.String) [2] http://www.osgi.org/javadoc/r4v43/core/org/osgi/framework/BundleContext.html#installBundle(java.lang.String, java.io.InputStream) [3] http://felix.apache.org/documentation/subprojects/apache-felix-framework/apache-felix-framework-launching-and-embedding.html
EventAdmin Bundle Installation
Hi OSGi Gurus, I am new to OSGi. I have an application that processes messages/metrics events in a high volume My main application which recieves these events/metrics is an non-OSGi bundle. However, the task for this application is to forward the event/payload to an OSGi bundle. I don't have issues with OSGi bundle as I am able to install the bundle and also added the EventHandler there.My issue occurs when I send the events from my main application. My service reference is always null. In short EventAdmin reference is always null. I am sure I need to install the EventAdmin as a bundle. How can I do it at the top level application? Can you please help me the actual Java code/pseudo that would install the bundle? Dependencies in my pom: dependencies dependency groupIdcom.ebay.external/groupId artifactIducirrus-db/artifactId version0.7.3/version /dependency dependency groupIdorg.apache.felix/groupId artifactIdorg.apache.felix.framework/artifactId version4.2.1/version /dependency dependency groupIdorg.apache.felix/groupId artifactIdorg.apache.felix.bundlerepository/artifactId version1.6.6/version /dependency dependency groupIdorg.ops4j.pax.url/groupId artifactIdpax-url-mvn/artifactId version1.3.6/version /dependency dependency groupIdorg.apache.felix/groupId artifactIdorg.apache.felix.eventadmin/artifactId version1.3.2/version /dependency dependency groupIdmockit/groupId artifactIdjmockit/artifactId version0.999.4/version typejar/type scopetest/scope /dependency dependency groupIdjunit/groupId artifactIdjunit/artifactId scopetest/scope version4.5/version!--$NO-MVN-MAN-VER$ -- /dependency dependency groupIdorg.osgi/groupId artifactIdorg.osgi.core/artifactId version4.3.0/version!--$NO-MVN-MAN-VER$ -- typejar/type scopecompile/scope /dependency dependency groupIdorg.osgi/groupId artifactIdorg.osgi.compendium/artifactId version4.3.1/version typejar/type scopecompile/scope /dependency /dependencies Here is simple Java code that I am using to install the EventAdmin bundle //now install the EventAdmin: org.apache.felix.eventadmin 1.3.2 Bundle eventAdminBundle = framework.getBundleContext().installBundle(org.apache.felix.eventadmin); eventAdminBundle.start();Is this not the right way? Any pointers are highly appreciated Thanks Masti
Re: EventAdmin Bundle Installation
On 01 Feb 2014, at 23:20 pm, masti whoknows masti...@yahoo.com wrote: Here is simple Java code that I am using to install the EventAdmin bundle //now install the EventAdmin: org.apache.felix.eventadmin 1.3.2 Bundle eventAdminBundle = framework.getBundleContext().installBundle(org.apache.felix.eventadmin); eventAdminBundle.start();Is this not the right way? No, as you can see from your own stacktrace, installBundle takes a location [1] which is interpreted as a URL. Alternatively, you can use the other installBundle method [2] that takes a location (which can then be anything) and an inputstream (to your bundle). That should at least get you to the next point. :) To learn more about embedding Felix, please read [3] and especially the Host/Felix interaction part of that document. It contains a lot of information related to what you're trying to do. Greetings, Marcel [1] http://www.osgi.org/javadoc/r4v43/core/org/osgi/framework/BundleContext.html#installBundle(java.lang.String) [2] http://www.osgi.org/javadoc/r4v43/core/org/osgi/framework/BundleContext.html#installBundle(java.lang.String, java.io.InputStream) [3] http://felix.apache.org/documentation/subprojects/apache-felix-framework/apache-felix-framework-launching-and-embedding.html