Java [1242]

Zapisz się
Dodaj kartkę Dodaj bana
Powód wlepienia kartki
Wybierz wątek docelowy z listy lub wpisz jego ID
  • Lilianne E. Blaze

    Witam,
    Czy jest jakis 'prosty' sposob na wykrycie pod jakim kontenerem (JEE lub Servlets, nazwa i wersja) jest wykonywany kod? W skrocie, chodzi o pobranie tego samego co z ServletContext.getServerInfo, ale nie majac podanego obiektu ServletContext; \

    Na razie kombinuje z czyms takim: sprawdzic czy jest ${catalina.base}/lib/catalina. jar , jezeli tak to odczytac ${catalina.base}/lib/catalina. jar/org/apache/catalina/util/S erverInfo.properties, dwie wersje dla 5.x i 6.x, podobnie z Jetty, troche gorzej z Glassfishem ale tez sie da.

    Jest jakas 'zdrowsza' alternatywa? Nie musi byc calkowicie uniwersalne, na poczatek wystarczy rozpoznawanie wymienionych wyzej.

    Pozdrawiam, L
  • boska renia

    Zdrowszą alternatywą było by odwołanie się do zmiennych środowiska - każdy z serwerów ustawia ich dosyć dużo. Jakie zmienne są ustawiane? wystarczy zajrzeć do skryptów uruchamiających serwer, ewentualnie skorzystać z kodu na dole.

    Przykładowo, dla glassfisha:

    String server="";

    String accConfig = System.getenv("AS_ACC_CONFIG");

    if (accConfig!=null) server="glassfish";

    Nie jestem pewien, czy akurat ta zmienna jest zmienną ze specyfikacji JEE -- tj. wspólną dla wszystkich serwerów (z googla wynika, że raczej nie).

    Dogodną zmienną do testowania danego serwera można wybrać za pomocą prostego scriptletu:

    <%
    Map<String,String> map = System.getenv();

    for (Map.Entry<String,String> entry : map.entrySet()){

    out.println("Key: "+entry.getKey()+" "+entry.getValue()+"<br/>");

    }

    %>

    Dotyczy to oczywiście rodzaju kontenera, jeśli chodzi o wersję GF, to należy zczytać z pliku "${AS_INSTALL}"/registry.prope rties klucz "product.version" oraz "product.name".
  • Lilianne E. Blaze

    Za zmienne srodowiska jeszcze sie nie zabralam. Na razie odnosze wrazenie ze i tak wiekszosc tego jest w propertiesach systemowych.

    Nie, to na pewno nie jest czesc specyfikacji.

    registry.properties - fakt, najlatwiej, i chyba dam to jako fallback, ale na razie na Glassfisha mam inny pomysl - utworzyc classloadera do appserv-rt.jar i appserv-se.jar i odpalic klase com.sun.appserv.server.util.Ve rsion. Plusy - dodatkowo jest build-version i powinno dzialac z wszystkimi glassfishowatymi nawet jesli sa pociete.
  • boska renia

    a zdecydowanie bardziej skuteczne będzie odwołanie się do: System.getProperties(); tam można znaleźć zmienne ustawiane za pomocą -Dxxx=yyy.

    przykładowo, dla GF:

    String asName = System.getProperties.getProper ty("product.name");
  • Lilianne E. Blaze

    J/w, nie ma build-version. A w Version.class jest:

    product_name = "Sun Java System Application Server";
    abbrev_product_name = "sun-appserver";
    full_version = "9.1.1";
    major_version = "9";
    minor_version = "1";
    build_id = "b38-fcs";
  • Lilianne E. Blaze

    Mniej wiecej gotowa detekcja Tomcata i Glassfisha, zaraz biore sie za Jettyego.

    Zwraca kulturalnie "Sun Java System Application Server 9.1.1 (build b38-fcs)"/ "Apache Tomcat/6.0.16.0 Jan 28 2008 11:35:29".

    Ma ktos ochote testnac? Kod jest na razie beta-quality, licencja Apache 2.0.
  • Koziołek [brat Javowiec]

    Wrzuć na opensvn i daj link. Przyda się takie narzędzie
  • Lilianne E. Blaze

    Sa beta-snapshoty na http://www.lilianne-blaze.net/wiki/...

    SVNa zrobie pozniej.

    p.s. Jak nie dostane jakiegos feedbacku to sie obraze; \
  • Koziołek [brat Javowiec]

    Popatrzę zobaczę :)
  • boska renia

    Dla zapewnienia kulturalnego odpalania w warunkach bardzo produkcyjnych można dodać sprawdzenia SecurityManager.checkRead(..) dla jarów oraz ewentualnie SecurityManager.checkPropertie sAccess(). Przydałyby się też odpowiednie zmienne dla wersji i builda. Brawo tak czy inaczej.
  • Lilianne E. Blaze

    Zrobilam maly update, patrz strona.

    Glowne zmiany: podstawowe logowanie, dostep do poszczegolnych czesci info o wersji, przy zbyt restrykcyjnym SecurityManager krzyczy zamiast sie wywalac.

    A teraz chce feedback; \ Duzo feedbacku; \