Tôi có một WAR (app.war) và một thùng chứa (Tomcat, Jetty, Glassfish, bất kỳ thứ gì). Mục tiêu của tôi là triển khai, theo yêu cầu, hàng trăm trường hợp của cùng một ứng dụng web này trên vùng chứa.Triển khai hiệu quả nhiều phiên bản của cùng một WAR (các ngữ cảnh khác nhau, cùng một vùng chứa)
http://foo/app1 --> app.war
http://foo/app2 --> app.war
http://foo/app3 --> app.war
...
http://foo/appN --> app.war
Một số cách rõ ràng để đạt được điều này:
- Trong Tomcat, tạo một file context.xml cho mỗi ứng dụng (tên appN.xml), tất cả chỉ vào WAR cùng. thùng đựng khác nhau có phương pháp tương tự
- Vấn đề với cách tiếp cận này: Nó sẽ nổ thời WAR N, chiếm rất nhiều không gian đĩa
- Sử dụng liên kết tượng trưng để tạo webapp/{app1, app2, APPN} thư mục chỉ vào một phiên bản phát nổ của app.war. Điều này ngăn chặn sự bùng nổ không gian đĩa, nhưng JVM vẫn tải nhiều JAR trùng lặp vào bộ nhớ
- Sử dụng một số thư mục lib được chia sẻ để chứa hầu hết các lọ (và kết hợp hai tùy chọn trước).
Tôi tự hỏi nếu có phương pháp tốt hơn để thực hiện việc này. Lý tưởng nhất, việc tạo một cá thể mới sẽ không chiếm bất kỳ không gian đĩa nào (ngoài các tệp cấu hình cận biên) và chỉ chiếm bộ nhớ liên quan đến các ngăn xếp thực thi luồng và các phân bổ thời gian chạy khác.
Bất kỳ ý tưởng nào?
Bạn có cân nhắc viết lại ứng dụng dưới dạng ứng dụng đa nhiệm không? Nếu có 100 trường hợp của chính xác cùng một WAR và mã, tôi sẽ xem xét việc thiết kế chỉ 1 WAR sẽ được triển khai vào ngữ cảnh gốc? – beny23
@ beny23 Một lời giải thích phức tạp có thể giúp tôi cũng với một số điều tôi đang làm việc trên. Bất kỳ cơ hội nào bạn có thể cung cấp? –
Tôi đã đăng câu trả lời bên dưới, nhưng nếu bạn cho chúng tôi biết lý do bạn muốn thực hiện việc này, tôi có thể đăng một câu trả lời hay hơn. – ccleve