2012-02-17 30 views
10

Tôi cố gắng để tiêm một EJB với chú thích @EJB:WebSphere 7. Tiêm EJB từ một ứng dụng khác

  • khi tôi tiêm một EJB vào một EJB trong tai cùng nó hoạt động tốt.
  • khi tôi tiêm một EJB vào một EJB từ tai nhau trong cùng một máy chủ tôi nhận được một ngoại lệ:

EJB ném một (không công bố) ngoại lệ bất ngờ trong lời khẩn cầu phương pháp "sayHello" . Dữ liệu ngoại lệ: javax.ejb.EJBException: Tiêm lỗi; lồng nhau ngoại lệ là: com.ibm.ejs.container.EJBNotFoundException: EJB với giao diện com.mycompany.myapp.ejb.test2 không có mặt trong ứng dụng myapp1

Tôi đang sử dụng WebSphere 7 và EJB 3.0. Khi tôi tự mình tìm kiếm jndi, nó hoạt động tốt. Làm thế nào để cho container biết từ đâu để tiêm đậu từ xa của tôi?

myapp1.ear chứa sau: myapp1.jar (nơi EJB là)

myapp1 EJB:

package com.mycompany.myapp1.ejb.test1; 

@Remote 
public interface HelloEjb1 { 
    public String sayHello(); 
} 

EJB Impl:

package com.mycompany.myapp.ejb.test1; 

@Stateless 
public class HelloEjbImpl1 implements HelloEjb1 { 

    @EJB 
HelloEjb2 helloEjb2; 

    @Override 
    public String sayHello() { 
     return HelloEjb2.sayHello(); 
    } 
} 

myapp2.ear chứa sau : myapp2.jar (trong đó EJB là)

myapp2 EJB:

package com.mycompany.myapp2.ejb.test2; 

@Remote 
public interface HelloEjb2 { 
    public String sayHello(); 
} 

EJB Impl:

package com.mycompany.myapp2.ejb.test2; 

@Stateless 
public class HelloEjbImpl2 implements HelloEjb2 { 

    @Override 
    public String sayHello() { 
     return "Hello"; 
    } 
} 

Trả lời

5

Xác định các ràng buộc khi triển khai ứng dụng (1, 2), hoặc bao gồm một META-INF/ibm-ejb-jar-bnd.xml trong ứng dụng của bạn (myapp1) mô-đun EJB. Nó sẽ giống như thế này:

<ejb-jar-bnd 
    xmlns="http://websphere.ibm.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-ejb-jar-bnd_1_0.xsd" 
    version "1.0"> 
    <session name="HelloEjbImpl1"> 
    <ejb-ref name="com.mycompany.myapp.ejb.test1/helloEjb2" 
     binding-name="myapp2/myapp2.jar/HelloEjbImpl2#com.mycompany.myapp1.ejb.test1.HelloEjb1" 
    </session> 
</ejb-jar-bnd> 

Các ejb-ref name="..." có thể được đơn giản hóa nếu bạn sử dụng @EJB(name="myrefname"). Tên liên kết có thể được đơn giản hóa nếu tệp myapp2.jar của bạn bao gồm tệp ràng buộc tương tự với phần tử <interface class="..." binding-name="..."/>.

+1

cảm ơn, 'ibm-ejb-jar-bnd.xml' là khóa –

+0

Bạn có thể giải thích thêm một chút về phương pháp tiếp cận đầu tiên (ràng buộc khi triển khai ứng dụng) không? Cảm ơn. – MyTitle

+0

Tôi đã cập nhật để thêm một vài liên kết InfoCenter. Có rất nhiều thông tin trong InfoCenter, nhưng nếu bạn muốn câu trả lời chi tiết, có thể dễ dàng hơn để bắt đầu một câu hỏi mới. –

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