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]

Reply via email to