首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2EE

EJB 3 訊息驅動 Bean (MDB) 實戰:異步處理、JMS Queue 配置與跨機器調用

     編輯:J2EE

Session Bean 同步調用導致客戶端等待,耗時操作需異步化。MDB 基於 JMS:客戶端(生產者)發送訊息至 Queue,MDB(消費者)讀取處理。本文完整示例:客戶端發送實體 Bean 實例,MDB 持久化該實體。

三步實現

1. 實體 Bean:DateBean

標準 JPA 實體,@Entity、@Table、@Id、@GeneratedValue、@Column,含 id 與 myDate 屬性。

2. MDB:DateMessageBean

  • 實作 MessageListener,覆寫 onMessage(Message)。
  • @MessageDriven 指定 activationConfig:destinationType=javax.jms.Queue、destination=queue/MDBQueue。
  • 注入 EntityManager(@PersistenceContext)。
  • onMessage 中判斷 ObjectMessage,提取實體並 em.persist()。

3. JBoss Queue 手工配置(關鍵)

JBoss 不自動建 Queue,需在 server/default/deploy 建 xxx-service.xml(如 mdb-service.xml):

<?xml version="1.0" encoding="UTF-8"?>
<server>
  <mbean code="org.jboss.mq.server.jmx.Queue"
         name="jboss.mq.destination:service=Queue,name=MDBQueue">
    <depends optional-attribute-name="DestinationManager">
      jboss.mq:service=DestinationManager
    </depends>
  </mbean>
</server>

name 屬性中的 name=MDBQueue 必須與 queue/MDBQueue 尾部一致。未配置拋 NameNotFoundException: MDBQueue not bound;未設 destination 屬性拋部署異常。

4. 調用 MDB 的 Session Bean:GreeterBean

  • @Resource(mappedName="ConnectionFactory") 注入連線工廠。
  • @Resource(mappedName="queue/MDBQueue") 注入 Queue。
  • 業務方法中:建立 DateBean、獲取 JMS 連線/Session/Producer、包裝 ObjectMessage 發送、關閉連線。

5. 跨機器 JNDI 直接調用

獨立 Java 客戶端:InitialContext 查找 ConnectionFactory 與 queue/MDBQueue,建立 QueueConnection/QueueSession/MessageProducer,發送 ObjectMessage 封裝的實體。無需部署於應用伺服器。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved