У меня есть одна WAR (app.war) и один контейнер (Tomcat, Jetty, Glassfish, что угодно). Моя цель - развернуть по запросу сотни экземпляров этого же веб-приложения в контейнере.
http://foo/app1 --> app.war
http://foo/app2 --> app.war
http://foo/app3 --> app.war
...
http://foo/appN --> app.war
Некоторые очевидные способы достижения этого:
- В Tomcat создайте один файл context.xml для каждого приложения (с именем appN.xml), все указывая на ту же WAR. Другие контейнеры имеют сходные методы
- Проблема с этим подходом: он взорвет WARN раз, заняв много места на диске.
- Используйте символические ссылки для создания папок webapp/{app1, app2, appN}, указывающих на взорванную версию app.war. Это предотвращает взрыв дискового пространства, но JVM по-прежнему загружает много дубликатов JAR в память.
- Используйте некоторую общую папку lib, чтобы содержать большинство банок (и комбинацию из двух предыдущих опций).
Интересно, есть ли лучший способ сделать это. В идеале, создание нового экземпляра не должно занимать больше места на диске (кроме крайних конфигурационных файлов) и обрабатывать только память, связанную со стеками выполнения потоков и другими распределениями времени выполнения.
Любые идеи?