2010-01-18 27 views
6

Mã của chúng tôi có một cái gì đó như thế này:Làm cách nào để chỉ định tên cho chú thích tài nguyên trong thời gian biên dịch?

@Resource(name = "java:comp/resource/foo/bar/ONE_QUEUE") 
private Queue queue; 

Tuy nhiên, trong một kịch bản triển khai các chú thích hàng đợi sẽ trông như thế này:

@Resource(name = "java:comp/resource/foo/bar/SECOND_QUEUE") 
private Queue queue; 

Tôi muốn chọn tên để sử dụng với Maven xây dựng hồ sơ .

Tôi có các tùy chọn nào?

Trả lời

10

Đây không phải là cách phù hợp để thực hiện. Tài nguyên phải được thêm vào tên jndi địa phương địa phương của các EJB riêng lẻ. Điều này là để tách biệt tên jndi được sử dụng trong mã bean từ các ràng buộc jndi toàn cầu do người triển khai bean thiết lập. Ánh xạ của bean jndi địa phương ràng buộcràng buộc toàn cầu có thể được xử lý qua ejb-jar.xml và mô tả triển khai dành riêng cho máy chủ ứng dụng.

Vì vậy, thay vào đó, bạn nên tuyên bố của bạn @Resource (tương đương với một chỉ tên <resource-ref> yếu tố tham khảo tài nguyên và type) như thế này:

@Resource(name = "jms/queue/aQueue") 
private Queue queue; 

Sau đó, trong một bộ mô tả triển khai appserver cụ thể (ví GlassFish đó là sun-ejb-jar.xml, đối với JBoss là jboss.xml, đối với WebLogic, nó là weblogic-ejb-jar.xml, v.v.), khai báo một phần tử <resource-ref> cho biết tên tham chiếu tài nguyên và liên kết jndi toàn cầu qua phần tử <jndi-name>.

<resource-ref> 
    <res-ref-name>jms/queue/aQueue</res-ref-name> 
    <jndi-name>resource/foo/bar/ONE_QUEUE</jndi-name> 
</resource-ref> 

Khi bạn sẽ có được toàn bộ công việc, sẽ dễ dàng tạo ra mô tả triển khai cụ thể cho máy chủ ứng dụng này bằng Maven cho các môi trường khác nhau với cấu hình và lọc. Chỉ cần sử dụng thuộc tính, kích hoạt lọc tài nguyên và đặt giá trị khác trong cấu hình. Một cái gì đó như thế:

<resource-ref> 
    <res-ref-name>jms/queue/aQueue</res-ref-name> 
    <jndi-name>${my.jndi.name}</jndi-name> 
</resource-ref> 
+1

bây giờ mà cảm thấy tốt hơn :) – Bozho

1

Tôi nghĩ bạn có thể sử dụng tính năng lọc maven, mặc dù nó sẽ cảm thấy lạ.

Here là một bài viết về phương pháp này.

+0

Đó là một ý tưởng thú vị, thanks for the tip – tputkonen

0

Nếu bạn không muốn làm cho mỗi đậu cấu hình, bạn có thể sử dụng chức năng Seam JBoss cho điều này (xem Seam reference doc). Tôi không biết đây có phải là một phần của đặc tả Java Dependency Injection hay không (JSR-299) (nếu bạn lo lắng về tính độc lập của nhà cung cấp).

EDIT: Rõ ràng nó là một phần của JSR-299, xem resin's doc about JSR-299

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