On Wed, Sep 16, 2009 at 11:37 AM, Markus Michel <[email protected]> wrote: > Some minutes ago after reading the whole thread, I found the solution to my > problem. As Richard already mentioned I have to set the following property: > > configMap.put("org.osgi.framework.bundle.parent", "app"); > > I think that your property does internally the same, or?
Yes, thats what they translate into. Good to know that it works for you now. regards, Karl > Anyway, now my environment is working again :-) Thanks! > > BR, > > Markus > > 2009/9/16 Karl Pauls <[email protected]> > >> On Tue, Sep 15, 2009 at 4:53 PM, Markus Michel >> <[email protected]> wrote: >> > Hi! >> > >> > After upgrading to the new framework version 2.0.0 the same error >> occurred >> > again, although the event service is still listed in the boot delegation >> > property. Is there another way to solve my problem? Otherwise I probably >> > have to continue using the old framework version ... >> >> They way you set the bootdelegation has changed a little with the new >> framework version. You have to set: >> >> Constants.FRAMEWORK_BUNDLE_PARENT to >> Constants.FRAMEWORK_BUNDLE_PARENT_FRAMEWORK >> >> That should make it work again. >> >> regards, >> >> Karl >> >> > BTW: What happened to the shell command services? Why it isn't included >> in >> > the new version? >> > >> > BR, >> > >> > Markus >> > >> > 2009/7/15 Markus Michel <[email protected]> >> > >> >> I would like to thank you for your help. After adding my services and >> the >> >> event admin service to the boot delegation property, my environment was >> >> working fine. :-) >> >> >> >> >> >> BR, >> >> >> >> Markus >> >> >> >> 2009/7/14 Richard S. Hall <[email protected]> >> >> >> >>> I believe the issue is that you are exporting from the system bundle, >> plus >> >>> your bundle contains the same packages as you are exporting from the >> system >> >>> bundle. >> >>> >> >>> So, you have to make sure only one copy is being used. I think your >> bundle >> >>> was only exporting osgiServices.vehiclePushService. This means your >> bundle >> >>> will always get its own copy, since it doesn't import the package too. >> If >> >>> you import it too, then it would likely get wired to the system >> bundle's >> >>> export, since resolved packages are preferred and the system bundle >> will be >> >>> resolved first. >> >>> >> >>> As I mention in my other message, one way around this is in your >> embedded >> >>> mode, add the shared packages to the boot delegation property to get >> them to >> >>> always load from the class path. Note, if you are using trunk you will >> need >> >>> to set a new property to boot delegate to the app class loader >> >>> (org.osgi.framework.bundle.parent=app). >> >>> >> >>> -> richard >> >>> >> >>> On 7/14/09 3:55 PM, Markus Michel wrote: >> >>> >> >>>> Some weeks ago I tried to use this instructions to get my embedded >> felix >> >>>> instance working, but it didn't worked. Afterwards some guy on >> >>>> stackover.comgave me the hint to put the whole package to the system >> >>>> >> >>>> packages path. If I >> >>>> strictly follow the wiki entry the line within my intialization block >> >>>> should >> >>>> look like: >> >>>> >> >>>> configMap.put(FelixConstants.FRAMEWORK_SYSTEMPACKAGES_EXTRA, >> >>>> "osgiServices.vehiclePushService; version=1.0.0"); >> >>>> >> >>>> <path to the service includings it's implementation within the host >> app> >> >>>> >> >>>> But if the entry only contains this value, I'm getting the class >> loading >> >>>> error again. >> >>>> >> >>>> Sorry, but I think that I have some problems in understanding the >> >>>> explanations on that site completely. As far as I understood it all >> >>>> packages >> >>>> within this property should be executed by the some class loader, >> which >> >>>> is >> >>>> used for the system bundle and all other bundles. Therefore there >> >>>> shouldn't >> >>>> occur any class loading problems, when the bundle tries to access the >> >>>> service. Am I wrong? Maybe you can give me a more detailed explanation >> >>>> ... >> >>>> >> >>>> Unfortunately the felix environment has to run in the embedded mode >> >>>> within >> >>>> my program, because I want to run and control several osgi instances >> at >> >>>> once. I hope that we will be able to solve my problem ... >> >>>> >> >>>> BR, >> >>>> >> >>>> Markus >> >>>> >> >>>> 2009/7/14 Richard S. Hall<[email protected]> >> >>>> >> >>>> >> >>>> >> >>>>> You should read: >> >>>>> >> >>>>> >> >>>>> >> >>>>> >> http://felix.apache.org/site/apache-felix-framework-launching-and-embedding.html >> >>>>> >> >>>>> It gives some pointers to running with an embedded framework >> instance. >> >>>>> In >> >>>>> short, your app and all bundles should go through the class path >> (i.e., >> >>>>> system bundle) for any packages shared between the host app and the >> >>>>> bundles. >> >>>>> >> >>>>> To make sure this happens, you could actually put the host/bundle >> shared >> >>>>> packages on the boot class path property to make sure everyone gets >> the >> >>>>> same >> >>>>> ones, no matter how the bundles are wired internally. This at least >> has >> >>>>> the >> >>>>> benefit that your bundles will work properly when not used in the >> >>>>> embedded >> >>>>> situation. >> >>>>> >> >>>>> I knew there was more than what met the eye here. :-) >> >>>>> >> >>>>> Embedded mode is alluring to a lot of people coming to OSGi, but >> there >> >>>>> are >> >>>>> lots of hidden issues with it, so better to avoid it if you can. >> >>>>> >> >>>>> -> richard >> >>>>> >> >>>>> >> >>>>> On 7/14/09 1:53 PM, Markus Michel wrote: >> >>>>> >> >>>>> >> >>>>> >> >>>>>> You are right. If I remove that line, I'm able to load the event >> admin >> >>>>>> service. But the problem is that I cannot remove it, because other >> >>>>>> parts >> >>>>>> of >> >>>>>> my program depends on that information: My "vehiclePushService" is >> >>>>>> mostly >> >>>>>> implemented (and started) within the host application but some parts >> >>>>>> are >> >>>>>> implemented within the bundle. If I do not add "vehiclePushService" >> to >> >>>>>> that >> >>>>>> line, I'm getting the class loading exception >> >>>>>> >> >>>>>> java.lang.ClassCastException: >> >>>>>> osgiServices.vehiclePushService.VehiclePushServiceImpl cannot be >> cast >> >>>>>> to >> >>>>>> osgiServices.vehiclePushService.VehiclePushService >> >>>>>> >> >>>>>> , when the bundle tries to use the service. Maybe I have to add the >> >>>>>> event >> >>>>>> admin service to that line, too?!? >> >>>>>> >> >>>>>> BR, >> >>>>>> >> >>>>>> Markus >> >>>>>> >> >>>>>> ----- >> >>>>>> >> >>>>>> Markus, >> >>>>>> >> >>>>>> Yes, I believe your embedded configuration is the issue. Why are you >> >>>>>> doing >> >>>>>> this: >> >>>>>> >> >>>>>> configMap.put(FelixConstants.FRAMEWORK_SYSTEMPACKAGES_EXTRA, >> >>>>>> "osgiServices.vehicleCommunicationService; >> >>>>>> osgiServices.vehiclePushService; >> >>>>>> vehiclePushService; vehicleCommunicationService"); >> >>>>>> >> >>>>>> ? >> >>>>>> >> >>>>>> It seems like this is incorrect, since your bundle contains these >> >>>>>> packages. >> >>>>>> Try removing this and see what happens. >> >>>>>> >> >>>>>> Hi Richard! >> >>>>>> >> >>>>>> Here's the bundle which tries to use the felix event admin service. >> If >> >>>>>> you >> >>>>>> wish I can provide you the sources of the bundle, too. >> >>>>>> >> >>>>>> If you want to use the bundle, you have to load the following >> bundles: >> >>>>>> >> >>>>>> org.apache.felix.shell-1.2.0.jar >> >>>>>> org.apache.felix.shell.tui-1.2.0.jar >> >>>>>> org.apache.felix.eventadmin-1.0.0.jar >> >>>>>> VehiclePushService_1.0.0.jar >> >>>>>> >> >>>>>> Some minutes ago I noticed that the bundle can be loaded >> successfully >> >>>>>> if >> >>>>>> you >> >>>>>> run it directly from a command-line-based felix instance. The error >> >>>>>> only >> >>>>>> occures if you try to run it >> >>>>>> as an embedded version. Very confusing. >> >>>>>> >> >>>>>> Maybe there's something wrong with the configuration of my felix >> >>>>>> instance: >> >>>>>> >> >>>>>> private void initialize() >> >>>>>> { >> >>>>>> // create new map for storing the felix configuration >> >>>>>> properties >> >>>>>> configMap = new HashMap<String, Object>(); >> >>>>>> >> >>>>>> // export the host provided service interface package >> >>>>>> configMap.put(FelixConstants.FRAMEWORK_SYSTEMPACKAGES_EXTRA, >> >>>>>> "osgiServices.vehicleCommunicationService; >> >>>>>> osgiServices.vehiclePushService; >> >>>>>> vehiclePushService; vehicleCommunicationService"); >> >>>>>> >> >>>>>> // add autoactivator that specifies all services that shall >> be >> >>>>>> loaded together with the system bundle >> >>>>>> List<Object> list = new ArrayList<Object>(); >> >>>>>> list.add(new AutoActivator(configMap)); >> >>>>>> >> >>>>>> // create service activators >> >>>>>> vehicleCommunicationServiceActivator = new >> >>>>>> VehicleCommunicationServiceActivator(connection); >> >>>>>> list.add(vehicleCommunicationServiceActivator); >> >>>>>> >> >>>>>> vehiclePushServiceActivator = new >> >>>>>> VehiclePushServiceActivator(); >> >>>>>> list.add(vehiclePushServiceActivator); >> >>>>>> >> >>>>>> // add service activators to felix instance >> >>>>>> configMap.put(FelixConstants.SYSTEMBUNDLE_ACTIVATORS_PROP, >> >>>>>> list); >> >>>>>> >> >>>>>> // set felix-cache folder >> >>>>>> configMap.put("org.osgi.framework.storage", "felix-cache/" + >> >>>>>> id); >> >>>>>> } >> >>>>>> >> >>>>>> >> >>>>>> BR, >> >>>>>> >> >>>>>> Markus >> >>>>>> >> >>>>>> ------- >> >>>>>> >> >>>>>> 2009/7/14 Richard S. Hall<[email protected]> >> >>>>>> >> >>>>>> >> >>>>>> >> >>>>>> >> >>>>>> >> >>>>>>> I don't see anything that immediately looks incorrect. If you want >> to >> >>>>>>> send >> >>>>>>> me your bundle (privately) with the steps to reproduce, I will look >> at >> >>>>>>> it. >> >>>>>>> >> >>>>>>> -> richard >> >>>>>>> >> >>>>>>> >> >>>>>>> On 7/14/09 4:20 AM, Markus Michel wrote: >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>>> Hi Richard! >> >>>>>>>> >> >>>>>>>> Of course I can provide more informations. The manifest file of >> the >> >>>>>>>> bundle >> >>>>>>>> looks like this: >> >>>>>>>> >> >>>>>>>> Manifest-Version: 1.0 >> >>>>>>>> Bundle-ManifestVersion: 2 >> >>>>>>>> Bundle-Name: VehiclePushService >> >>>>>>>> Bundle-SymbolicName: VehiclePushService >> >>>>>>>> Bundle-Version: 1.0.0 >> >>>>>>>> Bundle-Activator: vehiclePushService.Activator >> >>>>>>>> Import-Package: org.osgi.framework;version="1.3.0", >> >>>>>>>> org.osgi.service.event;version="1.1.0", >> >>>>>>>> vehiclePushService >> >>>>>>>> Bundle-RequiredExecutionEnvironment: JavaSE-1.6 >> >>>>>>>> Bundle-ClassPath: ., >> >>>>>>>> vehiclePushService.jar >> >>>>>>>> Export-Package: >> >>>>>>>> osgiServices.vehiclePushService, >> >>>>>>>> vehiclePushService >> >>>>>>>> >> >>>>>>>> The content of the bundle looks as follows: >> >>>>>>>> >> >>>>>>>> META-INF/ >> >>>>>>>> META-INF/MANIFEST.MF >> >>>>>>>> hostApplication/ >> >>>>>>>> hostApplication/vehiclePushService/ >> >>>>>>>> osgiFramework/ >> >>>>>>>> osgiFramework/vehiclePushService/ >> >>>>>>>> vehiclePushService/ >> >>>>>>>> META-INF/.classpath >> >>>>>>>> META-INF/.project >> >>>>>>>> vehiclePushService.jar >> >>>>>>>> vehiclePushService/Activator.class >> >>>>>>>> vehiclePushService/OSGiPosition2D.class >> >>>>>>>> vehiclePushService/OSGiVehicle.class >> >>>>>>>> vehiclePushService/OSGiVehiclePushService.class >> >>>>>>>> vehiclePushService/VehicleListener.class >> >>>>>>>> vehiclePushService/VehiclePushEvent.class >> >>>>>>>> vehiclePushService/VehiclePushServiceHandler.class >> >>>>>>>> >> >>>>>>>> Because inside the plug-in dependencies org.eclipse.services is >> >>>>>>>> referenced >> >>>>>>>> I >> >>>>>>>> think that the bundles currently uses the equinox implementation >> of >> >>>>>>>> the >> >>>>>>>> eventadmin service. Later on I will try to load the equinox >> >>>>>>>> eventadmin >> >>>>>>>> service instead >> >>>>>>>> of the felix eventadmin service. Maybe it's then possible to start >> my >> >>>>>>>> bundle >> >>>>>>>> ... >> >>>>>>>> >> >>>>>>>> BR, >> >>>>>>>> >> >>>>>>>> Markus >> >>>>>>>> >> >>>>>>>> >> >>>>>>>> 2009/7/13 Richard S. Hall<[email protected]> >> >>>>>>>> >> >>>>>>>> >> >>>>>>>> >> >>>>>>>> >> >>>>>>>> >> >>>>>>>> >> >>>>>>>> >> >>>>>>>>> On 7/13/09 2:47 PM, Markus Michel wrote: >> >>>>>>>>> >> >>>>>>>>> >> >>>>>>>>> >> >>>>>>>>> >> >>>>>>>>> >> >>>>>>>>> >> >>>>>>>>> >> >>>>>>>>>> Hi there! >> >>>>>>>>>> >> >>>>>>>>>> Today I wanted to add the eventadmin service to my OSGi >> >>>>>>>>>> environment. >> >>>>>>>>>> Therefore I extended the import block of my bundle, which is >> >>>>>>>>>> created >> >>>>>>>>>> within >> >>>>>>>>>> an eclipse equinox project, with org.osgi.service.event. After >> >>>>>>>>>> loading >> >>>>>>>>>> the >> >>>>>>>>>> service I tried to access it by running the following command: >> >>>>>>>>>> >> >>>>>>>>>> // get service reference to event admin service >> >>>>>>>>>> serviceReference = >> >>>>>>>>>> bundleContext.getServiceReference(EventAdmin.class.getName()); >> >>>>>>>>>> >> >>>>>>>>>> // check if service reference is valid >> >>>>>>>>>> if (serviceReference != null) >> >>>>>>>>>> { >> >>>>>>>>>> eventAdmin = (EventAdmin) >> >>>>>>>>>> bundleContext.getService(serviceReference); >> >>>>>>>>>> } >> >>>>>>>>>> >> >>>>>>>>>> But inside the if-loop I'm getting an error: >> >>>>>>>>>> >> >>>>>>>>>> java.lang.ClassCastException: >> >>>>>>>>>> >> >>>>>>>>>> >> org.apache.felix.eventadmin.impl.security.EventAdminSecurityDecorator >> >>>>>>>>>> cannot >> >>>>>>>>>> be cast to org.osgi.service.event.EventAdmin >> >>>>>>>>>> >> >>>>>>>>>> I'm a little bit confused now, because I thought that the Apache >> >>>>>>>>>> Felix >> >>>>>>>>>> framework is fully compatible to the OSGi specifications?!? >> >>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>> While the Felix framework isn't yet 100% compliant, it is very >> close >> >>>>>>>>> and >> >>>>>>>>> getting closer every release. >> >>>>>>>>> >> >>>>>>>>> Isn't it >> >>>>>>>>> >> >>>>>>>>> >> >>>>>>>>> >> >>>>>>>>> >> >>>>>>>>> >> >>>>>>>>> >> >>>>>>>>>> possible to mix equinox components (my bundle) with felix >> >>>>>>>>>> components >> >>>>>>>>>> (the >> >>>>>>>>>> eventadmin service)? >> >>>>>>>>>> >> >>>>>>>>>> Does anybody has an idea how I can solve my problem? >> >>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>> Such a scenario should work, but you didn't provide enough >> >>>>>>>>> information >> >>>>>>>>> to >> >>>>>>>>> say why it isn't. Perhaps you could show us your bundle's >> manifest >> >>>>>>>>> file >> >>>>>>>>> as >> >>>>>>>>> well as a "jar tf" of the bundle. >> >>>>>>>>> >> >>>>>>>>> -> richard >> >>>>>>>>> >> >>>>>>>>> BR, >> >>>>>>>>> >> >>>>>>>>> >> >>>>>>>>> >> >>>>>>>>> >> >>>>>>>>> >> >>>>>>>>> >> >>>>>>>>>> Markus >> >>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>> >> >>>>>>>>> >> --------------------------------------------------------------------- >> >>>>>>>>> To unsubscribe, e-mail: [email protected] >> >>>>>>>>> For additional commands, e-mail: [email protected] >> >>>>>>>>> >> >>>>>>>>> >> >>>>>>>>> >> >>>>>>>>> >> >>>>>>>>> >> >>>>>>>>> >> >>>>>>>>> >> >>>>>>>>> >> >>>>>>>> >> >>>>>>>> >> >>>>>>>> >> >>>>>>> >> >>>>>> >> >>>>>> >> >>>>> >> >>>> >> >>>> >> >>> >> > >> >> >> >> -- >> Karl Pauls >> [email protected] >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [email protected] >> For additional commands, e-mail: [email protected] >> >> > -- Karl Pauls [email protected] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]

