Re: EventAdmin Bundle Installation

2014-02-02 Thread masti whoknows
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

2014-02-02 Thread masti whoknows
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

2014-02-02 Thread Neil Bartlett
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

2014-02-01 Thread masti whoknows
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

2014-02-01 Thread Marcel Offermans
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