czwartek, 15 września 2011

Zabawa z Java Web Start

Krótko o Java Web Start.

Oprogramowanie Java Web Start pozwala użytkownikom uruchamiać aplikację bez jej instalacji, wystarczy jedno kliknięcie w link na stronie internetowej, który prowadzi do pliku Java Network Lunch Protocol (JNLP). Lub uruchomienie ściągniętego pliku JNLP. Przykład można zobaczyć np. w moim wpisie dotyczącym programu JAutomaton. Będę się w tym wpisie na nim opierał. Od wersji Java 2 Platform, Standard Edition 1.4.2, Java Web Start jest zainstalowane jako część Java Runtime Environment (JRE).

Jakie to przyjemne.

Wystarczy kilka kroków, aby wszystko ładnie chodziło:
  1. Kompilujemy naszą aplikację upewniając się, że wszystkie pliki klas i zasobów (takich jak zdjęcia) znajdują się w oddzielnym katalogu.
  2. Tworzymy plik JAR przechowujący pliki naszej aplikacji (w NetBeans IDE wystarczy wcisnąć F11 i wybrać Clean and Build).
  3. Tworzymy plik JNLP opisujący sposób uruchomienia naszej aplikacji.
Plik Java Network Lunch Protocol.

Tworzymy plik jautomaton-webstart.jnlp. Dodajemy standardowy nagłówek pliku xml określający wersję i kodownie oraz strukturę opisującą nasz program. Opiszę jej elementy poniżej.
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="http://www.mrowa.comoj.com" href="">
    <information>
        <title>JAutomaton</title>
        <vendor>Paweł Góralik</vendor>
    </information>
    <resources>
        <j2se version="1.6+" href="http://java.sun.com/products/autodl/j2se"/>
        <jar href="/Programs/JAutomaton.jar" main="true"/>
    </resources>
    <security>
        <all-permissions/>
    </security>
    <application-desc name="JAutomaton Application" 
        main-class="com.blogspot.pgoralik.jautomaton.App"/>
</jnlp>

<jnlp> to najbardziej zewnętrzny element dla pliku JNLP.
Atrybuty:
    version - określa minimalną wersję protokołu z którą plik może działać.
    codebase - bazowe położenie dla wszystkich relatywnych odnośników podanych w pliku.
    href - odnośnik do tego pliku

<information> przechowuje elementy opisujące naszą aplikację.
    <title> określa tytuł aplikacji
    <vendor> określa autora aplikacji.

<resources> przechowuje elementu opisujące potrzebne zasoby.
    <j2se> odnosi się do javy.
    Atrybuty:
        version - lista wersji javy na jakich można uruchomić aplikację (u nas 1.6 i wyższe).
        href - odnośnik do wersji javy i miejsca skąd może zostać pobrana.

    <jar> odnosi się do pliku JAR.
    Atrybuty:
        href - odnośnik do pliku.
        main - określa, czy ten plik JAR zawiera klasę z metodą main.

<application-desc> określa, że to jest JNLP dla aplikacji.
Atrybuty:
    name - nazwa programu.
    main-class - nazwa klasy z funkcją public static void main(String[]).


Element <security> nie jest konieczny. Tutaj akurat mój program wymaga podwyższenia uprawnień na <all-permissions>, bo musi mieć dostęp do manipulowania myszą i klawiaturą. Istnieją też <j2ee-application-client-permissions>, które mówią, że chcemy uprawnień jak aplikacje po stronie klienta. Na Windowsie działały, na Ubuntu nie wyświetlało się GUI Swinga. Podwyższenie na wszystkie uprawnienia naprawiło problem. Ale trzeba pamiętać, że jeśli użyjemy podwyższenia praw, to musimy dostarczyć podpisany plik JAR.

Co w naszej stronie piszczy.

Pięknie, mamy wszystko czego nam trzeba, teraz możemy skorzystać z  gotowych funkcji javascript (Deployment Toolkit), które pomagają nam we wdrażaniu aplikacji. Sprawdzają np. czy klient ma odpowiednią wersję JRE. Wrzucamy gdzieś na stronie nasz kod. Pierwsza linijka dołącza gotowe funkcje, np. createWebStartLunchButton, która tworzy taki fajny, pomarańczowy przycisk. Musimy jej podać odnośnik do pliku JNLP i minimalną wymaganą wersję JRE.
<script src="http://www.java.com/js/deployJava.js"></script>
<script>
    var url = "http://www.mrowa.comoj.com/Programs/jautomaton-webstart.jnlp";
    deployJava.createWebStartLaunchButton(url, '1.6.0');
</script>

Niestety nie jest tak bajkowo jak mogło by się wydawać.

W Sun'owskim Java Web Start wszystko gra i piszczy, niestety pod Ubuntu, gdzie mamy domyślnie do czynienia z open sourcowym odpowiednikiem IcedTea, są problemy z parsowaniem plików JNLP. Dodałem pustą linijkę przed plikiem i działało pod Ubuntu, lecz pisząc ten artykuł coś się posypało, już nie działa. Jednak nie udało mi się rozwiązać tego problemu.



Więcej informacji - odpowiedni tutorial.
Opis składni JNLP i wszystkich opcji tutaj.

Brak komentarzy:

Prześlij komentarz