2010-11-16 59 views
14

WebSphere đi kèm với cha mẹ cuối cùng và cha mẹ trước tiên. Java EE này có tuân thủ không? Điều này có được hỗ trợ bởi tất cả các máy chủ ứng dụng tương thích với Java EE 5 không?Tiêu chuẩn tải lớp Java EE

Trả lời

18

tôi đã làm nghiên cứu của riêng tôi (đi qua các thông số kỹ thuật và vài blog) và dưới đây là những gì tôi đã tìm

EAR

spec không xác định hoặc uỷ thác như thế nào bộ tải lớp nên làm việc trong một EAR. tuy nhiên nó xác định rằng

  1. Nên có mỗi thread lớp bối cảnh loader để tải thời gian chạy của lớp
  2. có thể có một cơ chế tải lớp thứ bậc cho việc giải quyết các lớp học (nhà cung cấp máy chủ ứng dụng có thể tự do thực hiện bất cứ cách nào họ chọn để)
  3. trình nạp lớp cấp cao nhất (WAR/EAR) CÓ THỂ ủy quyền cho trình nạp lớp cấp thấp (như Bootstrap, tiện ích mở rộng, v.v.). Đây là phù hợp với mô hình đoàn lớp J2SE loader (PARENT_FIRST trong WS)

WAR

đặc tả Servlet định nghĩa và giao trách nhiệm sự hỗ trợ của một PARENT_LAST (tức là WAR/web-inf/classes và WAR/web-inf/lib được ưu tiên hơn các thư viện đi kèm với máy chủ ứng dụng) mô hình tải lớp. Nhưng điều này chỉ dành cho các mô-đun WAR. Đặc tả Servlet phân tách từ mô hình ủy quyền J2SE tiêu chuẩn của PARENT_FIRST trong trường hợp này.

Reference

Spec: Servlet 2.3 Mục: 9.7.2 Web Application Classloader

Spec: Java EE 5 Mục: EE.6.2.4.7 Context lớp Loader

App Chi tiết máy chủ

Điều thú vị là, dường như hầu hết các máy chủ ứng dụng chính đều hỗ trợ một số cơ chế tắt ủy quyền để cách ly thứ ứng dụng e từ máy chủ ứng dụng nếu cần thiết (vì xung đột hoặc cách khác): WebSphere - "cha mẹ-cuối cùng", GlassFish - <class-loader delegate="false">, JBoss - java2ParentDelegation=false, Geronimo - <java2-delgation-model>false</java2-delegation-model>

+1

Đẹp nhất. Trong Glassfish, nó là btw '' trong 'sun-web.xml' để tắt chức năng ủy nhiệm. Xem thêm http://docs.sun.com/app/docs/doc/819-3659/beadf?l=en&a=view (ảnh) và http://docs.sun.com/app/docs/doc/821 -1752/beade? L = vi & a = view – BalusC

0

Thông tin tốt. Tôi đã nghiên cứu cùng một câu hỏi và đi đến kết luận tương tự. Một câu hỏi vẫn còn là, nó được khuyến khích để đi với phụ huynh lựa chọn cuối cùng? Tôi sẽ nghĩ rằng nó sẽ được kể từ khi ứng dụng của bạn là xách tay hơn; bạn không phụ thuộc vào lib của Appserver. Bạn đạt được cách ly ứng dụng. Tôi không thấy mọi người giới thiệu cách này hay cách khác. Bạn có gặp bất kỳ đề xuất thực hành tốt nhất nào không?

+0

"Tôi nghĩ nó sẽ là vì ứng dụng của bạn dễ di chuyển hơn, bạn không phụ thuộc vào lib của Appserver. Bạn đạt được cách ly ứng dụng." ---- Có thể hoặc không hoạt động vì không có tiêu chuẩn bắt buộc bởi spec. Ví dụ: http://stackoverflow.com/questions/4097567/jboss-and-different-versions-of-hibernate –

+0

Đây là 1 kịch bản khác khi cố gắng sử dụng JSF 2.0 với WAS 7 và sử dụng PARENT_LAST cho EAR và WAR. Vẫn đang cố gắng sử dụng myfaces impl rằng nó đi kèm với. Ofcourse ông đã có thể giải quyết nó bằng cách cập nhật các EL impl sử dụng nhưng điểm là bạn không thể đảm bảo tất cả mọi thứ để làm việc ngay cả khi bạn chuyển đổi chính sách đoàn: http://stackoverflow.com/questions/3214373/websphere-7-jsf- 2-0-và-classloaders –

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