2015-05-05 18 views
10

Tôi đang viết một phương thức chính độc lập gọi một nhà sản xuất (để đẩy dữ liệu vào hàng đợi), và sau đó gọi người tiêu dùng tiếp tục nghe chủ đề đó.Trả về chuỗi từ jms

Tôi đã ghi đè onMessage và tôi có thể nhận được thông báo từ hàng đợi, nhưng tôi không thể trả lại tin nhắn cho phương thức gọi.

Thực ra, tôi muốn chuyển thông điệp đến trình duyệt, do đó muốn kiểm tra xem tôi có thể mang nó ít nhất cho đến khi chính không.

Vui lòng trợ giúp;

class TextMessageListener implements MessageListener { 
     String msgData; 

     public String getMsgData() { 
      return msgData; 
     } 

     public void setMsgData(String msgData) { 
      this.msgData = msgData; 
     } 

     public void onMessage(Message message) { 
      try { 
       if (message instanceof TextMessage) { 
        TextMessage textMessage = (TextMessage) message; 
        System.out.println("Received message in ::" + textMessage.getText() + " '"); 
        setMsgData(textMessage.getText()); 
       } 
      } catch (JMSException e) { 
       System.out.println("Caught:" + e); 
       e.printStackTrace(); 
      } 
     } 
    } 
+0

Sử dụng phương pháp chính độc lập, cách bạn kết nối Hàng đợi tin nhắn. Có lẽ liên kết này có thể giúp bạn http://www.novell.com/documentation/extend5/Docs/help/MP/jms/tutorial/ – Premraj

+0

@premraj, đang cố gắng đặt giá trị bằng setMsgData (textMessage.getText()); và sau đó đang cố gắng gọi getter để có được giá trị, nhưng tiếc là getter không được gọi. –

+0

Nó sẽ giúp nếu bạn cho thấy mã được cho là để gọi getter, vì đó dường như là một phần mà không hoạt động chính xác. Câu hỏi –

Trả lời

3

Cuối cùng nhận được câu trả lời,

retrieving a value from message listener and print in Main

Trong lớp này, người dùng đã đưa ra một ví dụ:

@Stateful 
public class AManagerBean implements ejb.AManagerRemote { 
@Resource(mappedName = "jms/QueueConnectionFactory") 
private ConnectionFactory queueConnectionFactory; 
@Resource(mappedName = "jms/Queue") 
private Queue queue; 

private static int fineAmt; 

...... 

static class AListener implements MessageListener{ 
    public void onMessage(Message message){ 
     ..... 
     fineAmt = msg.getInt("fineAmt"); 
     // I NEED FINEAMT TO SHOW IN MAIN CLASS 

     ..... 
    } 
} 

public int returnFine(){ 
    return fineAmt; 
} 

Trong lớp học chính ...

public class Main { 

    @EJB 
    public static AManagerRemote amr; 

    public static void main(String[] args) { 
     ...... 
     System.out.println(amr.returnFine()); 
     // ALWAYS RETURN 0 

Trước hết, các biến tĩnh không cuối cùng trong EJB không được phép. Có một mục về vấn đề này trong Câu hỏi thường gặp về EJB Restrictionc

Các trường lớp tĩnh không phải không được phép trong EJB vì các trường này làm cho một bean doanh nghiệp khó phân phối hoặc không thể phân phối. Các trường lớp tĩnh được chia sẻ giữa tất cả các cá thể của một lớp cụ thể, nhưng chỉ trong một Máy ảo Java (JVM) đơn. Việc cập nhật một trường tĩnh bao hàm ý định chia sẻ giá trị của trường trong tất cả các trường hợp của lớp. Nhưng nếu một lớp đang chạy trong một số JVM cùng một lúc, chỉ những cá thể chạy trong cùng một JVM như cá thể cập nhật mới có quyền truy cập vào giá trị mới. Nói cách khác, một trường tĩnh nonfinal sẽ hoạt động khác nếu chạy trong một JVM đơn lẻ, hơn là nó sẽ chạy trong nhiều JVM. Thùng chứa EJB bảo lưu tùy chọn phân phối các bean doanh nghiệp trên nhiều JVM (chạy trên cùng một máy chủ hoặc trên bất kỳ nhóm máy chủ nào). Các trường lớp tĩnh không phải là không được phép vì các cá thể bean nghiệp vụ sẽ hoạt động khác nhau tùy thuộc vào việc chúng có được phân phối hay không. Thứ hai, bạn đã xác định một bean phiên trạng thái. Một bean phiên trạng thái được cho là có trạng thái đàm thoại, và một máy khách (thường) có một xử lý cho cùng một bean trạng thái trong suốt thời gian sống của nó. Tôi không thể nhìn thấy bất cứ điều gì tương tác trong ví dụ của bạn (tôi giả sử, vì bạn đã cắt bỏ một số mã), vì vậy nó thực sự cần phải là một bean nhà nước?

Vì vậy, tôi khuyên bạn nên làm điều đầu tiên để làm lại thiết kế và cố gắng tạo ra một ví dụ thực tế hơn về cuộc sống.

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