Tôi đang học J2EE và EJB và tôi đã gặp phải một vấn đề lạ. Đây là thiết lập dự án của tôi:Các lớp dự án EJB được tham chiếu không được tìm thấy trong dự án Web (tham chiếu)
Tôi đang sử dụng Glassfish 3.1 và Eclipse 3.7. Tôi có hai dự án trong Eclipse:
- Một EJB 3.0 dự án tuân thủ,
myEjbProject
- Một dự án Dynamic Web,
myWebProject
Tôi đang tiêm một session bean EJB mySessionBeanPackage.mySessionBean
từ myEjbProject
thành một servlet myServletPackage.myServlet
trong myWebProject
và sau đó (trong servlet) gọi một phương thức đơn giản được xác định trong bean phiên.
Tôi đã cung cấp myWebProject
có tham chiếu đến myEjbProject
(sử dụng Thuộc tính -> Hộp thoại tham khảo dự án). Tuy nhiên, vì một lý do nào đó, máy chủ là không thể để tìm bean phiên. Lỗi chính xác tôi nhận được là:
SEVERE: Không tìm thấy [LmySessionBeanPackage/mySessionBean]. Lỗi trong khi tải [lớp myServletPackage.myServlet]
Lưu ý rằng cả dự án EJB và các dự án web đã được công bố đến máy chủ và tôi đã kiểm tra rằng các tập tin lớp được tạo ra cho đậu là, trên thực tế, hiện diện trên máy chủ (vì vậy tôi không thể nghĩ ra lý do tại sao máy chủ không thể tìm thấy chúng).
Có ai cho tôi biết tôi đang làm gì sai không?
Tôi cũng đã thử
thêm thư mục lớp
myEjbProject
một cách rõ ràng cho Java Build Path -> Libraries danh sáchmyWebProject
. Điều này là ngoài việc tham chiếu dự án (mặc dù tôi nghĩ rằng việc thêm một tham chiếu dự án nên có sufficed ở nơi đầu tiên). Dù sao, nó làm cho không có sự khác biệt (cùng một thông báo lỗi như trước).tạo tệp JAR từ
myEjbProject
bằng cách sử dụng tùy chọn Xuất -> Tệp EJB Jar (Tôi không muốn viết kịch bản Ant vào lúc này). Sau đó tôi đặt JAR này trong phần Java Build Path -> Libraries củamyWebProject
. Cách tiếp cận này không giải quyết vấn đề hoặc là (cùng một thông báo lỗi như trước).sửa đổi session bean có
- không có giao diện
- một giao diện địa phương
- một giao diện từ xa
và sửa đổi các tiêm cho phù hợp. Ví dụ., Đối với một bean chỉ với một giao diện địa phương, tôi đã sử dụng:
@EJB mySessionBeanPackage.mySessionBeanLocal myBean
Cách tiếp cận này không giải quyết vấn đề một trong hai (cùng thông báo lỗi như trước đây).
bỏ đi với
myEjbProject
hoàn toàn và thêm bean phiên vàomyWebProject
làmmyServletPackage.mySessionBean
(cùng gói với servlet). Trong trường hợp này, tôi có thể tiêm các session bean thành công vào servlet sử dụng@EJB mySessionBeanPackage.mySessionBean myBean
với việc từ bỏ
myEjbProject
hoàn toàn và thêm các session bean đểmyWebProject
nhưmySessionBeanPackage.mySessionBean
(một gói mới). Trong trường hợp này cũng vậy, tôi có thể tiêm các session bean thành công vào servlet sử dụng@EJB mySessionBeanPackage.mySessionBean myBean
Số 2 đã thực hiện thủ thuật cho tôi. Cảm ơn bạn, cảm ơn bạn, cảm ơn bạn! :) Tôi chưa tạo dự án EAR vì tôi nghĩ tôi sẽ bắt đầu đơn giản. Và dòng cuối cùng, vâng, tôi đã có nó rồi. Chúc mừng. –
Tuyệt vời! # 2 đã cứu tôi nhiều tóc hơn. Cảm ơn! –