2013-04-16 31 views
6

Khi sử dụng Message Driven Beans, tên đích từ đâu để nhận tin nhắn được mã hóa cứng trong chú thích @MessageDriven(mappedName = "someDestinationName")Cấu hình MappedName chú thích trong Message Driven Bean động

Có cách nào để thêm thông tin này khi chạy? Dưới đây là một lớp Message Driven Bean mẫu.

package mdb.beans; 

import javax.ejb.ActivationConfigProperty; 
import javax.ejb.MessageDriven; 
import javax.jms.Message; 
import javax.jms.MessageListener; 

@MessageDriven(mappedName = "someDestinationName", activationConfig = 
{ 
    @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"), 
    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue") 
}) 
public class MDBSample implements MessageListener 
{  
    public MDBSample() 
    { 
     // constructor 
    } 

    @Override 
    public void onMessage(Message message) 
    { 
     // logic when message received 
    } 
} 

Trả lời

2

Theo như tôi biết, không, bạn không thể làm điều đó.

Bởi vì, khớp nối đích (là một chuỗi) và bean (là một lớp) được thực hiện khi trong thời gian triển khai, bạn không thể thay đổi đích đến theo chương trình.

Có thể có bản hack để ràng buộc lại; Tôi có nghĩa là buộc container để phát hành MDB, sau đó thay đổi điểm đến và tái initalize (đi qua tiêm phụ thuộc, sau đó bài xây dựng bước vv) nhưng tôi nghi ngờ các máy chủ ứng dụng sẽ cho phép điều đó.

Trích từ JSR-318 (đặc tả EJB 3.1);

5.4.17 Hiệp hội các tin nhắn theo hướng Beanwith một Destination hoặc Endpoint

Một bean nhắn-driven được liên kết với một đích hoặc thiết bị đầu cuối khi đậu được triển khai trong các thùng chứa. Trách nhiệm của Deployer là kết hợp bean điều khiển thông điệp với một điểm đến hoặc điểm cuối.

5.4.17.1 JMS Message-Driven Beans

Một JMS đậu nhắn-driven được liên kết với một Destination JMS (Queue hoặc Chủ đề) khi đậu được triển khai trong các thùng chứa. Đó là trách nhiệm của Deployer để kết hợp bean điều khiển thông điệp với một Queue hoặc Topic.