2014-06-10 12 views
8

Tôi sử dụng EJB bên trong các gói OSGi. Và bây giờ khi tôi cần phải nhận được EJB Tôi có jndi dài, ví dụ:Glassfish 4: cách đặt tên ứng dụng hoặc tên mô-đun cho JNDI

bean = (InterfaceName) ctx.lookup("java:global/longBundleName_version/OrganizationDirBean!and.plus.path.and.InterfaceName"); 

Tôi muốn thay đổi phần này:

longBundleName_version 

Ý tôi là, khi tôi triển khai gói phần này phải được thiết lập từ [glassfish-] application.xml hoặc từ [glassfish -] - ejb-jar.xml hoặc từ bất kỳ bộ mô tả xml nào khác. Tôi muốn tên jndi cho ejb của tôi giống như:

java:global/newBundleNameWithoutVersion/etc 

Vấn đề mà tôi không thể tìm thấy những gì tôi phải đặt trong các tệp này. Tất cả variants Tôi tìm thấy trên internet không được hỗ trợ nữa và tất cả những gì tôi đã cố gắng không hoạt động. Bạn có thể giúp tôi?

Vui lòng không cung cấp mappedName vì nó chỉ có thể được sử dụng (!) Cho các hạt từ xa. Tôi sử dụng các hạt cà phê cùng lúc với cả cục bộ và từ xa.

Nếu ai đó tham gia vào phát triển thủy tinh, bạn có thể ít nhất là điểm những gì tôi phải tự kiểm tra để tìm câu hỏi? Tôi sẽ rất biết ơn.

+1

Glassfish là mã nguồn mở, phải không? Tại sao không đọc mã có liên quan để tìm hiểu xem nó có khả thi hay không? – bmargulies

+0

@bmargulies Cảm ơn bạn đã có ý tưởng! Tôi sẽ cố gắng, mặc dù tôi nghĩ rằng nó sẽ không được dễ dàng như vậy xem xét nó bao gồm rất nhiều mã và tôi không bao giờ làm việc với mã của nó. Và để nói sự thật, tôi sợ tôi không có đủ kinh nghiệm. –

Trả lời

3

Bạn nên chú thích EJB như thế của bạn:

@Remote(value = YourInterface.class) 
@Stateless(mappedName = "java:global/fancy") 

Sau đó, GF bản ghi nói:

EJB5182:Glassfish-specific (Non-portable) JNDI names for EJB YourInterfaceImpl: [java:global/fancy, java:global/fancy!com.example.YourInterface]]] 

Và ít nhất tôi đã có thể tiêm như:

<!-- language:java --> 

@EJB(lookup="java:global/fancy") 

Vì vậy, tôi nghĩ rằng việc tìm kiếm thủ công cũng nên hoạt động.

+0

Cảm ơn bạn đã dành thời gian. Vấn đề là những gì bạn cung cấp không phải là tên JNDI di động. Và vấn đề thứ hai là mappedName chỉ được sử dụng cho các bean từ xa, nhưng tôi có cả local và remote. –

+0

Sau đó, có lẽ nó là không thể. Nếu có thể, và bạn sẽ triển khai hai lần ứng dụng của bạn, tài nguyên nào sẽ được ánh xạ tới JNDI tùy chỉnh của bạn? –

+0

Điều đó là có thể. Xem liên kết tôi đã cung cấp. –

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