總結一下最近用到的技術(1)--ultraESB


最近項目中方法用到了一些新的東西,由於之前沒有用到過,現在總結一下,方便以后查閱,本篇文章介紹ultraESB,接下來的文章會介紹JsonSchema,JsonSchamaValidator,JsonPath以及如何在spring項目中更方便地使用反射機制

 

ultraESB是我們項目中采用的一個開源的ESB實現,主要目的是為了依據數據庫表提供一些REST查詢接口,以及代理和整合其他的一些webservice和REST接口,ultraESB的主要優點是開源,配置簡單,功能比較豐富,同時還提供了一個基於JMX的管理控制台,可以動態地啟動和停止某些服務而不影響其他的服務。

 

由於官網下載編譯好的包會有問題(點擊了按鈕之后沒有任何反應),所以下邊提供了源碼的托管地址,可以直接下載源代碼,然后用maven來進行編譯 

源碼地址:https://bitbucket.org/adroitlogic/ultraesb/src

與項目的集成:ultraESB可以作為一個web項目進行單獨部署(在web.xml里邊配置spring的相關Listener等,在spring配置文件里定義各個Rest接口,代理的webservice接口等等),或是與我們的項目集成在一起(要求項目支持spring,各個rest接口和代理的webservice等還是在spring的配置文件中進行定義,需要將ultraESB依賴的jar包引入項目中)

下邊是一個demo的配置(我們選擇將ultraESB的相關配置放在一個獨立的spring配置文件里),包括了數據源配置和基於數據庫表提供的REST接口

以及對webservice接口進行proxy

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:u="http://www.adroitlogic.org/ultraesb"
       xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.adroitlogic.org/ultraesb http://schemas.ultraesb.org/ultraesb-2.0.xsd">
    <bean id="ultra-config" class="org.adroitlogic.ultraesb.core.ConfigurationImpl">
        <property name="environment">
            <bean class="org.adroitlogic.ultraesb.api.Environment">
                <constructor-arg name="name" value="path"/>
            </bean>
        </property>
    </bean>
    <bean id="fileCache" class="org.adroitlogic.ultraesb.core.PooledMessageFileCache">
        <constructor-arg type="int" value="20"/>
    </bean>

    <bean id="http-8280" class="org.adroitlogic.ultraesb.transport.http.HttpNIOListener">
        <constructor-arg ref="fileCache"/>
        <property name="port" value="8280"/>
        <!--配置默認路徑-->
        <property name="defaultContextPath" value="/service/"/>
        <property name="requestFilters">
            <list>
                <bean class="org.adroitlogic.ultraesb.transport.http.ServiceResourceRequestFilter">
                    <property name="resourcePrefix" value="http://localhost:8280"/>
                </bean>
            </list>
        </property>
    </bean>
    <!-- proxy其他接口的時候用來發送http請求,若不加上則不會向所proxy的接口發送請求-->
    <bean id="http-sender" class="org.adroitlogic.ultraesb.transport.http.HttpNIOSender">
        <constructor-arg ref="fileCache"/>
    </bean>

    <!--Demonstrates a basic query-only JSON data service. This only supports GET method, and is able to return one
    or all rows from a table using the specified queries-->
    <!-- pds數據表對應的接口proxy -->
    <u:proxy id="pdsRestService">
        <u:transport id="http-8280">
            <u:property name="ultra.transport.url" value="path*"/>
        </u:transport>
        <u:target>
            <u:inSequence>
                <u:java><![CDATA[
                    mediation.getJSONSupport().processBasicJSONDataServiceRequest(msg, "pdsJsonSvc", "dataSource_rest");
                ]]></u:java>
            </u:inSequence>
        </u:target>
    </u:proxy>
    <!-- 數據表對應接口的查詢條件定義-->
    <bean id="jsonSvc" class="org.adroitlogic.ultraesb.core.helper.BasicJSONDataService" init-method="init">
        <property name="queryMap">
            <map>
                <!--注意,若前綴相同,更長的URL應該寫在前邊-->
                <entry key="/contract/{code:VARCHAR}/reports" value="SELECT * from t1 where code =:code"/>
                <entry key="/contract/{code:VARCHAR}" value="SELECT * from t2 where code= :code"/>
            </map>

        </property>
    </bean>

    <!--這里proxy的id對應最終提供的接口的URL中/service/之后的部分-->
    <!-- 代理webservice-->
    <u:proxy id="webServiceURL">
        <u:transport id="http-8280">
            <u:property name="ultra.http.wsdl_url"
                        value="http://192.168.1.1:7780/orabpel/sc/SB_SC_CMS_InquiryContractApprovalInfoSrv/1.0?wsdl"/>
        </u:transport>

        <u:target>
            <u:inDestination>
                <!-- 實際URL-->
                <u:address>http://192.168.1.1:7780/orabpel/sc/SB_SC_CMS_InquiryContractApprovalInfoSrv/1.0</u:address>
            </u:inDestination>
            <u:outDestination>
                <u:address type="response"/>
            </u:outDestination>
        </u:target>
    </u:proxy>

    <!--數據源配置(名稱無所謂)-->
    <bean id="dataSource_rest" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${jdbc.data.driverClassName}"/>
        <property name="url" value="${jdbc.data.url}"/>
        <property name="username" value="${jdbc.data.username}"/>
        <property name="password" value="${jdbc.data.password}"/>
        <property name="maxActive" value="${jdbc.data.maxActive}"/>
        <property name="minIdle" value="${jdbc.data.minIdle}"/>
        <property name="maxIdle" value="${jdbc.data.maxIdle}"/>
    </bean>
    <!-- JMX監控-->
    <bean id="serverConnector" class="org.springframework.jmx.support.ConnectorServerFactoryBean" depends-on="registry">
        <property name="objectName" value="connector:name=iiop"/>
        <property name="serviceUrl" value="${esb.jmx.url}"/>
        <property name="threaded" value="true"/>
        <property name="daemon" value="true"/>
    </bean>
    <bean id="registry" class="org.springframework.remoting.rmi.RmiRegistryFactoryBean">
        <property name="port" value="1099"/>
    </bean>
</beans>

 

訪問,在地址欄輸入:

      http://localhost:8280/service/path/contract/參數

      http://localhost:8280/service/path/contract/參數/reports

即可訪問配置的兩個rest接口

訪問代理的webservice 的地址:

http://localhost:8280/service/path/webServiceURL

 

 

 

 

 

 

        


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM