2013-05-26 29 views
5

Tôi mới sử dụng Java EE và đang sử dụng JBoss 7 để tạo dự án đầu tiên của mình. Tôi có một dự án EAR, một dự án EJB, dự án WEB và một dự án JPA trong vùng làm việc của tôi. Ejb được tạo trong dự án EJB muốn sử dụng một ejb được tạo trong dự án JPA. Tất cả đều biên dịch tốt, tuy nhiên khi tôi triển khai dự án EAR, tôi nhận được ngoại lệ sau và triển khai không thành công. Đây là nguyên nhân ngoại lệ chính.JBAS014544: Không tìm thấy EJB có giao diện

JBAS014544: Không EJB tìm thấy với giao diện kiểu 'com.kohlisoft.stockmanagement.jpa.service.StockManagementBeanJpa' cho ràng buộc com.kohlisoft.stockmanagement.ejb.main.StockManagementService/sms

Tôi nghi ngờ rằng dự án EJB không thể xem xét lớp học trong jpa jar.

Tôi đã đi qua các liên kết khác nhau để sắp xếp nó nhưng không giúp đỡ. Dựa trên vài gợi ý tôi đã sửa đổi nó nhưng vẫn không có niềm vui. 1. Tôi đã kiểm tra cấu trúc và dự án JPA đang đi theo thư mục lib trong .ear. 2. Cập nhật tệp kê khai của dự án EJB để thêm phần phụ thuộc vào bình jpa.

Tôi thực sự đánh giá cao sự trợ giúp ở đây.

EJB trong dự án JPA.

@Stateless 
@LocalBean 
public class StockManagementBeanJpaBean implements StockManagementBeanJpa { 

    @PersistenceContext(unitName="StockManagement") 
    private EntityManager em; 

EJB trong dự án EJB trong đó sử dụng nó:

@Stateless 
@LocalBean 
public class StockManagementService implements StockManagementServiceLocal { 

    @EJB 
    StockManagementBeanJpa sms; 

... 

EJB Project MANIFEST tập tin.

Manifest-Version: 1.0 
Class-Path: StockManagement-ejbClient.jar 
Dependencies: lib/StockManagement-jpa.jar 

Đây là cấu trúc của .jars và .war in .ear.

.ear 
|____ ejb.jar 
| 
|____ ejbClient.jar 
| 
|____ web.war 
| 
|____ /lib 
     | 
     | ____ jpa.jar 
     | 
     | ____ all other jars related to derby client, hibernate, jta etc. 

Hãy cho tôi biết nếu có bất kỳ tệp nào khác được yêu cầu.

+0

Mã đăng và tệp cấu hình. –

+0

Vui lòng đăng cấu trúc tệp tai của bạn quá. Chỉ định những gì libs được đặt ở đâu. –

+0

Tôi nghĩ bạn phải chú thích giao diện của mình bằng chú thích Từ xa hoặc Địa phương. –

Trả lời

8

Cấu trúc tệp của bạn có vẻ không sao.

Vì vậy, vấn đề ở đâu?

@Localbean chỉ nên được sử dụng trong hạt EJB khi EJB của bạn không mở rộng giao diện. @Local có thể được sử dụng cho giao diện và sau đó mở rộng bạn EJB với giao diện hoặc sử dụng @Local straingh bên không giao diện của bạn EJB. Nhưng @Localbean chỉ được sử dụng cho không có giao diện EJB. Vì vậy, những gì bạn đang làm là không đúng.

Vì bạn đang mở rộng giao diện, làm như sau:

Interface

@Local 
public interface StockManagementBeanJpa 
{ 

.... 

} 

EJB

@Stateless 
public class StockManagementBeanJpaBean implements StockManagementBeanJpa 
{ 

.... 

} 

Làm điều này cho tất cả các EJB.

Tôi muốn chỉ ra 1 điều nữa mà @Local sẽ hoạt động trong trường hợp của bạn vì bạn đang gọi EJB từ cùng một ứng dụng (cùng một EAR). Điều này sẽ không hoạt động trong trường hợp cuộc gọi ứng dụng chéo (EAR, WAR ...) khác nhau hoặc ứng dụng khách từ xa gọi EJB của bạn. Trong trường hợp này, bạn sẽ cần @Remote.

+0

Tôi đã cập nhật nó nhưng nó vẫn không hoạt động. – atko

+0

lỗi là gì? –

+0

lỗi tương tự như trước đây. – atko

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