总结一下最近用到的技术(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
最新文章
- ajax请求action返回json数据
- vue 倒计时
- Excle隐藏及展开列
- paip.取当天记录的方法sql跟hql hibernate
- 蓝牙的SDP协议总结
- redis——基础介绍
- Yii: 设置数据翻页
- Windows下搭建论坛
- MAC机常用快捷键整理表格
- Shell脚本编写
- <;select>;简易的二级联动
- java反射案例详解
- Linux平台生成awr报告
- all to do list
- TextView设置文字包含中英文时自动换行问题的终极解决方案
- Python-GIL 进程池 线程池
- 35-BigDecimal详解
- 内存控制篇calloc free getpagesize malloc mmap munmap
- 移动 H5(PC Web)前端性能优化指南
- Oracle表空间不足ORA-01654
热门文章
- Android从文件读取图像显示的效率问题
- Node.js+Express on IIS(续)
- 利用flask将opencv实时视频流输出到浏览器
- servlet3.0 新特性和springboot Listener和filter案例
- python 上下文处理错误,记录日志
- 字符串中包含汉字和\u,显示出汉字来
- c# windows服务
- Hightchart 技巧
- 03python条件判断与缩进
- warning C4305:“初始化”:从“double”到“float”截断