以下开发的方式是点对点的Queue方式的Bean,Topic方式的与其相同,修改Queue为Topic即可
1,编写jndi文件,位于src目录下
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=localhost:1099
2,编写*-server.xml,(这里为MyMessageBean-server.xml)到
jboss-4.2.3.GA/server/default/deploy下
<?xml version="1.0" encoding="UTF-8"?>
<server>
<mbean code="org.jboss.mq.server.jmx.Queue"
name="jboss.mq.destination:service=Queue,name=MyMessageBean">
<attribute name="JNDIName">queue/MyMessageBean</attribute>
<depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends>
</mbean>
</server>
3,编写消息发送者QueueSender.java(过程中,很多需要查找jndi名称)
package huanran.ejb3.sender;
import javax.jms.Destination;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSession;
import javax.naming.InitialContext;
/**
* Queue消息测试发送端
* @author Administrator
*/
public class QueueSender {
/**
* @param args
*/
public static void main(String[] args) {
try {
InitialContext ctx = new InitialContext();
QueueConnectionFactory factory = (QueueConnectionFactory) ctx.lookup("QueueConnectionFactory");
QueueConnection connection = factory.createQueueConnection();
QueueSession session = connection.createQueueSession(false,QueueSession.AUTO_ACKNOWLEDGE);
Destination destination = (Queue) ctx.lookup("queue/MyMessageBean");
MessageProducer messageProducer = session.createProducer(destination);
messageProducer.send(session.createTextMessage("Queue消息"));
session.close();
connection.close();
System.out.println("成功发送消息!");
} catch (Exception e) {
e.printStackTrace();
}
}
}
4,开发消息驱动Bean,该bean必须实现MessageListener,而且需加入监听的目标地址与类型等,如下:
package huanran.ejb3.bean;
import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
@MessageDriven(
activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/MyMessageBean")
}
)
public class QueueMessageBean implements MessageListener {
public void onMessage(Message m) {
try {
TextMessage tm = (TextMessage) m;
System.out.println(tm.getText());
} catch (Exception e) {
e.printStackTrace();
}
}
}
5,发布该驱动Bean,便可正常收到消息,这里采用ant方式发布,build.xml位于项目目录下
<?xml version="1.0" encoding="utf-8"?>
<project name="MessageBean">
<!-- properies -->
<property name="basedir" value="." />
<property name="src.dir" value="${basedir}/src" />
<property environment="env"/>
<property name="jboss.home" value="D:/jboss-4.2.3.GA" />
<property name="build.dir" value="${basedir}/build" />
<property name="jboss.server.config" value="default" />
<!-- 定义classpath -->
<path id="build.classpath">
<fileset file="${jboss.home}/client/*.jar">
</fileset>
<pathelement location="${build.dir}" />
</path>
<!-- 初始化任务 -->
<target name="prepare">
<delete dir="${build.dir}"/>
<mkdir dir="${build.dir}"/>
</target>
<!-- 编译 -->
<target name="compile" depends="prepare" description="compile the source files">
<javac srcdir="${src.dir}" destdir="${build.dir}">
<classpath refid="build.classpath" />
</javac>
</target>
<!-- 打包成jar -->
<target name="pack" depends="compile" description="make .jar file">
<jar jarfile="${basedir}/${ant.project.name}.jar">
<fileset dir="${build.dir}">
<include name="**/*.class"/>
</fileset>
</jar>
</target>
<!-- 发布ejb -->
<target name="deploy" depends="pack" description="发布ejb">
<copy file="${basedir}/${ant.project.name}.jar" todir="${jboss.home}/server/${jboss.server.config}/deploy"/>
</target>
<!-- 删除ejb -->
<target name="undeploy" description="删除ejb">
<delete file="${jboss.home}/server/${jboss.server.config}/deploy/${ant.project.name}.jar"/>
</target>
</project>