Jboss ESB學習筆記2.doc_第1頁
Jboss ESB學習筆記2.doc_第2頁
Jboss ESB學習筆記2.doc_第3頁
Jboss ESB學習筆記2.doc_第4頁
Jboss ESB學習筆記2.doc_第5頁
免費預覽已結束,剩余15頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

JBoss ESB學習筆記2第一個ESB應用Hello World續上文搭建好開發環境后就可以開發ESB應用了。本文介紹第一個ESB應用Hello, World。說明:本文及后續文章雖非百分百的原創,但畢竟包含本人的努力和付出,所以希望大家轉載時務請注明出處:,謝謝合作。 1. 新建ESB工程如下兩圖所示,輸入項目名稱,選中JBoss ESB Runtime。 2. 基本概念介紹在進行下面的操作之前有必要介紹JBoss ESB的一些基本概念,如果沒有這些概念作基礎,而僅僅是機械的操作,那是沒有意義的。2.1 Provider在JBoss ESB中,使用Provider定義來提供ESB對外的入口,常用的Provider有:jms-provider,fs-provider,ftp-provider,schedule-provider,sql-provider,http-provider,jms-jca-provider,jbr-provider等。2.1.1 jms-provider用戶定義JMS的接口入口,對外發布的接口可以通過JMS的形式提供出去,通過在jboss-esb.xml文件中定義JMS 的Provider,同時定義JMS監聽器,就可以從監聽器接收到來自客戶端的JMS請求。2.1.2 fs-provider文件系統的接口入口,可以定義接入的文件目錄,文件擴展名等信息,當特定的文件被透過任意途徑放到接入目錄后,監聽fs-provider的監聽器就可以接收到消息,并可以讀取到文件的內容,文件被處理后,還可以被移動到特定的目錄下,也可以修改文件的后綴名以標識文件已經被接口程序處理過了。 2.1.3 ftp-providerFTP入口,可以定義入口FTP服務器的IP,用戶名,密碼,目錄路徑等信息。當有文件被上傳到定義好的FTP服務器目錄時,接口入口對應的監聽器就可以監聽到文件,并將文件內容通過Message的形式傳遞給接口程序。這個接口適合于通過FTP和我們系統進行通訊的接口。2.1.4 sql-provider數據庫表接口。這個Provider適合于表接口程序。外部系統對某一個表的數據庫操作可以被對這個Provider進行監聽的監聽器捕捉到,并調用相關的Action進行處理。 2.1.5 http-providerHTTP方式的接口接入定義,通過http-provider,可以向外提供HTTP形式的接口,并接收來自這個接口的HTTP請求,可以通過請求獲取到請求參數。除了通過HTTP接口提供對外接口以外,也可以通過這個接口方式來提供服務集成,我們可以在門戶上指定ESB上的HTTP-Provider接口,并通過這個接口去訪問外部接口,再將外部接口返回的數據封裝成HTML能識別的格式,發送給門戶上的Portal,從而實現服務集成。2.1.6 jbr-provider通過jbr-provider,可以實現Web Service的接口中介功能。2.2 ServiceService是JBoss ESB對外發布的服務,一個Service一般包括兩個部分,一個是Listener,一個是Action。Listener負責監聽客戶端接口發起者發送過來的消息,Action負責處理接口請求。一個Service可以有多個Listener,對多個接口入口請求;一個Service也可以有多個Action,不同的Action可以有不同的處理邏輯,也可以通過Router將多個Service組裝起來,形成服務鏈條的形式提供服務。 2.3 ListenerListener是JBoss ESB提供的各類形式的provider的監聽器,通過Listener,可以獲取客戶端發送到Provider上的各類消息。2.3.1 jms-listenerJMS的監聽器,通過jms-listener來監聽通過jms-provider進來的消息。2.3.2 fs-listener文件系統的監聽器,通過fs-listener來監聽通過fs-provider進來的消息。2.3.3 ftp-listenerftp監聽器,通過ftp-listener來監聽通過ftp-provider進來的消息。2.3.4 sql-listenersql監聽器,通過sql-listener監聽通過sql-provider進來的消息。2.3.5 http-gatewayhttp監聽器,監聽來自http-provider的消息。 2.3.6 udp-listenerudp-listener用來監聽指定端口的socket請求,udp-listener相對其他listener比較特殊,他無需定義provider,可以直接通過listener配置來監聽指定端口的socket消息。 2.4 ActionAction是在Service節點下面配置的,用于相應接口請求。Action可以是我們開發人員開發的繼承了AbstractActionLifecycle類的java class,可以在配置中指定process屬性,表明這個Action要執行的方法名稱,也可以指定exceptionMethod屬性,標明當異常出現的時候,要執行的方法名稱。除了可以開發Action來處理業務邏輯以外,還可以通過Action來做數據轉換,服務路由等。JBoss ESB提供了若干自帶的Action。 3 Provider定義在JBoss ESB Editor中,新建JMS Provider,輸入名稱和連接工廠名稱,分別是:JBossMQ和ConnectionFactory。點擊下一步,輸入通道ID:helloworldChanel。 4 定義消息隊列在JBoss ESB Editor中,選中Filter節點,輸入目的地名稱:queue/helloworld選中目的地類型為QUEUE(隊列),之后保存。 5 創建服務在JBoss ESB Editor中,選中Service節點,新建服務,輸入服務名稱,類別以及描述信息,Finish即可。回到JBoss ESB Editor,設置invmScope屬性為GLOBAL。該這只的具體含義以后會做介紹,這里不做說明。 6 創建JMS Listener在JBoss ESB Editor中,選中Listener節點,新建JMS Listener,輸入監聽器的名稱,同時選中之前創建的通道的ID。最后在JBoss ESB Editor中設置該監聽器的is-gateway屬性為true。這使得ESB可以直接處理JMS消息。 If you send a message directly to another service internally, it must be an EsbMessage! Only Gateways are capable of receiving real JMS messages. 某網友語 7 Action類定義由于這里使用的是自定義的action,所以在配置action之前需要編寫一個擴展了AbstractActionLifecycle類的action類,類定義如下: Java代碼 1 /* 2 * Project Name: helloworld 3 * File Name: com.thu.afa.esb.jbossesb.action.HelloWorldAction.java 4 * Copyright: Copyright (c) 2010 5 * Company: 6 */ 7 package com.thu.afa.esb.jbossesb.action; 8 9 import org.jboss.soa.esb.actions.AbstractActionLifecycle; 10 import org.jboss.soa.esb.helpers.ConfigTree; 11 import org.jboss.soa.esb.message.Message; 12 13 /* 14 * Class Name: HelloWorldAction 15 * Description: 16 * author Afa 17 * date 2010-9-6 18 * version 1.0 19 */ 20 public class HelloWorldAction extends AbstractActionLifecycle 21 22 protected ConfigTree configTree; 23 24 public HelloWorldAction(ConfigTree configTree) 25 26 this.configTree = configTree; 27 28 29 public Message doPrintMessage(Message message) throws Exception 30 31 System.out.println(message.getBody().get(); 32 33 return message; 34 35 Action類說明:在action類中必須有一個ConfigTree類型的屬性以及一個包含ConfigTree類型參數的構造方法,而邏輯處理方法(這里是doPrintMessage)的參數和返回值都必須是Message。 8 Action配置在JBoss ESB Editor中,選中Action節點,新建Custom Action,如下圖所示,輸入名稱,類路徑,并指定處理方法。到此,ESB工程的配置基本完成,下面可以進行部署了。 9 ESB部署首先在esbcontent文件夾下新建jbm-queue-service.xml文件,內容如下:Xml代碼 36 37 38 41 42 jboss.messaging:service=ServerPeer 43 44 jboss.messaging:service=PostOffice 45 46 然后在esbcontent/META-INF目錄下新建deployment.xml文件,內容如下:Xml代碼 47 48 jboss.esb.helloworld.destination:service=Queue,name=helloworld 49 50 將整個工程導出成ESB文件,并將其保存至%JBOSSESB_SERVER_HOME%serverdefaultdeploy目錄下,然后啟動ESB服務器。工程文件目錄結構如下圖所示。 10 ESB客戶端新建Java工程,并將以下Jar包添加到classpath(注:所有的Jar包都可以在jboss-esb-server中找到),客戶端測試代碼如下所示。 Java代碼 51 /* 52 * Project Name: helloworldclient 53 * File Name: com.thu.afa.esb.jbossesb.client.HelloWorldClient.java 54 * Copyright: Copyright (c) 2010 55 * Company: 56 */ 57 package com.thu.afa.esb.jbossesb.client; 58 59 import java.util.Properties; 60 61 import javax.jms.Message; 62 import javax.jms.Queue; 63 import javax.jms.QueueConnection; 64 import javax.jms.QueueConnectionFactory; 65 import javax.jms.QueueSender; 66 import javax.jms.QueueSession; 67 import javax.naming.Context; 68 import javax.naming.InitialContext; 69 70 /* 71 * Class Name: HelloWorldClient 72 * Description: 73 * author Afa 74 * date 2010-9-6 75 * version 1.0 76 */ 77 public class HelloWorldClient 78 79 private QueueConnection connection; 80 private QueueSession session; 81 private Queue queue; 82 83 public void setupConnection() throws Exception 84 85 System.out.println(Connection Starting.); 86 87 Properties properties = new Properties(); 88 properties.put(Context.INITIAL_CONTEXT_FACTORY, erfaces.NamingContextFactory); 89 properties.put(Context.URL_PKG_PREFIXES, org.jboss.naming:erfaces); 90 properties.put(Context.PROVIDER_URL, jnp:/:1099); 91 InitialContext context = new InitialContext(properties); 92 93 QueueConnectionFactory factory = (QueueConnectionFactory) context.lookup(ConnectionFactory); 94 connection = factory.createQueueConnection(); 95 queue = (Queue) context.lookup(queue/helloworld); 96 session = connection.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE); 97 connection.start(); 98 99 System.out.println(Connection Started); 100 101 102 public void stop() throws Exception 103 104 if(connection != null) connection.stop(); 105 if(session != null) session.close(); 106 if(connection != null) connection.close(); 107 108 109 public void sendMessage(String text) throws Exception 110 111 QueueSender sender = session.createSender(queue); 112 Message message = session.createTextMessage(text); 113 sender.send(message); 114 sender.close(); 115 116 117 /* 118 * Title: 119 * Method Name: main 120 * Description: 121 * author: Afa 122 * date: 2010-9-6 123 * param args 124 */ 125 public static void main(String args) throws Exception 126 127 HelloWorldClient main = new HelloWorldClient(); 128 main.setupConne

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論