I have been trying a similar approach. I’m using declarative services and I 
have some @References  to other services in the Application, but I haven’t 
managed to get these instantiated. Do you have an approach for that? I suppose 
I can just write some code and instantiate them manually…

Steve

> On 20 Feb 2016, at 15:27, Maurice <i...@cuhka.com> wrote:
> 
> That is why the bundle activator creates a bundle-singleton of itself, that 
> way the app can access the OSGi world. In my case to register itself as a 
> service.
> 
> 
>     @Override
>     public void start(Stage primaryStage) throws Exception {
>         ....
>         primaryStage.show();
> 
>         Dictionary<String, ?> properties = createDictionary();
>         BundleContext bundleContext = 
> UdooActivator.bundleActivator().getBundleContext();
>         
> bundleContext.registerService(com.cuhka.home.application.Application.class, 
> this, properties);
>     }
> 
> Maurice.
> Op 20-02-16 om 15:08 schreef Stephen Winnall:
>> Hi Maurice
>> 
>> I have done something similar, but it has the following drawback in my view: 
>> the class launched (Udoo15App in your case) does not run under OSGi control, 
>> so it has no access to OSGi bundles or services, nor is it accessible by 
>> them. If you don’t need that, you're OK. But I need that class to be part of 
>> the OSGi world because other bundles/services are going to add parts to the 
>> UI as they are instantiated.
>> 
>> Steve
>> 
>>> On 20 Feb 2016, at 14:33, Maurice <i...@cuhka.com> <mailto:i...@cuhka.com> 
>>> wrote:
>>> 
>>> 
>>> For my OSGi based JavaFX solution on the Udoo Quad (ARM based Linux) I 
>>> created a service that publishes the application in the context.The 
>>> application does as little as possible. It sets up the primary stage as 
>>> fullscreen and puts a stackpane in it. Initially the stackpane displays a 
>>> 'boot logo', until the actual desktop bundle is started and registered with 
>>> the application. Note that you have to start the application on a separate 
>>> thread, as the thread will be blocked.
>>> 
>>> On Java 8 this means that although the application bundle can't be updated 
>>> in a running OSGi container, but that is why the desktop exists. On startup 
>>> it registers itself, and thus the application content, with the 
>>> application, and when it is stopped it removes the content from the 
>>> application. The application has thus rarely to be updated itself.
>>> 
>>> Regards,
>>> Maurice.
>>> 
>>> 
>>> 
>>> public class UdooActivator implements BundleActivator {
>>>    private static UdooActivator activator;
>>>    private BundleContext context;
>>> 
>>>    static UdooActivator bundleActivator() {
>>>        return requireNonNull(activator, "activator not set");
>>>    }
>>> 
>>>    @Override
>>>    public void start(BundleContext context) throws Exception {
>>>        this.context = context;
>>>        activator = this;
>>>        new Thread(() -> Application.launch(Udoo15App.class), "JavaFX 
>>> Desktop launcher").start();
>>>    }
>>> 
>>>    @Override
>>>    public void stop(BundleContext context) throws Exception {
>>>        Platform.exit();
>>>    }
>>> 
>>>    public BundleContext getBundleContext() {
>>>        return context;
>>>    }
>>> }
>>> 
>>> Op 20-02-16 om 01:28 schreef Stephen Winnall:
>>>> Anirvan, Kevin
>>>> 
>>>> Thanks for this.
>>>> 
>>>> I’m an expert neither in JavaFX nor in OSGi, but I think the basis of the 
>>>> JavaFX/OSGi incompatibility is control. To work with OSGi, JavaFX has to 
>>>> relinquish control of its startup sequence to OSGi in such a way that 
>>>> javafx.application.Application (or its proxy) is instantiated by OSGi and 
>>>> submits to OSGi’s bundle/service lifecycle. AN OSGi expert can probably 
>>>> formulate this better…
>>>> 
>>>> Platform.startup(runnable) /might/ do it. Platform.launch(class) doesn’t 
>>>> because the object thereby instantiated is always under the control of 
>>>> JavaFX - and thus not of OSGi.
>>>> 
>>>> I’m not comfortable using JFXPanel: if I wanted to use Swing I wouldn’t be 
>>>> trying to use JavaFX. But thank you for the hint.
>>>> 
>>>> Steve
>>>> 
>>>>> On 19 Feb 2016, at 16:41, Kevin Rushforth<kevin.rushfo...@oracle.com> 
>>>>> <mailto:kevin.rushfo...@oracle.com>  wrote:
>>>>> 
>>>>> And for JDK 9 there is now:
>>>>> 
>>>>>     Platform.startup(Runnable);
>>>>> 
>>>>> -- Kevin
>>>>> 
>>>>> 
>>>>> Anirvan Sarkar wrote:
>>>>>> Hi Stephen,
>>>>>> 
>>>>>> FYI, there is another way of initializing JavaFX runtime. Just use:
>>>>>> 
>>>>>> new JFXPanel();
>>>>>> 
>>>>>> It is documented[1] that FX runtime is initialized when the first 
>>>>>> JFXPanel
>>>>>> instance is constructed.
>>>>>> 
>>>>>> Also JavaFX 9 will provide an official API to start the FX platform [2] 
>>>>>> [3].
>>>>>> 
>>>>>> 
>>>>>> [1]
>>>>>> https://docs.oracle.com/javase/8/javafx/api/javafx/application/Platform.html#runLater-java.lang.Runnable
>>>>>>  
>>>>>> <https://docs.oracle.com/javase/8/javafx/api/javafx/application/Platform.html#runLater-java.lang.Runnable>
>>>>>>   
>>>>>> <https://docs.oracle.com/javase/8/javafx/api/javafx/application/Platform.html#runLater-java.lang.Runnable>
>>>>>>  
>>>>>> <https://docs.oracle.com/javase/8/javafx/api/javafx/application/Platform.html#runLater-java.lang.Runnable>-
>>>>>> [2]https://bugs.openjdk.java.net/browse/JDK-8090585 
>>>>>> <https://bugs.openjdk.java.net/browse/JDK-8090585>  
>>>>>> <https://bugs.openjdk.java.net/browse/JDK-8090585> 
>>>>>> <https://bugs.openjdk.java.net/browse/JDK-8090585>
>>>>>> [3]
>>>>>> http://download.java.net/jdk9/jfxdocs/javafx/application/Platform.html#startup-java.lang.Runnable
>>>>>>  
>>>>>> <http://download.java.net/jdk9/jfxdocs/javafx/application/Platform.html#startup-java.lang.Runnable>
>>>>>>   
>>>>>> <http://download.java.net/jdk9/jfxdocs/javafx/application/Platform.html#startup-java.lang.Runnable>
>>>>>>  
>>>>>> <http://download.java.net/jdk9/jfxdocs/javafx/application/Platform.html#startup-java.lang.Runnable>-
>>>>>> 
>>>>>> 
>>>>>> On 18 February 2016 at 20:08, Stephen Winnall<st...@winnall.ch> 
>>>>>> <mailto:st...@winnall.ch>  <mailto:st...@winnall.ch> 
>>>>>> <mailto:st...@winnall.ch>  wrote:
>>>>>> 
>>>>>>   
>>>>>>> As I understand it, there are two ways of activating JavaFX:
>>>>>>> 
>>>>>>> 1) sub-class javafx.application.Application or
>>>>>>> 2) call javafx.application.Application.launch()
>>>>>>> 
>>>>>>>     
>>>>>>   
>>> 
>>> 
>>> Op 20-02-16 om 01:28 schreef Stephen Winnall:
>>>> Anirvan, Kevin
>>>> 
>>>> Thanks for this.
>>>> 
>>>> I’m an expert neither in JavaFX nor in OSGi, but I think the basis of the 
>>>> JavaFX/OSGi incompatibility is control. To work with OSGi, JavaFX has to 
>>>> relinquish control of its startup sequence to OSGi in such a way that 
>>>> javafx.application.Application (or its proxy) is instantiated by OSGi and 
>>>> submits to OSGi’s bundle/service lifecycle. AN OSGi expert can probably 
>>>> formulate this better…
>>>> 
>>>> Platform.startup(runnable) /might/ do it. Platform.launch(class) doesn’t 
>>>> because the object thereby instantiated is always under the control of 
>>>> JavaFX - and thus not of OSGi.
>>>> 
>>>> I’m not comfortable using JFXPanel: if I wanted to use Swing I wouldn’t be 
>>>> trying to use JavaFX. But thank you for the hint.
>>>> 
>>>> Steve
>>>> 
>>>>> On 19 Feb 2016, at 16:41, Kevin Rushforth <kevin.rushfo...@oracle.com> 
>>>>> <mailto:kevin.rushfo...@oracle.com> wrote:
>>>>> 
>>>>> And for JDK 9 there is now:
>>>>> 
>>>>>     Platform.startup(Runnable);
>>>>> 
>>>>> -- Kevin
>>>>> 
>>>>> 
>>>>> Anirvan Sarkar wrote:
>>>>>> Hi Stephen,
>>>>>> 
>>>>>> FYI, there is another way of initializing JavaFX runtime. Just use:
>>>>>> 
>>>>>> new JFXPanel();
>>>>>> 
>>>>>> It is documented[1] that FX runtime is initialized when the first 
>>>>>> JFXPanel
>>>>>> instance is constructed.
>>>>>> 
>>>>>> Also JavaFX 9 will provide an official API to start the FX platform [2] 
>>>>>> [3].
>>>>>> 
>>>>>> 
>>>>>> [1]
>>>>>> https://docs.oracle.com/javase/8/javafx/api/javafx/application/Platform.html#runLater-java.lang.Runnable
>>>>>>  
>>>>>> <https://docs.oracle.com/javase/8/javafx/api/javafx/application/Platform.html#runLater-java.lang.Runnable>
>>>>>>  
>>>>>> <https://docs.oracle.com/javase/8/javafx/api/javafx/application/Platform.html#runLater-java.lang.Runnable>
>>>>>>  
>>>>>> <https://docs.oracle.com/javase/8/javafx/api/javafx/application/Platform.html#runLater-java.lang.Runnable>-
>>>>>> [2] https://bugs.openjdk.java.net/browse/JDK-8090585 
>>>>>> <https://bugs.openjdk.java.net/browse/JDK-8090585> 
>>>>>> <https://bugs.openjdk.java.net/browse/JDK-8090585> 
>>>>>> <https://bugs.openjdk.java.net/browse/JDK-8090585>
>>>>>> [3]
>>>>>> http://download.java.net/jdk9/jfxdocs/javafx/application/Platform.html#startup-java.lang.Runnable
>>>>>>  
>>>>>> <http://download.java.net/jdk9/jfxdocs/javafx/application/Platform.html#startup-java.lang.Runnable>
>>>>>>  
>>>>>> <http://download.java.net/jdk9/jfxdocs/javafx/application/Platform.html#startup-java.lang.Runnable>
>>>>>>  
>>>>>> <http://download.java.net/jdk9/jfxdocs/javafx/application/Platform.html#startup-java.lang.Runnable>-
>>>>>> 
>>>>>> 
>>>>>> On 18 February 2016 at 20:08, Stephen Winnall <st...@winnall.ch> 
>>>>>> <mailto:st...@winnall.ch> <mailto:st...@winnall.ch> 
>>>>>> <mailto:st...@winnall.ch> wrote:
>>>>>> 
>>>>>>   
>>>>>>> As I understand it, there are two ways of activating JavaFX:
>>>>>>> 
>>>>>>> 1) sub-class javafx.application.Application or
>>>>>>> 2) call javafx.application.Application.launch()
>>>>>>> 
>>>>>>>     
>>>>>> 
>>>>>>   
> 

Reply via email to