Đâ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ộc và rà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>
Nguồn
2010-01-18 10:24:36
bây giờ mà cảm thấy tốt hơn :) – Bozho