Mam jedną WAR (app.war) i jeden kontener (Tomcat, Jetty, Glassfish, cokolwiek). Moim celem jest wdrożenie na żądanie setek instancji tej samej aplikacji internetowej na kontenerze.Skutecznie wdrażaj wiele wystąpień tego samego WAR (różne konteksty, ten sam kontener)
http://foo/app1 --> app.war
http://foo/app2 --> app.war
http://foo/app3 --> app.war
...
http://foo/appN --> app.war
Niektóre oczywiste sposoby osiągnięcia tego celu:
- W Tomcat, tworzą jeden plik context.xml dla każdej aplikacji (o nazwie appN.xml), wszystko wskazuje na samej wojnie. Inne pojemniki mają podobne metody
- problem z tym podejściem: Będzie wybuch wojny N razy, zajmując dużo miejsca na dysku
- Użyj dowiązania symboliczne do tworzenia webapp/{App1, App2, APPN} foldery wskazując na wybuchową wersję app.war. Zapobiega to eksplozji miejsca na dysku, ale JVM wciąż ładuje wiele duplikatów JAR do pamięci.
- Użyj współdzielonego folderu lib, aby zawierał większość słoików (i kombinację dwóch poprzednich opcji).
Zastanawiam się, czy istnieje lepsza metoda, aby to zrobić. W idealnej sytuacji utworzenie nowej instancji nie powinno zajmować więcej miejsca na dysku (poza marginalnymi plikami konfiguracyjnymi) i zajmować tylko pamięć związaną ze stosami wykonania wątków i innymi alokacjami środowiska wykonawczego.
Wszelkie pomysły?
Czy rozważasz przepisanie aplikacji jako wielodostępnej aplikacji? Jeśli istnieje 100s wystąpień dokładnie tego samego WAR i kodu, rozważabym zaprojektowanie tylko 1 WAR, które zostałyby wdrożone do kontekstu root'a? – beny23
@ beny23 Rozbudowane wyjaśnienie może mi również pomóc w niektórych rzeczach, nad którymi pracuję. Czy masz jakąś szansę? –
Poniżej zamieściłem odpowiedź, ale jeśli powiesz nam, dlaczego chcesz to zrobić, być może uda mi się opublikować lepszy. – ccleve