2010-07-26 24 views
7

Tôi có một ứng dụng JavaEE6, bao gồm các công cụ Web và EJB và được triển khai dưới dạng chỉ WAR (sử dụng EJB3.1). Bản dựng dựa trên Maven. Tôi vừa đọc về một khả năng mới để ra lệnh khởi tạo mô-đun trong Java EE 6 here mà tôi cũng cần cho ứng dụng của mình. Ngoài ra, tôi muốn có một tùy chọn để xác định một số thuộc tính EJB trong XML.Ứng dụng EJB 3.1 được triển khai dưới dạng chỉ dành cho WAR: Còn ejb-jar.xml thì sao?

Vì ví dụ được triển khai dưới dạng dự án EAR, thứ tự được xác định trong tệp application.xml. Nhưng trong một dự án được triển khai bởi WAR, không có application.xml. Bây giờ tôi tự hỏi nơi tôi có thể xác định thông tin như vậy? Hoặc là có thể sử dụng một application.xml bằng cách nào đó trong một ứng dụng WAR được triển khai?

EDIT:

Rất tiếc tôi đã không đọc các mô-đun-để-ví dụ đúng, trong giây phút đầu tiên tôi nghĩ đó là khoảng trong đó đặt hàng các EJB trong ứng dụng của tôi được nạp. Tất nhiên tôi chỉ có một mô-đun trong ứng dụng WAR của tôi, vì vậy việc đặt hàng không có ý nghĩa gì cả.

Ok, nhưng như tôi đang ở đó, một câu hỏi lớn vẫn còn (cũng thay đổi tiêu đề câu hỏi để phản ánh thay đổi): Điều gì về ejb-jar.xml? Tôi có thể xác định bằng cách nào đó các công cụ về các EJB của tôi trong XML (vì nó có ích cho một số thiết lập, để tránh biên dịch lại) không?

+0

Nhận thấy chỉnh sửa, câu hỏi hay về btw của bạn. Tôi đã cập nhật câu trả lời của mình. –

Trả lời

9

Tóm lại, không thể triển khai dựa trên WAR.

Tính năng khởi tạo mô-đun của Java EE 6 có nghĩa là để khởi tạo các mô-đun khác nhau của một ứng dụng theo một thứ tự cụ thể. Thời điểm bạn có ứng dụng EJB dựa trên WAR, bạn không còn có các mô-đun riêng biệt cho ứng dụng EJB và Web của mình nữa. Chỉ có một mô-đun - mô-đun ứng dụng web trong triển khai dựa trên WAR.

Do đó, nếu bạn có để đạt được các tính năng tương tự như trình tự mô-đun khởi, hiện đã có bằng Java EE 6, bạn sẽ phải làm một trong hai điều sau đây:

  • riêng các EJB thành một mô-đun riêng biệt và sử dụng triển khai dựa trên EAR.
  • Điều này ít nhiều là thủ đoạn, như đã được thực hiện trong Java EE 5 và bạn sẽ muốn tránh nó. Bạn có thể muốn mã hóa trong logic để đảm bảo rằng các EJB đơn đã được tạo ra (giả sử rằng điều này là do việc sử dụng các đơn trong ứng dụng của bạn), trước khi chúng được sử dụng trong mã.

Vị trí của ejb-jar.xml trong một tập tin WAR

The EJB 3.1 specification (trong chương nói về bao bì) đề cập đến vấn đề vị trí của tập tin ejb-jar.xml khi triển khai trong một WAR:

Trong một tập tin .WAR, deployment descriptor được lưu trữ với tên WEB-INF/ejb-jar.xml.

PS: Tôi chưa thử kiểu triển khai này. YMMV.

+0

Cảm ơn thông tin! Chỉ cần thay đổi câu hỏi của tôi, xem chỉnh sửa của tôi. – ifischer

+3

Là một lưu ý phụ, bạn CÓ THỂ đóng gói các EJB của bạn trong một EJB-JAR và triển khai chúng bên trong một WAR. –

5

Lưu ý phụ về EJB trong xử lý .wars và ejb-jar.xml. Như đã lưu ý, vị trí là WEB-INF/ejb-jar.xml, nhưng cũng lưu ý rằng chỉ có chỉ vị trí được kiểm tra ngay cả khi có các ejbs jars bên trong WEB-INF/lib/- thông qua các quy tắc tiêu chuẩn bất kỳ META-INF/Các tệp ejb-jar.xml bị bỏ qua.

Nhóm chuyên gia đã được chia nhỏ trên trang đó, vì vậy nếu bạn có sở thích, không quá muộn để gửi phản hồi cho danh sách nhóm chuyên gia EJB 3.1 để xem xét trong EJB.next.

Bỏ phiếu của tôi vẫn cho phép các lọ cá nhân có tệp META-INF/ejb-jar.xml giống như các bình này giờ đây có thể có các tệp persistence.xml, beans.xml, đoạn web, v.v. Vấn đề lớn hơn đối với tôi là nó có mâu thuẫn với API vùng chứa EJB được nhúng hỗ trợ đường dẫn lớp kiểu EAR, cho phép một số lọ/mô-đun có thể chứa tệp META-INF/ejb-jar.xml. Kết quả là nếu bạn sử dụng API nhúng để thử nghiệm một ứng dụng ejb đa jar được tạo thành một tệp .war duy nhất, thì bạn sẽ phải đối mặt với nhiệm vụ hợp nhất bất kỳ dữ liệu ejb-jar.xml nào mà bạn có vào một ejb -jar.xml cho webapp. Sắp xếp một nỗi đau cho người dùng.

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