2011-09-29 57 views
5

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:

  1. Một EJB 3.0 dự án tuân thủ, myEjbProject
  2. 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ách myWebProject. Đ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ủa myWebProject. 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ào myWebProject làm myServletPackage.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

Trả lời

12

tôi sẽ khuyên bạn nên dùng một cái nhìn tại các EAR thực tế rằng các gói Eclipse và triển khai đến máy chủ . Bạn có thể làm điều này bằng cách xuất khẩu dự án EAR (nhấp chuột phải vào dự án EAR -> xuất -> Java EE -> tệp EAR)

Tôi nghĩ rằng bước bạn đang thiếu là thêm dự án EJB vào tệp MANIFEST của dự án WEB . Nhưng chỉ trong trường hợp bạn đang thiếu một vài bước nữa, tôi sẽ kiểm tra như sau:

  1. Các dự án EJB và WEB là các mô-đun của dự án EAR. Nhấn chuột phải vào dự án EAR -> properties -> Deployment Assembly -> Add -> Project -> chọn dự án EJB và WEB. Nếu bạn xuất dự án EAR của mình ngay bây giờ, bạn sẽ thấy rằng dự án EJB và WEB được đóng gói với EAR.
  2. Thêm dự án EJB vào MANIFEST của dự án WEB. Nhấn chuột phải vào WEB project -> properties -> Deployment Assembly -> Manifest entries -> Add -> chọn dự án EJB. Bạn có thể mở tệp MANIFEST.MF và thấy rằng nó bây giờ bao gồm dự án EJB.

Ngoài ra tôi thích thêm dự án EJB vào đường dẫn xây dựng dự án WEB chỉ để nó được bao gồm trong classpath của WEB: Nhấp chuột phải vào WEB project -> properties -> Java Build Path -> Projects -> Add -> Chọn EJB.

+1

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. –

+0

Tuyệt vời! # 2 đã cứu tôi nhiều tóc hơn. Cảm ơn! –

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