欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

EJB 消息驅動bean 的開發

系統 2042 0
//-----------------------JMS 消息服務 java message service
    
java消息服務 java messae service 簡稱 JMS ,用于訪問企業消息系統的中立的API,說白了就是一組API.
企業消息系統可以協助應用軟件通過網絡進行消息交互.

JMS(編程)簡單概括為應用程序A發送一條消息到消息的服務器的某個目的Destination,然后消息服務把消息發送給應用程序B,因為應用程序A和應用程序B,沒有直接的代碼關聯.所以兩者實現了解耦.


  

一個message由三個部分組成
    
頭部 heand , 屬性 (property) , 主體 body

消息類型 都派生自Message接口
StreamMessage:一種主體中包含Java元值流的信息,其填充和讀取均按順序進行,

MapMessage:主體包含 組名----值對.沒有定義條目順序

TextMessage: 包含java字符串的信息 例如 XML信息

ObjectMessage:主體包含序列化Java對象的信息

BytesMessage:連續字節流的消息
  


消息的傳遞模型

    
傳遞模型:
點對點 :point-to-point  PTP

發布/訂閱: publish/subscribe  簡稱 PUB/SUB  

兩種區別如下:

PTP: 規定了一條消息只能傳遞給一個接受方,目標類型采用javax.jms.Queue 表示

PUB/SUB: 允許 一條消息傳遞給多個接受方,目標類型采用java.jms.Topic表示

這兩種模型都通過擴展公用基類來實現,例如 java.jms.Queue 和java.jmx.Topic 都擴展自java.jms.Destination 類


  


開始開發 --> 配置目標隊列地址 -->開發消息發送類--->消息接受類

jboss 5.0 是需要個*-service.xml這個一個xml文件來配置目標隊列地址.
編寫好后,拷貝到E:\jboss-6.0.0.Final\server\default\deploy 這就發布了
    
  <!-- 
   <attribute name="JNDIName">屬性制定了目標地址的全局JNDI名稱,
 默認全局JNDI名稱(如果不制定JNDIName屬性)
jboss會為你生成一個默認全局JNDI名稱有 "queue/" +目標地址的名稱組成

使用之前都必須<depends> 部署應用該服務器DestinationManager -->

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

  

--> 經過上面發布好后 就可以在jmx-console就可以看到了
http://localhost:8989/jmx-console/jboss.mq.destination 中可以看到剛配置JNDI名稱

jboss 6.0 就不需要了,在
E:\jboss-6.0.0.Final\server\default\deploy\hornetq\hornetq-jms.xml 只需要配置一個 queue topic 這個兩個標簽實體
    
<queue name="DLQ">
      <entry name="/queue/DLQ"/>
   </queue>
   
   <queue name="ExpiryQueue">
      <entry name="/queue/ExpiryQueue"/>
   </queue>
   
   <topic name="testTopic">
	<entry name="/topic/topicA"/>
   </topic>

  


--> 經過上面發布好后 就可以在jmx-console就可以看到了
http://localhost:8989/jmx-console/org.hornetq


EJB 消息驅動bean 的開發

開發 PTP 消息發送對象類
    
package com.sh.app;

import javax.jms.Destination;
import javax.jms.MessageProducer;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSession;
import javax.naming.InitialContext;
public class QueueSender {
	public static void main(String [] args){
		try {
			//初始化JNDI上下文
			InitialContext ctx=new InitialContext();
			//根據上下文查找連接工廠該工廠有JMS提供,不需要我們自己創建,每個廠商都為他綁定了一個全局的JDNI,通過他就可以獲取
			QueueConnectionFactory factory=(QueueConnectionFactory)ctx.lookup("ConnectionFactory");
//注意 jboss5.0 為 ctx.lookup("QueueConnectionFactory");

			//ConnectionFactory cf = (ConnectionFactory) ctx.lookup("ConnectionFactory");
			QueueConnection conn=factory.createQueueConnection();
			//根據連接得到會話
			QueueSession session=conn.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);
			//獲取目標地址
			Destination destination=(Destination)ctx.lookup("/queue/DLQ");
			//獲取消息的發送者
			MessageProducer producer=session.createProducer(destination);
			producer.send(session.createTextMessage("你好,JMS我來了,Queue!"));
			session.close();
			conn.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

  


開發PUB/SUB 消息發送對象
    
package com.sh.app;

import javax.jms.Destination;
import javax.jms.MessageProducer;
import javax.jms.QueueSession;
import javax.jms.TopicConnection;
import javax.jms.TopicConnectionFactory;
import javax.jms.TopicSession;
import javax.naming.InitialContext;

public class TopicSender {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
			//初始化JNDI上下文
			InitialContext ctx=new InitialContext();
			//根據上下文查找連接工廠該工廠有JMS提供,不需要我們自己創建,每個廠商都為他綁定了一個全局的JDNI,通過他就可以獲取
			TopicConnectionFactory factory=(TopicConnectionFactory)ctx.lookup("ConnectionFactory");
//注意 jboss5.0 為 ctx.lookup("TopicConnectionFactory");

			//ConnectionFactory cf = (ConnectionFactory) ctx.lookup("ConnectionFactory"); // jboss6.0
			TopicConnection conn=factory.createTopicConnection();
			//根據連接得到會話
			TopicSession session=conn.createTopicSession(false, TopicSession.AUTO_ACKNOWLEDGE);
			//獲取目標地址
			Destination destination=(Destination)ctx.lookup("/topic/topicA");
			//獲取消息的發送者
			MessageProducer producer=session.createProducer(destination);
			producer.send(session.createTextMessage("你好,JMS我來了,Topic"));
			session.close();
			conn.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

  


//注意 實現? MessageListener? 這個監聽接口
開發 queue消息驅動bean 去讀取消息? (一當被部署到jboss服務器中就會去讀取是否有queue類型的消息)
    
package com.sh.message;

import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.JMSException;
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/DLQ"
				)
})
//jboss 6.0 目標地址類型有"/" 開頭
//jboss 5.0 沒有 "/"  默認為  "queue/地址名稱"  地址名稱==*-sercie.xml中配置的
public class MessageDrivenBean implements MessageListener {

	@Override
	public void onMessage(Message message) {
		// TODO Auto-generated method stub
		try {
			//消息發送者是什么類型就轉換成什么類型
			TextMessage msg=(TextMessage)message;
			System.out.println(msg.getText());
		} catch (JMSException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

  



開發 Topic消息驅動bean 去讀取消息? (需要監聽先存在,然后發送的消息才會被監聽到.)
    

//第一個 topic 消息
package com.sh.message;

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

@MessageDriven(activationConfig={
		@ActivationConfigProperty(
				propertyName="destinationType",
				propertyValue="javax.jms.Topic"
				),
		@ActivationConfigProperty(
				propertyName="destination",
				propertyValue="/topic/topicA"
				)
})
public class ReceiveBean implements MessageListener {

	@Override
	public void onMessage(Message message) {
		// TODO Auto-generated method stub
		try {
			TextMessage msg=(TextMessage)message;
			System.out.println(this.getClass()+msg.getText());
		} catch (JMSException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}


//第二個類
package com.sh.message;

import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
@MessageDriven(activationConfig={
		@ActivationConfigProperty(
				propertyName="destinationType",
				propertyValue="javax.jms.Topic"
				),
		@ActivationConfigProperty(
				propertyName="destination",
				propertyValue="/topic/topicA"
				)
})
public class ReceiveOtherBean implements MessageListener {

	@Override
	public void onMessage(Message message) {
		try {
			TextMessage msg=(TextMessage)message;
			System.out.println(this.getClass()+msg.getText());
		} catch (JMSException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

  


---jndi.properties
    
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=localhost:1099		

  



--Ant 文件 build
    
<?xml version="1.0" encoding="UTF-8"?>
<!-- ====================================================================== 
     2013-2-25 下午1:53:33                                                        

     project    
     description
                   
     Bin                                                                
     ====================================================================== -->
<project name="MessageDrivenBean" basedir=".">
    <description> 
            description
    </description>
	<!-- 設置項目原目錄 -->
	<property name="src.dir" value="${basedir}\src" />
	<!-- 獲取環境變量 -->
	<property environment="env"/>
	<property name="jboss.home" value="${env.JBOSS_HOME}"/>
	<property name="jboss.server.config" value="default"/>
	<property name="build.dir" value="${basedir}\build"/>
    
	<!-- 引入 jboss client 下的 所有jar -->
	<path id="build.classpath">
		<fileset dir="${jboss.home}\client">
			<include name="*.jar"/>
		</fileset>
		<!-- 講編譯過后的路徑加入到 path中去 方便   接口和實現的引用 -->
		<pathelement location="${build.dir}"/>
	</path>
	
	
    <target name="prepare" description="創建build目錄">
		<delete dir="${build.dir}"/>
    	<mkdir dir="${build.dir}"/>
    </target>

    <!-- - - - - - - - - - - - - - - - - - 
          target: compile                      
         - - - - - - - - - - - - - - - - - -->
    <target name="compile" depends="prepare" description="編譯">
    	<javac srcdir="${src.dir}" destdir="${build.dir}" includeantruntime="false" includes="com/**">
    		<classpath refid="build.classpath"/>
    	</javac>
    </target>
	
	<!-- ================================= 
          target: ejbjar              
         ================================= -->
    <target name="ejbjar" depends="compile" description="創建EJB發布包">
        <jar jarfile="${basedir}\${ant.project.name}.jar">
        	<fileset dir="${build.dir}">
        		<include name="**/*.class"/>
        	</fileset>
        </jar>
    </target>

	<!-- ================================= 
          target: deploy              
         ================================= -->
    <target name="deploy" depends="ejbjar" description="發布EJB">
        <copy file="${basedir}\${ant.project.name}.jar" todir="${jboss.home}\server\${jboss.server.config}\deploy"/>
    </target>
	
	<!-- - - - - - - - - - - - - - - - - - 
          target: undeploy                      
         - - - - - - - - - - - - - - - - - -->
    <target name="undeploy" description="卸載EJB">
         <delete file="${jboss.home}\server\${jboss.server.config}\deploy\${ant.project.name}.jar"/>   
    </target>
</project>

  

EJB 消息驅動bean 的開發


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲一级毛片免费看 | 国产欧美日韩视频在线观看 | 国产精品久久久久无码av | 双性精h调教灌尿打屁股的文案 | 大象一区| 星际迷航4 | 日韩在线视频精品 | 一区二区三区四区五区中文字幕 | 国产精品亚洲视频 | 亚洲精品不卡 | 美日韩免费视频 | 国内精品视频区在线2021 | 高清国产一区二区三区四区五区 | 艳妇荡乳豪妇荡淫 | 我爱看片(永久免费) | se视频在线观看 | 日韩国产欧美一区二区三区 | 丁香婷婷六月天 | 久久人人爽人人爽 | 狠狠色丁香婷婷久久综合考虑 | 51国产视频 | 国产九色在线 | 亚洲精品在线播放视频 | 天天做天天爱天天大综合 | 久久99亚洲综合精品首页 | 一级毛片日本特黄97人人 | 国产成人免费无庶挡视频 | 亚洲人和日本人jizz | 精品国产91乱码一区二区三区 | 欧美一级久久久久久久大片 | 亚洲伊人色一综合网 | 亚洲一区二区视频在线观看 | 男女在线观看啪网站 | 成人av网站免费观看 | 久草视频免费在线看 | 天天碰夜夜操 | 亚洲免费在线视频 | 欧美一区二区在线播放 | 欧美精品一区三区 | 亚洲国产综合久久精品 | 精品成人一区二区 |