程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Jboss Ejb MDB

Jboss Ejb MDB

編輯:關於JAVA

對jms不是很熟悉,弄了幾天終於有了點思路。這裡有兩個程序、增加了個queue-example-service.XML配置文件很簡單,復雜點的在以後在說。

package org.jboss.tutorial.mdb.bean;

import Javax.ejb.MessageDriven;

import Javax.ejb.ActivationConfigProperty;

import Javax.jms.Message;

import Javax.jms.MessageListener;

@MessageDriven(activateConfig =

{

@ActivationConfigProperty(propertyName="destinationType", propertyValue="Javax.jms.Queue"),

@ActivationConfigProperty(propertyName="destination", propertyValue="queue/tutorial/example")

})

//A destination is the object on the JBossMQ server that clIEnts

//use to send and receive messages. There are two types of

//destination objects, Queues and Topics.

public class ExampleMDB implements MessageListener

{

public void onMessage(Message recvMsg)

{

System.out.println("----------------");

System.out.println("Received message");

System.out.println("----------------");

}

}

英文注釋是我在The JBoss 4 Application Server Guide找的,可以知道destination是在jboss 服務器裡負責收發消息 ( message ) 的地方。Destination根據消息發布方式的不同分兩種:Queues 和 Topics .

topic發布允許一對多,或多對多通訊通道,消息的產生者被叫做publisher, 消息接受者叫做subscriber,故稱為 發布/訂閱(publish/Subscribe)。

queue 是另外一種方式,僅僅允許一個消息傳送給一個客戶。一個發送者將消息放在消息隊列中,接受者從隊列中抽取並得到消息,消息就會在隊列中消失。第一個接受者抽取並得到消息後,其他人就不能在得到它。又稱為 點對點(point to point) .

關於activateConfig跟queue-example-service.XML有關,這裡只要知道destination就行了。從程序可以看到其接口為MessageListener可猜出這個程序負責監聽消息,收到消息後打印。就是這樣 :)

ClIEnt.Java

package org.jboss.tutorial.mdb.clIEnt;

import Javax.jms.Queue;

import Javax.jms.QueueConnection;

import Javax.jms.QueueConnectionFactory;

import Javax.jms.QueueSender;

import Javax.jms.QueueSession;

import Javax.jms.TextMessage;

import Javax.naming.InitialContext;

public class ClIEnt

{

public static void main(String[] args) throws Exception

{

QueueConnection cnn = null;

QueueSender sender = null;

QueueSession session = null;

InitialContext ctx = new InitialContext();

Queue queue = (Queue) ctx.lookup("queue/tutorial/example");

//這裡lookup的內容在queue-example-service.XML有定義jndi

QueueConnectionFactory factory = (QueueConnectionFactory) ctx.lookup("ConnectionFactory");

cnn = factory.createQueueConnection();

session = cnn.createQueueSession(false,//不需要事務

QueueSession.AUTO_ACKNOWLEDGE);//自動接收消息

TextMessage msg = session.createTextMessage("Hello World");

sender = session.createSender(queue);

sender.send(msg);

System.out.println("Message sent successfully to remote queue.");

}

}

ClIEnt在這裡的執行順序是 QueueConnectionFactoryà QueueConnection à QueueSession àQueueSender

如果這樣說還是不清楚的話就要先補習下jms咯。呵呵,我也是這樣的。

ClIEnt的任務呢就是發送個消息,然後由服務器接收。

queue-example-service.XML

name="jboss.mq.destination:service=Queue,name=tutorial">

queue/tutorial/example

jboss.mq:service=DestinationManager

首先給我的感覺就是這個XML跟jmx有關,mbean代表manage bean ,這個問題不大。

這個XML的作用就是instance個queue,名字為tutorial ( 可以自己改過 ) ,然後由jmx-console這個控制台統一管理,運行完這個程序可以在http://localhost:8080/jmx-console/HtmlAdaptor?action=inspectMBean&name=jboss.mq.destination%3Aservice%3DQueue%2Cname%3Dtutorial (希望你還沒來的及更改上面的配置,我找不到能讓你更快找到這個queue的地址了,太多了。) 看到這個配置文件上的queue ,jboss裡已經有了幾個queue了。

然後就是定義個jndi,ClIEnt.Java就可以lookup了。

這裡附上log4j.properties 在jboss-EJB-3.0_PrevIEw_5.zip 裡面沒有這個老是顯示缺少appender。有了這個將在該目錄下生成個record.log日志文件。

log4j.propertIEs

log4j.appender.R=org.apache.log4j.RollingFileAppender

log4j.appender.R.File=record.log

log4j.appender.R.layout=org.apache.log4j.PatternLayout

log4j.appender.R.layout.ConversionPattern=%p %d{hh:mm:ss} %t %c{1} -%m%n

log4j.appender.R.MaxBackupIndex=1

log4j.appender.R.MaxFileSize=100KB

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) -%m%n

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.rootLogger=stdout,R

運行:參考installing.Html

Windows下

打開命令提示符cmd,到 jboss_home/bin

Run.bat –c all

用ant

先build後run 就行了。

看看jboss窗口可以看到

01:01:20,828 INFO [STDOUT] ----------------

01:01:20,828 INFO [STDOUT] Received message

01:01:20,828 INFO [STDOUT] ----------------

討論:

雖然就兩個程序,但是由於我以前沒怎麼了解jms 就花了些時間。查找相關的資料對於理解以上問題是很重要。

http://www.cn-Java.com/target/news.PHP?news_id=2730

http://blog.blogchina.com/category.225381.Html

The JBoss 4 Application Server Guide

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved