2009-10-01 16 views
10

tôi có 2 webapps:Bắt đầu webapps trong tomcat theo một thứ tự quyết tâm

WebApp 2 phụ thuộc từ WebApp 1

Nếu WebApp 1 không chạy, WebApp 2 thất bại

Tôi có thể xác định trong tomcat rằng Tôi luôn luôn muốn webapp 1 bắt đầu trước khi webapp 2?

+3

Tự hỏi liệu có cách nào giải quyết vấn đề này không? –

+0

Nếu bạn có thể sắp xếp nó như vậy mà không có yêu cầu được thực hiện trên WebApp 1 cho đến khi Tomcat là tất cả các con đường lên, có lẽ lại mã WebApp 2 để lazily tải bất kỳ phụ thuộc nó có trên WebApp 1 theo yêu cầu đầu tiên. –

+0

Có một cách hacky. Xem câu trả lời của tôi ở đây: http://stackoverflow.com/questions/8793891/tomcat-starting-webapps-in-a-specific-order/16976047#16976047 –

Trả lời

9

Theo wiki Apache (tại http://wiki.apache.org/tomcat/FAQ/Miscellaneous#Q27):

Không có trật tự khởi động dự kiến. Cả thông số Servlet lẫn Tomcat đều không xác định. Bạn không thể dựa vào các ứng dụng bắt đầu theo bất kỳ thứ tự cụ thể nào.

0

Đúng là tomcat không cung cấp bất kỳ cách nào để thực thi lệnh triển khai.

Tomcat triển khai webapps theo thứ tự sau đây:

1.Any Phần mô tả bối cảnh sẽ được triển khai đầu tiên.

2.Các ứng dụng web được mã hóa không được tham chiếu bởi bất kỳ Trình mô tả ngữ cảnh nào sẽ được triển khai. Nếu họ có một tập tin .WAR liên quan trong appBase và nó là mới hơn so với các ứng dụng web phát nổ, thư mục đã phát nổ sẽ được loại bỏ và các ứng dụng web sẽ được tái triển khai từ các tập tin 3.WAR .WAR

sẽ được triển khai

đây là một giải pháp đề xuất:

Nếu bạn muốn xác định trình tự triển khai sau đó xác định một bối cảnh cho các ứng dụng web của bạn trong $ CATALINA_BASE/conf/[enginename]/[hostname] /MyApp.xml

Tomcat quét $ CATALINA_BASE/conf/[enginename]/[tên máy chủ]/bằng cách thực hiện File listFiles() trả về một mảng tệp được sắp xếp theo giá trị băm (phụ thuộc hệ điều hành).

Bạn có thể sử dụng đoạn mã sau để kiểm tra, trong đó webapps trật tự sẽ được triển khai

tập tin file = new File ("/ opt/tomcat/conf/Catalina/localhost"); Tệp [] tệp = file.listFiles(); cho (Tệp f: tệp) { System.out.println ("Tên tệp:" + f.getName()); văn bản mạnh

0

Liferay dường như đã ghi đè HostConfig theo cách có thể thực hiện điều này. Ý tưởng cơ bản là mở rộng HostConfig và sau đó ghi đè lên deployApps hoặc các phương thức deployDescriptors, depoyWars và deployDirectories riêng lẻ để sắp xếp các ứng dụng theo cách bạn muốn. Sau đó sửa đổi conf/server.xml của Tomcat bằng cách thêm thuộc tính hostConfigClass vào phần tử Host.

Xem http://www.javadocs.com/docs/com.liferay.portal/support-tomcat/6.2.0/com/liferay/support/tomcat/startup/PortalHostConfig.java để biết chi tiết.

Các vấn đề liên quan