2012-12-14 7 views
5

Mam wiadro Amazon S3, które przechowuje moje pliki .jar dla mojej aplikacji Java. I mam serwer sieciowy, który dynamicznie tworzy i wyświetla plik JNLP, który wskazuje na to wiadro Amazon S3 dla bazy kodu.Jak powinienem skonfigurować mój plik JNLP z plikami JAR dla zasobnika Amazon S3 (dynamiczny adres IP CDN)?

JNLP wydaje się być w stanie pobrać pliki .jar poprawnie z mojego wiadra Amazon S3. Ale podczas próby uruchomienia, otrzymuję następujący wyjątek:

ExitException[ 3]java.io.IOException: Cannot find cached resource for URL: http://s3.amazonaws.com/....  
     at sun.plugin2.applet.JNLP2Manager.prepareLaunchFile(Unknown Source) 
     at sun.plugin2.applet.JNLP2Manager.loadJarFiles(Unknown Source) 
     at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source) 
     at java.lang.Thread.run(Unknown Source) 

Czy Java buforuje pliki .jar z adresem IP? Wcześniej w dzienniku java drukowane są następujące dane: "Pamięć podręczna: Niezgodność IP CacheEntry: 207.171.189.80! = 207.171.187.117". Oba adresy IP rozwiązują S3.

Jestem trochę zaskoczony, że dostaję ten problem i uważam, że jest to powszechny problem, ale nie można znaleźć dobrego rozwiązania. Jeśli trzymać się z adresu IP w pliku JNLP:

<jnlp spec="1.0" xmlns:jfx="http://javafx.com" codebase="http://207.171.189.80/... 

zamiast:

<jnlp spec="1.0" xmlns:jfx="http://javafx.com" codebase="http://s3.amazonaws.com/... 

to działa za każdym razem. W przeciwnym razie zwykle zrywa z powyższym wyjątkiem.

Czy ktoś wie, dobre rozwiązanie dla tego? Dzięki.

+0

Proponuję przejrzeć [bazę błędów] (http://bugs.sun.com/) i jeśli nie widzisz czegoś podobnego, podnieś nowy raport. –

+0

Dobra, rozglądałem się, ale nie mogłem nic znaleźć. Podniosłem nowy raport i jeśli zmieni się w błąd, powrócę tutaj. Dzięki. – Patrick

+1

Miałem podobny problem z osadzaniem apletu Javy na Witrynach Google w "szafce na pliki" - włączono również dziennik Java i odkryłem, że adres URL "codebase" jest ukryty w chmurze. Różne części mojego apletu były faktycznie pobierane z różnych adresów IP w przestrzeni Google (gdzie przechowują pliki w szafach plików). Moim obejściem było udostępnienie apletu na stronie code.google.com, co nie jest prawdopodobnie pomocne. Myślę, że nie jest to jedyny problem, jaki JRE ma z zachowaniem w chmurze. – Fuhrmanator

Odpowiedz

0

Czy wersja pliku JNLP opartego na nazwie hosta s3 czasami działa? Jeśli tak, spodziewam się, że przyczyną są krótkie wartości czasu życia na serwerach Amazon S3.

W tej chwili rekordy "A" wygasają po zaledwie 30 sekundach. Może to oznaczać, że między żądaniami HTTP do S3 dla każdego pliku JAR, cache DNS wygaśnie. Zatem następne żądanie JAR spowoduje ponowne wyszukanie DNS.

Zauważyłem, że DNS dla S3 zwraca tylko jeden adres IP, ale następnie obraca się po 30 sekundach.

% dig s3.amazonaws.com 
;; ANSWER SECTION: 
s3.amazonaws.com.  229  IN CNAME s3.a-geo.amazonaws.com. 
s3.a-geo.amazonaws.com. 213  IN CNAME s3-1.amazonaws.com. 
s3-1.amazonaws.com.  28   IN A  176.32.100.200 

nie jestem pewien o JNLP, ale ogólnie Java jest bardzo wrażliwy na zapewnienie, że pliki JAR są ładowane z tego samego „źródła”. Domyślam się, że w tym kontekście Java chce, by "źródło" oznaczało "ten sam adres IP".

W najgorszym przypadku można spróbować dynamicznie generować JNLP, umieszczając go w S3 w czasie rzeczywistym, a następnie kierując klientów, aby uzyskać pełny pakiet z tego miejsca?

Powiązane problemy